Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Multi-tenant MCP platform with OAuth 2.1, Entra SSO, RBAC and audit logging.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
ウェブ、デスクトップ、モバイルのClaudeで使えます:
https://your-gateway.example.com/t/your-org/mcp/sseターミナルでこれを実行します
claude mcp add --transport sse gateway https://your-gateway.example.com/t/your-org/mcp/sseプロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"gateway": {
"url": "https://your-gateway.example.com/t/your-org/mcp/sse"
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"gateway": {
"type": "sse",
"url": "https://your-gateway.example.com/t/your-org/mcp/sse"
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
ChatGPTがつなげるのは、インターネット上のサーバーだけです:
https://your-gateway.example.com/t/your-org/mcp/sseメニューの名前は、プランや時期によって少し違うことがあります。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
このサーバーのツール一覧はまだ読み取っていません。エンドポイントは順番にチェックしています。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント PanosSalt で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
まだチェックしていません。エンドポイントは順番にチェックしています
まだチェックしていません。エンドポイントは順番にチェックしています
まだチェックしていません。エンドポイントをチェックするときにツール一覧を読み取ります
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
作者のクラウドで動きます。インストール不要でインターネット経由でつながりますが、送った内容は作者のサーバーを通ります。
GitHubリポジトリの最終更新は–、最新バージョン(1.0.4)がレジストリに届いたのは41 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。URLでつながるので、リモートMCPサーバーに対応したアプリ(開発者モードのChatGPTなど)でも使えます。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, MemberVault MCP by usefulapi
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
List courses; add users to courses, remove course access or delete users in MemberVault.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
The production platform for MCP tools.
Claude Desktop can connect to your internal tools — databases, filesystems, APIs, anything — through a single authenticated endpoint. You control who can use which tools, every action is logged, and no raw credentials ever leave your server.
Built-in tools: SQL query (Postgres, MySQL, SQLite, MSSQL), filesystem access. Custom tools: plug in anything that implements the MCP tool interface.
[See it in action](docs/media/local_demo.mp4) — short demo of Claude Desktop querying a database through MCP Gateway.
MCP Gateway sits between AI assistants and your databases. It:
Claude Desktop / mcp-remote
│ │ MCP over SSE (OAuth 2.1 + PKCE) ▼ ┌─────────────────────────────────────────────────────────┐ │ MCP Gateway │ │ │ │ ┌──────────┐ ┌──────────┐ ┌───────────────────────┐ │ │ │ Auth / │ │ Admin │ │ MCP SSE Endpoint │ │ │ │ OAuth │ │ UI │ │ /t/{slug}/mcp/sse │ │ │ └──────────┘ └──────────┘ └───────────────────────┘ │ │ │ │ │ ┌──────────────────────────────────────┐│ │ │ │ Tool Providers ││ │ │ │ sql.py → get_schema / execute_sql ││ │ │ └──────────────────────────────────────┘│ │ └─────────────────────────────────────────┼───────────────┘ │ Decrypted DSN ┌─────────────────────┼────────────────┐ │ Your Databases │ │ │ Postgres MySQL MSSQL SQLite │ └──────────────────────────────────── ┘
For your organisation
For your tools
For your security team
| Database | Driver | DSN Format |
|---|---|---|
| PostgreSQL | psycopg2 | postgresql://user:pass@host/db |
| MySQL / MariaDB | PyMySQL | mysql+pymysql://user:pass@host/db |
| Microsoft SQL Server | pymssql | mssql+pymssql://user:pass@host/db |
| SQLite | Built-in | sqlite:///path/to/file.db |
FILESYSTEM_ALLOWED_DIRS environment variablefs_read_file, fs_list_directory, fs_directory_tree, fs_search_files, fs_get_file_infofs_write_file, fs_create_directory, fs_move_file/admin/| Layer | Technology | Version |
|---|---|---|
| API Framework | FastAPI + Starlette | 0.136.1 / 1.3.1 |
| ASGI Server | Uvicorn | 0.34.0 |
| Validation | Pydantic + pydantic-settings | 2.12.5 / 2.7.1 |
| ORM | SQLAlchemy | 2.0.30 |
| Migrations | Alembic | 1.13.1 |
| Auth / JWT | PyJWT + bcrypt | 2.14.0 / 4.0.1 |
| Encryption | cryptography (Fernet) | 50.0.0 |
| LLM | Anthropic SDK | 0.42.0 |
| MCP Protocol | mcp | 1.28.1 |
| SQL Validation | sqlglot | 25.1.0 |
| Rate Limiting | slowapi | 0.1.9 |
| HTTP Client | httpx | 0.28.1 |
| DB Drivers | psycopg2-binary / PyMySQL / pymssql | 2.9.10 / 1.1.1 / 2.3.1 |
| Frontend | React 18 + TypeScript + Vite | — |
Dev tooling (requirements-dev.txt): pytest, pytest-asyncio, ruff, mypy. The pinned versions above are generated from requirements.txt — update both together.
app/
├── main.py # FastAPI app setup, middleware, routing ├── config.py # Environment config (Pydantic Settings) ├── database.py # SQLAlchemy engine + session factory ├── api/ │ ├── auth.py # POST /auth/login │ ├── auth_entra.py # Entra SSO (legacy admin UI paths) │ ├── oauth.py # OAuth 2.1 endpoints (/t/{slug}/oauth/*) │ ├── connections.py # DB connection CRUD │ ├── query.py # Natural language query endpoint │ ├── tenants.py # Tenant + user management │ ├── tools.py # Tool listing + role overrides │ ├── mcp_sse.py # MCP SSE transport │ ├── api_keys.py # API key management │ └── audit_logs.py # GET /audit-logs/ (admin) ├── core/ │ ├── auth.py # JWT creation/validation, password hashing │ ├── dependencies.py # FastAPI dependency injection │ ├── rbac.py # Role hierarchy helpers │ ├── security.py # Fernet encrypt/decrypt │ ├── api_keys.py # API key generation + hashing │ ├── limiter.py # slowapi rate limiter setup │ └── log_filter.py # Health-check log noise filter ├── constants.py # Non-tunable application-wide constants (pagination caps, etc.) ├── models/init.py # All SQLAlchemy ORM models ├── schemas/init.py # All Pydantic request/response schemas ├── services/ │ ├── entra.py # Microsoft Graph API client │ ├── llm.py # Anthropic API (SQL gen + summarization) │ ├── mcp_client.py # Direct SQLAlchemy schema introspection + query execution │ └── audit.py # Audit log writer └── tools/ ├── init.py # Tool provider framework + registry ├── sql.py # DB schema + execute_sql tools ├── example.py # Example custom tools └── filesystem.py # Sandboxed file read/write/search tools
app/static/ # Built admin UI, served at /admin/ (generated by the
frontend/src/ ├── main.tsx # Vite entry point ├── App.tsx # Root component, auth context, tab routing ├── api.ts # API client, token management ├── types.ts # TypeScript types (mirrors Pydantic schemas) ├── constants.ts # Frontend constants (timeouts, retry config) ├── app.css # Global styles ├── hooks/ │ └── useForm.ts # Shared form state helper └── components/ ├── Login.tsx # Sign-in form ├── Setup.tsx # Tenant registration ├── Dashboard.tsx # Tenant info + role display ├── Connections.tsx # DB connection management ├── ConnectionCreateForm.tsx # Add-connection form ├── ConnectionEditRow.tsx # Inline connection editor ├── Query.tsx # Natural language query UI ├── Users.tsx # User management (admin) ├── SsoConfig.tsx # Entra ID configuration (admin) ├── Tools.tsx # Tool browser + role overrides ├── ToolGroup.tsx # Grouped tool listing ├── ToolRoleOverride.tsx # Per-tool role control ├── ApiKeys.tsx # API key management ├── AuditLog.tsx # Filterable audit log viewer (admin) ├── AuditLogFilters.tsx # Audit log filter controls ├── AuditLogDetail.tsx # Single audit entry detail ├── ConfirmModal.tsx # Reusable confirmation dialog └── ErrorBoundary.tsx # Top-level error boundary
alembic/versions/ # Database migrations docs/ # Guides (OAuth flow, deployment, audit logging, …) tests/ # pytest suite (SQLite in-memory, no services needed)
Tenants ─┬─► Users ──────► APIKeys
├─► APIKeys (also a direct tenant_id FK, not only via Users) ├─► DBConnections ├─► TenantEntraConfig ├─► AuditLogs (tenant_id and user_id both nullable) ├─► OAuthAuthorizationCodes ├─► OAuthRefreshTokens └─► ToolRoleOverrides
OAuthStates (no tenant_id FK — holds a plain tenant_slug string, since the row is created before the tenant is resolved)
/query/ endpoint; not needed for raw MCP tool access)git clone <repo-url>
cd MCP-Gateway cp .env.example .env
Edit .env:
# Required — generate unique values
SECRET_KEY= ENCRYPTION_KEY= POSTGRES_PASSWORD=
ANTHROPIC_API_KEY=sk-ant-...
BASE_URL=http://localhost:8000
Generate secure random values:
# SECRET_KEY
python3 -c "import secrets; print(secrets.token_hex(32))"
python3 -c "import secrets; print(secrets.token_hex(32))"
docker compose up -d
Services started:
api on port 8000 (FastAPI + admin UI)db on port 5432 (PostgreSQL, internal only)curl -s -X POST http://localhost:8000/tenants/ \
-H "Content-Type: application/json" \ -d '{ "name": "My Organization", "slug": "my-org", "admin_email": "admin@example.com", "admin_password": "SuperSecret123!" }' | jq
The slug becomes part of your MCP URL: http://localhost:8000/t/my-org/mcp/sse
Navigate to http://localhost:8000/admin/ and sign in with your admin credentials.
In the admin UI → Connections → Create connection, or via API:
TOKEN=$(curl -s -X POST http://localhost:8000/auth/login \
-H "Content-Type: application/json" \ -d '{"email":"admin@example.com","password":"SuperSecret123!"}' \ | jq -r .access_token)
curl -s -X POST http://localhost:8000/connections/ \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "Production DB", "db_type": "postgres", "connection_string": "postgresql://user:pass@host/mydb", "min_role": "viewer" }' | jq
Add to your Claude Desktop MCP config (`~/Li
冒頭だけを表示しています。続きはリポジトリで読めます