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
Что делает это приложение
Один администратор владеет всей системой.
Нет публичной регистрации и переключения между несколькими пользователями.
Администратор аутентифицируется с помощью учетных данных из переменных окружения.
Экран согласия позволяет администратору одобрить
doctor:read,doctor:writeиdoctor:delete.MCP-сервер проверяет одобренные области (scopes) при каждом вызове инструмента.
Данные о врачах хранятся в MongoDB через простую модель Mongoose.
Аутентификация
Сессия браузера отделена от MCP-токена.
Сессия браузера: HTTP-only cookie, используемая для интерфейса администратора и экрана согласия.
MCP-токен доступа: Bearer-токен, используемый ChatGPT для обращения к
/mcp.OAuth использует поток авторизационного кода с PKCE.
Авторизационные коды одноразовые и недолговечные.
Токены доступа и обновления хэшируются перед хранением.
Вход администратора использует ADMIN_EMAIL и ADMIN_PASSWORD из .env.
Управление врачами
Доменная модель намеренно небольшая:
name— обязательная строкаspecialization— обязательная строкаcreatedAt/updatedAt— управляются временными метками Mongoose
CRUD для врачей реализован в сервисном слое и используется как REST API администратора, так и слоем MCP-инструментов.
OAuth-поток
ChatGPT открывает конечную точку авторизации.
Если администратор не аутентифицирован, браузер переходит на
/login.Администратор входит в систему.
Страница согласия показывает запрошенные разрешения для врачей.
Администратор одобряет подмножество или отклоняет запрос.
Авторизационный код обменивается на токен доступа.
ChatGPT использует этот токен на
/mcp.
Поток разрешений
Запрошенные области (scopes) сопоставляются с MCP-инструментами следующим образом:
doctor:read→list_doctors,get_doctordoctor:write→add_doctor,update_doctordoctor:delete→delete_doctor
Бэкенд применяет разрешения дважды:
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 installЗапустите MongoDB локально.
Заполните примерными данными:
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-инструменты, используя Bearer-токен.
Развертывание
Приложение — единый источник: Express обслуживает /api, /oauth, /mcp, обнаружение OAuth и сборку React.
Vercel
В этом репозитории уже есть vercel.json и api/index.js. Vercel запускает Express-приложение как одну serverless-функцию и перенаправляет все пути на нее.
1. MongoDB Atlas
Создайте кластер (бесплатного M0 достаточно).
Создайте пользователя базы данных.
Сетевой доступ: разрешите
0.0.0.0/0, чтобы Vercel мог подключиться (или добавьте IP-адреса Vercel, если предпочитаете).Скопируйте строку подключения, например:
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 (и для Preview, если используете preview-URL).
Имя | Пример | Примечания |
|
| Vercel обычно устанавливает это автоматически. |
|
| Без завершающего слэша. Должен совпадать с живым источником. |
|
| То же значение, что и |
|
| URI Atlas. |
| ваш email администратора | Используется для входа в интерфейс согласия. |
| надежный пароль | Сравнивается при входе; никогда не отправляется в браузер. |
| длинная случайная строка | Подпись cookie сессии. Не используйте примеры значений. |
|
| Необязательно. |
|
| Необязательно. |
|
| Необязательно. |
|
| Необязательно. |
|
| Необязательно. |
|
| Необязательно. |
Не помещайте 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, ... }.Заполните MongoDB со своей машины, указав Atlas (не serverless-функцию 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 откроет экраны входа и согласия на том же домене, затем вызовет /mcp с Bearer-токеном.
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-клиент для локального использования в Inspector
Он не создает демо-пользователей и не задает учетные данные администратора.
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