MCPController
MCPController
MCPController ist eine MCP-Anwendung zur Verwaltung von Ärzten mit einem einzigen Administrator. ChatGPT verbindet sich über OAuth 2.1 mit PKCE, der Administrator meldet sich an, wählt aus, welche Arztberechtigungen er erteilen möchte, und der MCP-Server stellt Arzt-Tools bereit, die von MongoDB unterstützt werden.
Architektur
ChatGPT
↓
OAuth
↓
Admin Login
↓
Admin Consent
↓
Granted Permissions
↓
MCP Access Token
↓
MCP /mcp
↓
Permission Check
↓
Doctor Tools
↓
MongoDBRelated MCP server: GPT MCP Service
Was diese App tut
Ein Administrator besitzt das gesamte System.
Es gibt keine öffentliche Registrierung und keinen Multi-User-Kontowechsel.
Der Administrator authentifiziert sich mit Anmeldedaten aus Umgebungsvariablen.
Der Zustimmungsbildschirm ermöglicht es dem Administrator,
doctor:read,doctor:writeunddoctor:deletezu genehmigen.Der MCP-Server prüft die genehmigten Bereiche bei jedem Tool-Aufruf erneut.
Arztdaten werden über ein einfaches Mongoose-Modell in MongoDB gespeichert.
Authentifizierung
Die Browser-Sitzung ist vom MCP-Bearer-Token getrennt.
Browser-Sitzung: HTTP-only-Cookie für die Admin-Oberfläche und den Zustimmungsbildschirm.
MCP-Zugriffstoken: Bearer-Token, das von ChatGPT gegen
/mcpverwendet wird.OAuth verwendet den Autorisierungscode-Flow mit PKCE.
Autorisierungscodes sind einmalig verwendbar und kurzlebig.
Zugriffstokens und Refresh-Tokens werden vor der Speicherung gehasht.
Der Admin-Login verwendet ADMIN_EMAIL und ADMIN_PASSWORD aus .env.
Arztverwaltung
Das Domänenmodell ist bewusst klein gehalten:
name- erforderliche Zeichenkettespecialization- erforderliche ZeichenkettecreatedAt/updatedAt- von Mongoose-Zeitstempeln verwaltet
Die Arzt-CRUD-Operationen sind in einer Service-Schicht implementiert und werden sowohl von der REST-Admin-API als auch von der MCP-Tool-Schicht verwendet.
OAuth-Ablauf
ChatGPT öffnet den Autorisierungs-Endpunkt.
Wenn der Administrator nicht authentifiziert ist, geht der Browser zu
/login.Der Administrator meldet sich an.
Die Zustimmungsseite zeigt die angeforderten Arztberechtigungen.
Der Administrator genehmigt eine Teilmenge oder lehnt die Anfrage ab.
Der Autorisierungscode wird gegen ein Zugriffstoken eingetauscht.
ChatGPT verwendet dieses Token auf
/mcp.
Berechtigungsablauf
Angeforderte Bereiche werden wie folgt auf MCP-Tools abgebildet:
doctor:read→list_doctors,get_doctordoctor:write→add_doctor,update_doctordoctor:delete→delete_doctor
Das Backend erzwingt Berechtigungen zweimal:
OAuth schreibt nur genehmigte Bereiche in den Autorisierungscode und das Token.
Jedes MCP-Tool prüft die Token-Bereiche, bevor es MongoDB berührt.
MCP-Tools
Tool | Bereich | Verhalten |
|
| Gibt alle Ärzte zurück |
|
| Gibt einen Arzt anhand der |
|
| Erstellt einen Arzt mit |
|
| Aktualisiert einen Arzt anhand der |
|
| Löscht einen Arzt anhand der |
Umgebungsvariablen
Verwenden Sie eine .env-Datei im Projektstamm. Die Anwendung lädt sie aus dem Projektstamm.
Erforderliche Werte für lokales npm run dev (Vite auf 5173, API auf 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.0Der Code unterstützt auch Variablen für Token-/Sitzungslebensdauer mit sicheren Standardwerten:
JWT_EXPIRES_INAUTH_CODE_TTL_SECONDSACCESS_TOKEN_TTL_SECONDSREFRESH_TOKEN_TTL_SECONDS
Auf Vercel müssen APP_URL und API_URL beide die öffentliche HTTPS-Origin sein (siehe Bereitstellung unten).
Lokale Einrichtung
Abhängigkeiten installieren:
npm installMongoDB lokal starten.
Beispieldaten einfügen:
npm run seedDie App starten:
npm run devIn der Entwicklung läuft der React-Client über Vite und leitet API-Anfragen an das Backend weiter.
Testen
Führen Sie die automatisierten Prüfungen aus mit:
npm testFühren Sie den Client-Build aus mit:
npm run buildDie aktuelle Testsuite umfasst:
Admin-Login
Registrierung deaktiviert
Arztmodell und CRUD-Service
OAuth-Bereichsgenehmigung
MCP-Tool-Berechtigungsdurchsetzung
Token-Widerruf
ChatGPT verbinden
Verwenden Sie die vom Server bereitgestellte Autorisierungs-URL:
/.well-known/oauth-authorization-server/.well-known/oauth-protected-resource/oauth/token/mcp
Typischer Ablauf:
ChatGPT entdeckt die OAuth-Metadaten.
ChatGPT fordert die Autorisierung für die MCP-Ressource an.
Der Browser leitet zum Admin-Login-Bildschirm weiter.
Der Administrator überprüft die Berechtigungen und klickt auf
Allow & Connect.ChatGPT tauscht den Code gegen Tokens ein.
ChatGPT ruft die MCP-Tools mit dem Bearer-Token auf.
Bereitstellung
Die App ist eine einzige Origin: Express bedient /api, /oauth, /mcp, OAuth-Discovery und den React-Build.
Vercel
Dieses Repository enthält bereits vercel.json und api/index.js. Vercel führt die Express-App als eine serverlose Funktion aus und schreibt jeden Pfad darauf um.
1. MongoDB Atlas
Erstellen Sie einen Cluster (kostenloses M0 ist ausreichend).
Erstellen Sie einen Datenbankbenutzer.
Netzwerkzugriff: Erlauben Sie
0.0.0.0/0, damit Vercel eine Verbindung herstellen kann (oder fügen Sie bei Bedarf Vercel-IPs hinzu).Kopieren Sie die Verbindungszeichenfolge, zum Beispiel:
mongodb+srv://USER:PASSWORD@cluster0.xxxxx.mongodb.net/mcpcontroller?retryWrites=true&w=majority2. Projekt bereitstellen
Pushen Sie dieses Repository nach GitHub.
Importieren Sie das Repository in Vercel.
Framework-Preset: Other (lassen Sie es).
vercel.jsonlegt Installation und Build fest.Root-Verzeichnis: Lassen Sie es als Repository-Stamm (setzen Sie es nicht auf
clientoderserver).Node.js-Version: 20.x oder neuer.
3. Umgebungsvariablen in Vercel
Projekt → Einstellungen → Umgebungsvariablen. Setzen Sie sie für Production (und Preview, wenn Sie Preview-URLs verwenden).
Name | Beispiel | Hinweise |
|
| Vercel setzt dies normalerweise automatisch. |
|
| Kein abschließender Schrägstrich. Muss mit der Live-Origin übereinstimmen. |
|
| Gleicher Wert wie |
|
| Atlas-URI. |
| Ihre Admin-E-Mail | Wird für die Anmeldung an der Zustimmungs-UI verwendet. |
| ein starkes Passwort | Wird beim Login verglichen; wird nie an den Browser gesendet. |
| lange zufällige Zeichenkette | Signierung des Sitzungs-Cookies. Verwenden Sie nicht die Beispielwerte. |
|
| Optional. |
|
| Optional. |
|
| Optional. |
|
| Optional. |
|
| Optional. |
|
| Optional. |
Setzen Sie ADMIN_PASSWORD oder JWT_SECRET nicht in die React-App. Der Client kommuniziert nur mit /api.
Wenn Sie später eine benutzerdefinierte Domain hinzufügen, ändern Sie APP_URL und API_URL auf https://your-domain.com und stellen Sie erneut bereit.
Generieren Sie JWT_SECRET mit:
node -e "console.log(require('crypto').randomBytes(48).toString('hex'))"4. Erste Bereitstellung und Seed
Bereitstellen.
Öffnen Sie
https://your-app.vercel.app/api/health– Sie sollten{ "ok": true, ... }sehen.Seeden Sie MongoDB von Ihrem Rechner aus, gerichtet auf Atlas (nicht auf Vercels serverlose Funktion):
# In the project root, temporarily set MONGODB_URI to the Atlas URI in .env
npm run seedDer Seed erstellt die Admin-Benutzerzeile, Beispieldaten für Ärzte und einen lokalen MCP-Inspector-Client. Melden Sie sich danach auf der Live-Site mit ADMIN_EMAIL / ADMIN_PASSWORD an.
5. ChatGPT verbinden
Verwenden Sie die bereitgestellte Origin:
https://your-app.vercel.app/.well-known/oauth-authorization-serverhttps://your-app.vercel.app/.well-known/oauth-protected-resourcehttps://your-app.vercel.app/mcp
Fügen Sie in ChatGPT (oder MCP Inspector) diese MCP-URL hinzu. ChatGPT öffnet die Login- und Zustimmungsbildschirme auf derselben Domain und ruft dann /mcp mit einem Bearer-Token auf.
CLI-Bereitstellung (optional)
npm i -g vercel
vercel login
vercel env pull # optional: sync env locally
vercel --prodNach der ersten Produktionsbereitstellung kopieren Sie die URL in APP_URL und API_URL, falls Sie einen Platzhalter verwendet haben, und stellen Sie erneut bereit, damit die OAuth-Metadaten auf die echte Origin zeigen.
Sicherheitshinweise
Setzen Sie
ADMIN_PASSWORDoderJWT_SECRETnicht dem Browser aus.Bewahren Sie OAuth-Tokens gehasht in der Datenbank auf.
Genehmigen Sie nur die Bereiche, die der Administrator tatsächlich von ChatGPT verwenden lassen möchte.
Widerrufen Sie den Zugriff, wenn die Verbindung nicht mehr vertrauenswürdig sein soll.
Der Admin-Login dient nur dazu, ChatGPT zu autorisieren und Arztdaten zu verwalten; es gibt keinen öffentlichen Anmeldeablauf.
Seed-Daten
Das Seed-Skript erstellt:
Beispieldaten für Ärzte
einen Beispiel-OAuth-Client für die lokale Inspector-Nutzung
Es erstellt keine Demo-Benutzer und codiert keine Admin-Anmeldedaten fest.
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