Skip to main content
Glama

MCP Hub

Connect your tools once. Use them everywhere.

One self-hosted server that exposes Google Drive, your local files, the web and more to Claude, ChatGPT, Cursor, Claude Code and any other Model Context Protocol client.

CI License: MIT Node

SaaS quick start · Self-hosted mode · SaaS guide · Connectors


SaaS quick start

MCP Hub now has a customer-facing SaaS mode. People can create accounts, track public web pages and selected Google Drive files, see change history, and issue separate MCP keys to their AI clients. The hosted edition has Free and Pro usage limits; Stripe Checkout and the billing portal activate when you supply your Stripe account keys and recurring Price ID. The self-hosted edition remains available under the MIT license.

Use Node.js 24 or newer:

git clone https://github.com/mherub004/mcp-hub.git
cd mcp-hub
npm.cmd ci
Copy-Item .env.saas.example .env.saas
npm.cmd run build
npm.cmd run saas

Open http://127.0.0.1:8080. SaaS mode keeps its SQLite database under ./data/. Google Drive, billing, and email recovery need the credentials described in the SaaS setup guide. Until email delivery is configured, use an invite code for non-local testing. For local Docker, run docker compose -f docker-compose.saas.yml up -d --build.

What the hosted product includes

Capability

Free

Pro

Tracked sources

3

20

Automated check interval

24 hours

6 hours

Checks per month

100

2,500

MCP requests per month

300

10,000

Pro pricing is defined by the recurring Price you create in Stripe; it is shown to customers in Stripe Checkout. No price is hard-coded in this repository.

Related MCP server: Claude MCP x Google Docs

Self-hosted mode

The original single-user MCP Hub remains available. It uses hub.config.json, a bearer token, and the filesystem, Google Drive, and web connectors. This mode is useful for personal setups and local development. SaaS mode is a separate entry point and does not read hub.config.json.

Why

Every AI assistant needs the same context: your documents, notes and web pages. Configuring each client separately means duplicated credentials, scattered settings and no single place to see what is connected.

MCP Hub runs once, holds the connections, and gives every client one endpoint.

 Claude ─┐                          ┌─ Google Drive
 ChatGPT ─┼──► MCP Hub (/mcp) ──────┼─ Local files
 Cursor ─┘     one token, one URL   ├─ Web pages
                                    └─ Your connector

Features

  • One endpoint. A single MCP server at /mcp exposes every connector's tools.

  • Simple configuration. One JSON file. Secrets come from environment variables.

  • Live dashboard. See connector health, exposed tools and the endpoint URL at /.

  • Two transports. Streamable HTTP for remote clients, stdio for local desktop apps.

  • Secure by default. Binds to localhost, requires a bearer token for anything non-local, and blocks path traversal and private-network fetches.

  • Built-in connectors: Local files, Google Drive, Web.

  • Easy to extend. A connector is one TypeScript file with a few methods. See docs/connectors.md.

  • Ready to deploy. Dockerfile, Docker Compose, health endpoint and CI included.

Quick start

Requirements: Node.js 24 or newer.

git clone https://github.com/mherub004/mcp-hub.git
cd mcp-hub
npm install

cp hub.config.example.json hub.config.json
cp .env.example .env
echo "MCP_HUB_TOKEN=$(openssl rand -hex 32)" >> .env   # or edit .env by hand

npm run dev

Open http://127.0.0.1:3000 to see the dashboard. Your MCP endpoint is http://127.0.0.1:3000/mcp.

Connect a client. For Claude Desktop, Claude Code, Cursor and others, see docs/connecting-clients.md.

Full walkthrough: docs/getting-started.md.

Built-in connectors

Type

Tools

Needs

filesystem

list_files, read_file, search_files

A folder on disk

google-drive

search_files, read_file

Google OAuth access token

web

fetch_url

Nothing

Tool names are prefixed with the connector id, for example notes__search_files or drive__read_file, so several connectors of the same type can coexist.

Documentation

Guide

What it covers

Getting started

Install, configure and run your first hub

Configuration

Every config field and environment variable

Connecting clients

Claude, Claude Code, Cursor, ChatGPT and more

Connectors

Built-in connectors and how to write your own

HTTP API

Endpoints, auth and status response format

Architecture

How the pieces fit together

Deployment

Docker, remote hosting, HTTPS

Security

Threat model and hardening checklist

Troubleshooting

Common problems and fixes

Roadmap

What is planned next

Project layout

mcp-hub/
├── src/
│   ├── index.ts            CLI entry point (HTTP or --stdio)
│   ├── config.ts           Config loading, validation, ${ENV} expansion
│   ├── hub.ts              Connector registry, health checks, MCP server builder
│   ├── server.ts           HTTP routes: /, /mcp, /api/status, /health
│   ├── connector.ts        Connector interface (the extension point)
│   └── connectors/         Built-in connectors
├── public/index.html       Dashboard
├── tests/                  Unit tests (node:test)
├── docs/                   Documentation
└── hub.config.example.json Starter configuration

Development

npm run dev         # run with reload
npm run typecheck   # strict TypeScript check
npm test            # unit tests
npm run build       # compile to dist/

Contributing

Contributions are welcome, especially new connectors. Read CONTRIBUTING.md first. Please report vulnerabilities privately as described in SECURITY.md.

License

MIT

Related MCP Connectors

Related MCP Servers