Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ cover.out
coverage.out
*.test
docs/
!website/docs/
!website/docs/index.html
unittesting_strategy.md
benchmarking.md
# controller-runtime client
Expand Down
7 changes: 7 additions & 0 deletions website/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
__pycache__/
*.pyc
*.pyo
*.pyd
.git/
.gitignore
.DS_Store
15 changes: 15 additions & 0 deletions website/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
FROM python:3.12-slim

WORKDIR /app

ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

EXPOSE 8080

CMD ["gunicorn", "-b", "0.0.0.0:8080", "app:app"]
34 changes: 34 additions & 0 deletions website/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Website

Basic website project.

## Files

- `templates/index.html` - main page template
- `templates/base.html` - shared layout
- `static/style.css` - landing page styles
- `static/docs.css` - documentation styles
- `app.py` - Flask server entry point
- `Dockerfile` - container setup

## Run

```sh
python app.py
```

## Python (virtualenv)

```sh
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python3 app.py
```

## Docker

```sh
docker build -t website .
docker run --rm -p 8080:8080 website
```
Comment thread
coderabbitai[bot] marked this conversation as resolved.
171 changes: 171 additions & 0 deletions website/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
from flask import Flask, redirect, render_template, send_from_directory

app = Flask(__name__)

NAV_LINKS = [
{"label": "Overview", "href": "#overview"},
{"label": "Features", "href": "#features"},
{"label": "Workflow", "href": "#workflow"},
{"label": "Architecture", "href": "#architecture"},
{"label": "Docs", "href": "/docs/"},
]

HERO = {
"badge": "docs.mcp-runtime.org",
"title": "Launch MCP servers with a platform, not a patchwork.",
"subtitle": (
"MCP Runtime Platform gives teams a registry, Kubernetes operator, and "
"CLI that standardizes how MCP servers are defined, built, and routed."
),
"primary": {"label": "Open Documentation", "href": "/docs/"},
"secondary": {"label": "View features", "href": "#features"},
}

AT_A_GLANCE = [
"Metadata-driven server definitions in YAML.",
"Operator creates Deployment, Service, and Ingress automatically.",
"Internal registry keeps images and metadata in sync.",
"Unified routes for every server at /{server-name}/mcp.",
]

STATS = [
{"value": "1 CLI", "label": "Unified workflow for platform and servers."},
{"value": "3 core services", "label": "Registry, operator, and cluster helpers."},
{"value": "0 bespoke YAML", "label": "No hand-written manifests for each server."},
]

OVERVIEW = {
"title": "Why MCP Runtime Platform",
"intro": (
"Move from experiments to production with a clear, repeatable approach "
"to deploying and cataloging MCP servers."
),
"items": [
{
"title": "Built for scale",
"body": (
"Manage a fleet of MCP servers without third-party gateways or "
"bespoke routing layers."
),
},
{
"title": "Designed for teams",
"body": (
"A centralized registry and consistent deployment flow make it "
"easy to discover and reuse servers."
),
},
{
"title": "Opinionated safety",
"body": "Promote best practices with standardized metadata and CI-ready pipelines.",
},
],
}

FEATURES = [
{
"title": "Complete platform",
"body": "Deploy registry, operator, and helpers in one setup flow built for MCP fleets.",
},
{
"title": "CLI tooling",
"body": "Manage platform setup, registry operations, and server pipelines from one CLI.",
},
{
"title": "Kubernetes operator",
"body": "Creates Deployment, Service, and Ingress resources from MCP metadata.",
},
{
"title": "Metadata-driven",
"body": "Define MCP servers in YAML without hand-writing Kubernetes manifests.",
},
{
"title": "Unified routing",
"body": "Every MCP server is reachable at a consistent /{server-name}/mcp path.",
},
{
"title": "Automated builds",
"body": "Build Docker images from metadata and keep registry entries up to date.",
},
]

WORKFLOW = [
{
"step": "01",
"title": "Define",
"body": "Capture server metadata in YAML, including name, route, and container port.",
},
{
"step": "02",
"title": "Build",
"body": "Build Docker images locally or in CI/CD and push them to the registry.",
},
{
"step": "03",
"title": "Deploy",
"body": "Generate manifests and deploy MCP servers through the operator.",
},
{
"step": "04",
"title": "Access",
"body": "Reach every MCP server through consistent URLs managed by ingress.",
},
]

ARCHITECTURE = [
{
"title": "Developer workstation",
"body": "Define servers, build images, and push updates from local development.",
},
{
"title": "CI/CD pipeline",
"body": "Build images, publish to the registry, and generate CRDs automatically.",
},
{
"title": "Kubernetes cluster",
"body": "The operator watches MCPServer resources and provisions services.",
},
{
"title": "Internal registry",
"body": "Stores MCP server images and keeps metadata in sync for discovery.",
},
]

CALLOUT = {
"title": "Active development notice",
"body": (
"MCP Runtime Platform is under active development. APIs, commands, and "
"behavior may change, and production usage is not recommended yet."
),
"cta": {"label": "Read the documentation", "href": "/docs/"},
}


@app.route("/")
def home():
return render_template(
"index.html",
nav_links=NAV_LINKS,
hero=HERO,
at_a_glance=AT_A_GLANCE,
stats=STATS,
overview=OVERVIEW,
features=FEATURES,
workflow=WORKFLOW,
architecture=ARCHITECTURE,
callout=CALLOUT,
)


@app.route("/docs")
def docs_redirect():
return redirect("/docs/")


@app.route("/docs/")
def docs_index():
return send_from_directory("docs", "index.html")
Comment on lines +165 to +167
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot Dec 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check if docs directory and index.html exist in the website folder
echo "=== Checking for docs directory ==="
fd -t d "^docs$" website

echo "=== Checking for docs/index.html ==="
fd "index.html" website/docs 2>/dev/null || echo "docs/index.html not found"

Repository: Agent-Hellboy/mcp-runtime

Length of output: 167


Create the docs directory with an index.html file in the website folder.

The route at lines 16-18 serves docs/index.html, but this directory and file do not exist. This route will fail with a 404 error when accessed.

🤖 Prompt for AI Agents
In website/app.py around lines 16 to 18, the route returns
send_from_directory("docs", "index.html") but the referenced docs directory and
index.html are missing; create a new folder website/docs and add an index.html
(or ensure the correct existing path) so the route can serve that file without
returning 404; commit the new directory and file and verify the app serves
/docs/ successfully.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's fixed

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify the docs directory and index.html file exist
echo "=== Checking for docs directory in website ==="
fd -t d "^docs$" website

echo ""
echo "=== Checking for index.html in website/docs ==="
if [ -d "website/docs" ]; then
    ls -la website/docs/index.html 2>/dev/null && echo "✓ docs/index.html exists" || echo "✗ docs/index.html not found"
else
    echo "✗ docs directory does not exist"
fi

echo ""
echo "=== Content preview of docs/index.html (first 10 lines) ==="
if [ -f "website/docs/index.html" ]; then
    head -10 website/docs/index.html
fi

Length of output: 188


@Agent-Hellboy, I verified the repository but the website/docs directory and index.html file still don't appear to exist. The /docs/ route will still return a 404 error.

Could you please:

  1. Verify that you've committed the new website/docs/index.html file
  2. Push your changes to the branch

You can check locally with:

ls -la website/docs/index.html

Once the file is pushed to the repository, I'll be able to confirm the fix! 🐰



if __name__ == "__main__":
app.run(host="0.0.0.0", port=8080)
Comment thread
Agent-Hellboy marked this conversation as resolved.
117 changes: 117 additions & 0 deletions website/docs/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>MCP Runtime Platform Docs</title>
<meta
name="description"
content="Documentation hub for MCP Runtime Platform."
/>
<link rel="stylesheet" href="/static/style.css" />
</head>
<body>
<div class="page">
<div class="bg-shape one" aria-hidden="true"></div>
<div class="bg-shape two" aria-hidden="true"></div>
<div class="bg-shape three" aria-hidden="true"></div>
<header class="site-header">
<div class="container nav">
<div class="brand">
<div class="brand-mark" aria-hidden="true">MCP</div>
<div>
<div class="brand-title">MCP Runtime Platform</div>
<div class="brand-subtitle">Registry, operator, and CLI</div>
</div>
</div>
<nav class="nav-links">
<a href="/">Overview</a>
<a href="/docs/">Docs</a>
</nav>
</div>
</header>

<main>
<section class="section container">
<div class="section-header">
<h2>Documentation</h2>
<p>
This is the landing page for MCP Runtime Platform docs. More guides
and reference material will live here.
</p>
</div>
<div class="card-grid">
<article class="card">
<h3>Get started</h3>
<p>
Explore the main repository for setup instructions, CLI usage,
and operator workflows.
</p>
<a class="button secondary" href="https://github.com/Agent-Hellboy/mcp-runtime">
View the repo
</a>
</article>
<article class="card">
<h3>Contribute</h3>
<p>
MCP Runtime Platform is open source. Contribute at
<a href="https://github.com/Agent-Hellboy/mcp-runtime">github.com/Agent-Hellboy/mcp-runtime</a>
or write to us at
<a href="mailto:princekrroshan01@gmail.com">princekrroshan01@gmail.com</a>.
</p>
<div class="footer-links">
<a class="icon-link" href="https://github.com/Agent-Hellboy/mcp-runtime">
<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<path
fill="currentColor"
d="M12 2c-5.52 0-10 4.58-10 10.23 0 4.52 2.87 8.34 6.84 9.7.5.1.68-.22.68-.49 0-.24-.01-.87-.01-1.7-2.78.62-3.37-1.37-3.37-1.37-.46-1.19-1.12-1.51-1.12-1.51-.91-.64.07-.63.07-.63 1.01.07 1.55 1.06 1.55 1.06.9 1.58 2.36 1.12 2.94.86.09-.67.35-1.12.64-1.38-2.22-.26-4.56-1.13-4.56-5.02 0-1.11.39-2.02 1.03-2.74-.1-.26-.45-1.3.1-2.71 0 0 .85-.28 2.8 1.05a9.4 9.4 0 0 1 2.55-.35c.86 0 1.72.12 2.55.35 1.95-1.33 2.8-1.05 2.8-1.05.55 1.41.2 2.45.1 2.71.64.72 1.03 1.63 1.03 2.74 0 3.9-2.35 4.76-4.59 5.01.36.32.68.95.68 1.92 0 1.39-.01 2.5-.01 2.84 0 .27.18.6.69.49A10.19 10.19 0 0 0 22 12.23C22 6.58 17.52 2 12 2z"
/>
</svg>
GitHub
</a>
<a class="icon-link" href="mailto:princekrroshan01@gmail.com">
<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<path
fill="currentColor"
d="M4 5h16c1.1 0 2 .9 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V7c0-1.1.9-2 2-2zm0 2v.1l8 4.9 8-4.9V7H4zm16 10V9.25l-7.48 4.6a1 1 0 0 1-1.04 0L4 9.25V17h16z"
/>
</svg>
Email
</a>
</div>
</article>
</div>
</section>
</main>

<footer class="container footer">
<div>
MCP Runtime Platform is open source. Contribute at
<a href="https://github.com/Agent-Hellboy/mcp-runtime">github.com/Agent-Hellboy/mcp-runtime</a>
or write to us at
<a href="mailto:princekrroshan01@gmail.com">princekrroshan01@gmail.com</a>.
</div>
<div class="footer-links">
<a class="icon-link" href="https://github.com/Agent-Hellboy/mcp-runtime">
<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<path
fill="currentColor"
d="M12 2c-5.52 0-10 4.58-10 10.23 0 4.52 2.87 8.34 6.84 9.7.5.1.68-.22.68-.49 0-.24-.01-.87-.01-1.7-2.78.62-3.37-1.37-3.37-1.37-.46-1.19-1.12-1.51-1.12-1.51-.91-.64.07-.63.07-.63 1.01.07 1.55 1.06 1.55 1.06.9 1.58 2.36 1.12 2.94.86.09-.67.35-1.12.64-1.38-2.22-.26-4.56-1.13-4.56-5.02 0-1.11.39-2.02 1.03-2.74-.1-.26-.45-1.3.1-2.71 0 0 .85-.28 2.8 1.05a9.4 9.4 0 0 1 2.55-.35c.86 0 1.72.12 2.55.35 1.95-1.33 2.8-1.05 2.8-1.05.55 1.41.2 2.45.1 2.71.64.72 1.03 1.63 1.03 2.74 0 3.9-2.35 4.76-4.59 5.01.36.32.68.95.68 1.92 0 1.39-.01 2.5-.01 2.84 0 .27.18.6.69.49A10.19 10.19 0 0 0 22 12.23C22 6.58 17.52 2 12 2z"
/>
</svg>
GitHub
</a>
<a class="icon-link" href="mailto:princekrroshan01@gmail.com">
<svg viewBox="0 0 24 24" aria-hidden="true" focusable="false">
<path
fill="currentColor"
d="M4 5h16c1.1 0 2 .9 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V7c0-1.1.9-2 2-2zm0 2v.1l8 4.9 8-4.9V7H4zm16 10V9.25l-7.48 4.6a1 1 0 0 1-1.04 0L4 9.25V17h16z"
/>
</svg>
Email
</a>
</div>
</footer>
</div>
</body>
</html>
2 changes: 2 additions & 0 deletions website/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Flask==3.0.3
gunicorn==22.0.0
Loading