MCP Server Hub
Provides tools for interacting with GitHub, allowing agents to search repositories, retrieve repository details, get file contents, and list issues.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Server Hubfetch the content of https://example.com"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
A production-ready, stateless Streamable HTTP hub that gives your AI agents (Claude, Cursor, LibreChat, custom clients) instant access to web fetching, shared memory, GitHub, Postgres and utility tools — all from a single Railway service with a single Bearer token.
Built for the 2026-07-28 MCP spec revision: no sessions, no sticky routing, any replica serves any request.
Deploy it, or run it locally:
# ...or try it on your machine in one command (auto-generates a dev token):
npx @kbncodes/mcp-server-hub --devWhy this hub?
This template | Typical MCP templates | |
Servers per deploy | 5 in one service | 1 |
Authentication | Bearer token (timing-safe compare), spec-compliant | None, optional, or hardcoded defaults |
Transport | Stateless Streamable HTTP (2026-07-28-ready) | Often deprecated SSE or sessionful |
Admin UI | Built-in status dashboard at | None |
Healthcheck |
| Usually missing |
Horizontal scaling | Yes — stateless, no session store | Rarely |
Related MCP server: MCP Gateway
What's inside
Server | Endpoint | Tools | Requires |
Utils |
|
| — |
Fetch |
|
| — |
Memory |
|
| — (volume optional) |
GitHub |
|
|
|
Postgres |
|
|
|
Plus:
Admin dashboard at
/— server status, tool inventory, copy-paste client config/healthhealthcheck endpoint (configured inrailway.json)/.well-known/oauth-protected-resource— RFC 9728 Protected Resource Metadata
Deploy on Railway
Click Deploy on the template page (or deploy this repo).
Railway auto-generates a strong
AUTH_TOKENfor you.Open your service URL — the dashboard walks you through connecting a client.
That's it. Optionally:
Add a GitHub token (
GITHUB_TOKEN) to enable the GitHub server.Attach a Postgres database and set
DATABASE_URL=${{Postgres.DATABASE_URL}}to enable read-only SQL.Mount a volume at
/dataand setMEMORY_FILE=/data/memory.jsonto persist agent memory.
Railway is the recommended home for this template: it lists in the marketplace for discovery and pays template authors via the 25% Template Kickback Program.
Run locally with npx
Want to try it on your machine first? The hub is published to npm — no clone, no build:
npx @kbncodes/mcp-server-hub --dev--dev (or any interactive terminal) auto-generates an ephemeral AUTH_TOKEN, prints it, and serves the dashboard at http://localhost:8080/. For a stable token, set it yourself:
AUTH_TOKEN=$(openssl rand -hex 32) npx @kbncodes/mcp-server-hubThe published binary stays production-safe: in a non-interactive environment (containers, CI) it still fails closed and refuses to start without
AUTH_TOKENunless you setALLOW_NO_AUTH=true.
Deploy on Render
This repo ships a render.yaml blueprint, so Render provisions everything (Docker build, /health check, auto-generated AUTH_TOKEN) in one click:
After the first deploy, set PUBLIC_URL to your Render URL (e.g. https://mcp-server-hub.onrender.com) so the auth challenge and RFC 9728 metadata advertise the correct address. To persist memory, add a Render disk mounted at /data and set MEMORY_FILE=/data/memory.json (see the commented block in render.yaml).
Deploy on Manufact Cloud
Manufact is an MCP-native host that can also distribute your server to the ChatGPT Apps Store, Claude Connectors, and Gemini. Because this hub uses the official @modelcontextprotocol/sdk, you can deploy it as-is:
Push this repo to GitHub and connect it in Manufact Cloud (every push auto-deploys), or use the CLI:
npm install -g @mcp-use/cli mcp-use login mcp-use deploySet
AUTH_TOKEN(plus any optionalGITHUB_TOKEN/DATABASE_URL) in the Manufact environment settings.Set
PUBLIC_URLto the assigned Manufact URL.
Note: Manufact is usage-based hosting that you pay for — it does not offer template revenue sharing. Use it for reach (ChatGPT/Claude/Gemini distribution); use Railway's 25% Template Kickback for earnings.
Connect a client
Any MCP client that speaks Streamable HTTP works. Point it at a server endpoint and pass your token:
{
"mcpServers": {
"hub-fetch": {
"url": "https://YOUR-APP.up.railway.app/mcp/fetch",
"headers": { "Authorization": "Bearer YOUR_AUTH_TOKEN" }
},
"hub-memory": {
"url": "https://YOUR-APP.up.railway.app/mcp/memory",
"headers": { "Authorization": "Bearer YOUR_AUTH_TOKEN" }
}
}
}Quick smoke test with curl:
curl -X POST https://YOUR-APP.up.railway.app/mcp/utils \
-H "Authorization: Bearer YOUR_AUTH_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'Configuration
Variable | Required | Default | Description |
| Yes | — | Bearer token for |
| No |
| Comma-separated server ids ( |
| No | — | GitHub PAT; activates the |
| No | — | Postgres connection string; activates the |
| No | — | File path (on a volume) to persist the memory server, e.g. |
| No |
| Max bytes fetched per request by the fetch server. |
| No |
| Reject |
| No |
| Requests per minute per IP on |
| No |
| Max JSON request body size in bytes. |
| No |
| Explicit opt-in to run without authentication (the hub refuses to start otherwise when |
| No | — | Canonical |
| No |
| Log one structured JSON line per MCP request (ip, server, method, tool, status). |
| No | — | Comma-separated hostname allowlist for the fetch server. |
| No |
| Listen port (Railway injects this). |
Spec compliance & the 2026-07-28 revision
This hub is stateless by design, which is exactly the model the 2026-07-28 MCP revision standardizes:
No sessions — no
Mcp-Session-Id, no sticky routing; a fresh MCP server instance handles each request (sessionIdGenerator: undefined). Scale replicas freely.MCP-Protocol-Versionvalidation — unsupported versions get a clean400(per spec since 2025-03-26). Accepted:2024-11-05→2026-07-28.Mcp-Methodheader awareness (SEP-2243) — mismatches between the new routing header and the JSON-RPC body are logged, or rejected withSTRICT_HEADER_VALIDATION=true.Authorization done right —
Authorization: Bearerverified with a timing-safe compare; failures return401with aWWW-Authenticatechallenge pointing at RFC 9728 resource metadata.No deprecated surfaces — no HTTP+SSE legacy transport, no Roots/Sampling/Logging reliance (deprecated in the new revision).
When the v2 SDK (@modelcontextprotocol/server 2.x) goes stable alongside the final spec, migration is isolated to src/index.ts (transport) and the per-server factories — the stateless architecture carries over unchanged.
Local development
cp .env.example .env # set AUTH_TOKEN
npm install
npm run dev # hot-reload dev server
npm run build && npm startReleasing
Publishing to npm is fully automated via GitHub Actions OIDC trusted publishing — no tokens, secrets, 2FA prompts or passkeys required. The workflow authenticates to npm using GitHub's OIDC identity and attaches build provenance.
To cut a release:
npm version patch # or: minor / major — bumps package.json + creates a git tag
git push --follow-tagsThen, on GitHub, Releases → Draft a new release, pick the tag you just pushed, and Publish release. That fires the Publish to npm workflow, which builds and publishes the new version automatically. (You can also trigger it manually from the Actions tab via Run workflow.)
One-time setup: the package must have this repo registered as a Trusted Publisher on npm (package Settings → Trusted Publisher → GitHub Actions, workflow file
publish.yml).
Architecture
src/
index.ts Express gateway: auth, protocol validation, stateless MCP handling
config.ts Env configuration + supported protocol versions
registry.ts Server catalog (id → factory); fresh McpServer per request
admin.ts Self-contained dashboard (no build step)
servers/
utils.ts Time/UUID/hash/base64/calculator (safe expression parser)
fetch.ts Bounded web fetch with SSRF guards + HTML cleanup
memory.ts Shared notes store, optional volume persistence
github.ts Read-only GitHub REST tools
postgres.ts READ ONLY transaction SQL toolsSecurity posture:
Authentication — mandatory Bearer token (fail-closed: the hub refuses to start without
AUTH_TOKENunlessALLOW_NO_AUTH=true), timing-safe comparison, brute-force lockout (10 failed attempts/min per IP → 429).Rate limiting — per-IP limits on
/mcp/*and/api/*(RATE_LIMIT_RPM), standardRateLimitheaders.SSRF defense — the fetch server resolves every hostname via DNS and blocks all private/reserved ranges (IPv4 + IPv6, incl. cloud metadata
169.254.169.254); redirects are followed manually with every hop re-validated; embedded credentials rejected; optionalFETCH_ALLOW_HOSTSallowlist.SQL isolation — Postgres queries run single-statement over the extended query protocol inside
READ ONLYtransactions with statement + idle timeouts; multi-statement strings (e.g.COMMIT; DROP …) are rejected by the database itself.No code execution — hand-written arithmetic parser, no
eval/codegen anywhere.Hardened HTTP surface — helmet security headers, strict CSP with per-request nonces on the dashboard,
X-Frame-Options: DENY,Cache-Control: no-storeon token-bearing routes, sanitized JSON-RPC error responses (no stack traces or paths), body-size limits, slowloris timeouts.Input validation — zod schemas with length caps on every tool input; server ids, GitHub owner/repo names and file paths validated against strict patterns; memory store capped (1000 entries / 10 MB) with atomic persistence.
Least privilege — runs as non-root
nodeuser in Docker; secrets only via environment variables; API error messages scrubbed of tokens.Auditability — optional structured request log (
AUDIT_LOG=true).
See SECURITY.md for the vulnerability reporting policy.
Adding your own server
Create
src/servers/myserver.tsexportingcreateMyServer(config): McpServerand register tools withserver.registerTool(...).Add an entry to
src/registry.tswith an id, description, tool list and factory.Redeploy — it appears in the dashboard and at
/mcp/myserver.
License
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityCmaintenanceA modular server that implements the Model Context Protocol standard, providing tools for interacting with GitHub, GitLab, Google Maps, Memory storage, and web automation through a unified gateway.Last updated3123Apache 2.0
- Alicense-qualityDmaintenanceA production-ready unified entry point for AI agents that implements the Model Context Protocol (MCP). It provides a secure gateway with rate limiting, authentication, and observability for managing and proxying requests to multiple downstream APIs.Last updatedMIT
- AlicenseAqualityFmaintenanceA Model Context Protocol (MCP) server for authenticated REST APIs. Drop it into any project, point it at your API, and let AI agents call endpoints — with auto-login, 2FA support, Swagger spec fetch, and fuzzy endpoint search — all without writing a single line of auth code.Last updated3336MIT
- Alicense-qualityAmaintenanceA production-packaged Model Context Protocol server for coding agents that routes large file, git, web, database, and other tasks through token-budgeted tools and workflows.Last updated21MIT
Related MCP Connectors
One PAT, any MCP agent: Vercel, GitHub, Cloudflare, Supabase, GCP — unified dev infra gateway.
User-owned memory for AI agents, Copilot, Claude, IDEs, CLIs, and chat apps over remote MCP.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/KbnCodes/mcp-server-hub'
If you have feedback or need assistance with the MCP directory API, please join our Discord server