MCPController
MCPController
MCPControllerは、単一管理者による医師管理用MCPアプリケーションです。ChatGPTはOAuth 2.1(PKCE付き)で接続し、管理者がログインして付与する医師権限を選択すると、MCPサーバーがMongoDBをバックエンドとする医師ツールを公開します。
アーキテクチャ
ChatGPT
↓
OAuth
↓
Admin Login
↓
Admin Consent
↓
Granted Permissions
↓
MCP Access Token
↓
MCP /mcp
↓
Permission Check
↓
Doctor Tools
↓
MongoDBRelated MCP server: GPT MCP Service
このアプリの機能
システム全体を所有する管理者は1人だけです。
公開登録やマルチユーザーアカウントの切り替えはありません。
管理者は環境変数の認証情報で認証します。
同意画面で管理者は
doctor:read、doctor:write、doctor:deleteを承認できます。MCPサーバーはツール呼び出しのたびに承認済みスコープを再確認します。
医師データはシンプルなMongooseモデルを通じてMongoDBに保存されます。
認証
ブラウザセッションはMCPベアラートークンとは別です。
ブラウザセッション: 管理者UIと同意画面で使用するHTTP-onlyクッキー。
MCPアクセストークン: ChatGPTが
/mcpに対して使用するベアラートークン。OAuthはPKCE付きの認可コードフローを使用します。
認可コードは一度きりで短時間しか有効ではありません。
アクセストークンとリフレッシュトークンは保存前にハッシュ化されます。
管理者ログインは.envのADMIN_EMAILとADMIN_PASSWORDを使用します。
医師管理
ドメインモデルは意図的に小さく保っています:
name- 必須文字列specialization- 必須文字列createdAt/updatedAt- Mongooseのタイムスタンプで管理
医師のCRUDはサービス層に実装され、REST管理者APIとMCPツール層の両方で再利用されます。
OAuthフロー
ChatGPTが認可エンドポイントを開きます。
管理者が認証されていない場合、ブラウザは
/loginに移動します。管理者がログインします。
同意ページに要求された医師権限が表示されます。
管理者はサブセットを承認するか、リクエストを拒否します。
認可コードがアクセストークンと交換されます。
ChatGPTはそのトークンを
/mcpで使用します。
権限フロー
要求されたスコープは次のようにMCPツールにマッピングされます:
doctor:read→list_doctors、get_doctordoctor:write→add_doctor、update_doctordoctor:delete→delete_doctor
バックエンドは権限を2回強制します:
OAuthは承認済みスコープのみを認可コードとトークンに書き込みます。
各MCPツールはMongoDBにアクセスする前にトークンのスコープを確認します。
MCPツール
ツール | スコープ | 動作 |
|
| すべての医師を返します |
|
|
|
|
|
|
|
|
|
|
|
|
環境変数
ルートの.envファイルを使用します。アプリケーションはプロジェクトルートからそれを読み込みます。
ローカルのnpm run dev(Viteは5173、APIは3000)に必要な値:
NODE_ENV=development
PORT=3000
APP_URL=http://localhost:5173
API_URL=http://localhost:3000
MONGODB_URI=mongodb://127.0.0.1:27017/mcpcontroller
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=change-this-password
JWT_SECRET=change-this-to-a-long-random-secret
MCP_SERVER_NAME=MCPController
MCP_SERVER_VERSION=1.0.0コードはトークン/セッションの有効期間変数も安全なデフォルト値付きでサポートしています:
JWT_EXPIRES_INAUTH_CODE_TTL_SECONDSACCESS_TOKEN_TTL_SECONDSREFRESH_TOKEN_TTL_SECONDS
Vercelでは、APP_URLとAPI_URLの両方が公開HTTPSオリジンである必要があります(下記のデプロイを参照)。
ローカルセットアップ
依存関係をインストール:
npm installMongoDBをローカルで起動します。
サンプルデータを投入:
npm run seedアプリを起動:
npm run dev開発環境では、ReactクライアントはVite経由で実行され、APIリクエストをバックエンドにプロキシします。
テスト
自動チェックを実行:
npm testクライアントビルドを実行:
npm run build現在のテストスイートは以下をカバーしています:
管理者ログイン
登録の無効化
医師モデルとCRUDサービス
OAuthスコープ承認
MCPツールの権限強制
トークン失効
ChatGPTの接続
サーバーが公開する認可URLを使用します:
/.well-known/oauth-authorization-server/.well-known/oauth-protected-resource/oauth/token/mcp
一般的なフロー:
ChatGPTがOAuthメタデータを検出します。
ChatGPTがMCPリソースの認可を要求します。
ブラウザが管理者ログイン画面にリダイレクトします。
管理者が権限を確認し、
Allow & Connectをクリックします。ChatGPTがコードをトークンと交換します。
ChatGPTがベアラートークンを使用してMCPツールを呼び出します。
デプロイ
このアプリは単一オリジンです: Expressが/api、/oauth、/mcp、OAuthディスカバリ、Reactビルドを提供します。
Vercel
このリポジトリにはvercel.jsonとapi/index.jsがすでに含まれています。VercelはExpressアプリを1つのサーバーレス関数として実行し、すべてのパスをそれに書き換えます。
1. MongoDB Atlas
クラスターを作成します(無料のM0で十分です)。
データベースユーザーを作成します。
ネットワークアクセス: Vercelが接続できるように
0.0.0.0/0を許可します(必要に応じてVercelのIPを追加しても構いません)。接続文字列をコピーします。例:
mongodb+srv://USER:PASSWORD@cluster0.xxxxx.mongodb.net/mcpcontroller?retryWrites=true&w=majority2. プロジェクトのデプロイ
このリポジトリをGitHubにプッシュします。
Vercelでリポジトリをインポートします。
Framework Preset: Other(そのままにします)。
vercel.jsonがインストールとビルドを設定します。Root Directory: リポジトリのルートのままにします(
clientやserverには設定しないでください)。Node.jsバージョン: 20.x以降。
3. Vercelでの環境変数
Project → Settings → Environment Variables。Production(プレビューURLを使用する場合はPreviewも)に設定します。
名前 | 例 | 備考 |
|
| Vercelが通常自動で設定します。 |
|
| 末尾スラッシュなし。ライブオリジンと一致する必要があります。 |
|
| Vercelでは |
|
| Atlas URI。 |
| your admin email | 同意UIへのログインに使用されます。 |
| a strong password | ログイン時に比較されます。ブラウザには送信されません。 |
| long random string | セッションクッキーの署名。例の値は使用しないでください。 |
|
| 任意。 |
|
| 任意。 |
|
| 任意。 |
|
| 任意。 |
|
| 任意。 |
|
| 任意。 |
ADMIN_PASSWORDやJWT_SECRETをReactアプリに入れないでください。クライアントは/apiとのみ通信します。
後でカスタムドメインを追加する場合は、APP_URLとAPI_URLをhttps://your-domain.comに変更して再デプロイします。
JWT_SECRETは次のように生成します:
node -e "console.log(require('crypto').randomBytes(48).toString('hex'))"4. 初回デプロイとシード
デプロイします。
https://your-app.vercel.app/api/healthを開きます —{ "ok": true, ... }が表示されるはずです。自分のマシンから、Atlasを指してMongoDBにシードします(Vercelのサーバーレス関数からではありません):
# In the project root, temporarily set MONGODB_URI to the Atlas URI in .env
npm run seedシードは管理者ユーザー行、サンプル医師、ローカルMCP Inspectorクライアントを作成します。その後、ライブサイトでADMIN_EMAIL / ADMIN_PASSWORDでログインします。
5. ChatGPTの接続
デプロイされたオリジンを使用します:
https://your-app.vercel.app/.well-known/oauth-authorization-serverhttps://your-app.vercel.app/.well-known/oauth-protected-resourcehttps://your-app.vercel.app/mcp
ChatGPT(またはMCP Inspector)で、そのMCP URLを追加します。ChatGPTは同じドメインでログイン+同意画面を開き、その後Bearerトークンで/mcpを呼び出します。
CLIデプロイ(任意)
npm i -g vercel
vercel login
vercel env pull # optional: sync env locally
vercel --prod最初の本番デプロイ後、プレースホルダーを使用した場合はURLをAPP_URLとAPI_URLにコピーし、OAuthメタデータが実際のオリジンを指すように再デプロイします。
セキュリティに関する注意事項
ADMIN_PASSWORDやJWT_SECRETをブラウザに公開しないでください。OAuthトークンはデータベースでハッシュ化して保持します。
管理者がChatGPTに実際に使用させたいスコープのみを承認します。
接続を信頼すべきでなくなった場合はアクセスを失効させます。
管理者ログインはChatGPTを認可し医師データを管理するためだけに存在します。公開サインアップフローはありません。
シードデータ
シードスクリプトは以下を作成します:
サンプル医師
ローカルインスペクター用のサンプルOAuthクライアント
デモユーザーを作成したり、管理者認証情報をハードコードしたりはしません。
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
- FlicenseNot gradedqualityDmaintenanceA complete ChatGPT App implementation using MCP with OAuth2 authentication via Privy.io, enabling secure user authentication and interactive widgets rendered in ChatGPT.165
- FlicenseNot gradedqualityBmaintenancePrivate OAuth-backed MCP server for ChatGPT, supporting GPT Apps via MCP Streamable HTTP and GPT Actions via REST endpoints with OpenAPI 3.1.
- AlicenseNot gradedqualityDmaintenanceEnables AI models to interactively explore, analyze, and manage Salesforce organizations through OAuth2 authentication and standardized tools.623MIT
- AlicenseNot gradedqualityBmaintenanceEnables MCP-compatible AI agents to read and write architecture-map projects and diagrams with per-project access controls via OAuth 2.1/PKCE.101ISC
Related MCP Connectors
Odoo ERP for AI agents: hosted OAuth endpoint, gated writes, one endpoint for every instance.
Self-hosted federated MCP gateway: one OAuth 2.1 MCP server in front of N apps, user-level scopes.
MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2
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/im-Saqib-Nawab/MCPController'
If you have feedback or need assistance with the MCP directory API, please join our Discord server