ChatGPT Orchestrator MCP Server
ChatGPT Orchestrator MCP Server
Минимальный remote MCP server на Python для схемы:
ChatGPT -> MCP server -> main orchestrator -> helper agentsНа первом этапе сервер содержит один tool:
run_orchestratorвход:
goal: stringвыход: простой JSON
Внутри сейчас стоит заглушка. Позже ее можно заменить на вызов вашего настоящего главного агента.
Почему FastMCP
FastMCP выбран потому, что он позволяет описать MCP tool обычной Python-функцией и сразу запустить remote MCP endpoint по HTTP. Для подключения в ChatGPT нужен публичный HTTPS endpoint вида /mcp.
Структура проекта
.
├── .gitignore
├── server.py
├── requirements.txt
├── Procfile
├── render.yaml
└── README.mdЛокальный запуск
Требования:
Python 3.11+
pip
1. Создать виртуальное окружение
PowerShell:
python -m venv .venv
.\.venv\Scripts\Activate.ps1Если на Windows команда python открывает Microsoft Store или не показывает версию, используйте:
py -3.11 -m venv .venv
.\.venv\Scripts\Activate.ps1macOS/Linux:
python3 -m venv .venv
source .venv/bin/activate2. Установить зависимости
pip install -r requirements.txt3. Запустить сервер
python server.pyЛокальный MCP endpoint:
http://localhost:8000/mcpОбычная проверка, что сервер жив:
http://localhost:8000/healthЕсли клиент просит endpoint со слэшем в конце, используйте:
http://localhost:8000/mcp/Проверка локально
Оставьте python server.py запущенным. Во втором терминале выполните:
Invoke-RestMethod http://localhost:8000/healthОжидаемый ответ:
{
"status": "ok"
}Важно: если открыть http://localhost:8000/mcp в браузере или дернуть его обычным curl без MCP-заголовков, можно увидеть ошибку:
{
"error": {
"message": "Not Acceptable: Client must accept text/event-stream"
}
}Это нормально для MCP endpoint. Проверяйте /health обычным браузером, а /mcp проверяйте MCP-клиентом.
@'
import asyncio
from fastmcp import Client
async def main():
async with Client("http://localhost:8000/mcp") as client:
tools = await client.list_tools()
print("TOOLS:")
for tool in tools:
print("-", tool.name)
result = await client.call_tool(
"run_orchestrator",
{"goal": "Create an MVP launch plan"}
)
print("RESULT:")
print(result)
asyncio.run(main())
'@ | pythonОжидаемый смысл ответа: сервер покажет tool run_orchestrator и вернет JSON с текстом, что заглушка приняла задачу.
Можно также проверить через MCP Inspector:
npx @modelcontextprotocol/inspectorВ UI выберите transport Streamable HTTP и URL:
http://localhost:8000/mcpДеплой на Render
Вариант через GitHub
Создайте новый GitHub-репозиторий.
Загрузите туда эти файлы.
Откройте Render.
Нажмите
New->Web Service.Подключите GitHub-репозиторий.
Render обычно сам прочитает
render.yaml.Если настраиваете вручную:
Runtime:
PythonBuild Command:
pip install -r requirements.txtStart Command:
python server.py
Нажмите
Deploy.
После деплоя Render выдаст URL примерно такого вида:
https://chatgpt-orchestrator-mcp.onrender.comProduction MCP endpoint будет:
https://chatgpt-orchestrator-mcp.onrender.com/mcpProduction health endpoint для проверки в браузере:
https://chatgpt-orchestrator-mcp.onrender.com/healthИменно этот URL нужно вставлять в ChatGPT.
Как подключить к ChatGPT
Откройте ChatGPT в браузере.
Перейдите в
Settings.Откройте
Apps & ConnectorsилиConnectors.Включите Developer Mode, если он еще выключен:
Advanced settingsDeveloper mode
Нажмите
CreateилиCreate connector.Заполните:
Name:
OrchestratorDescription:
Runs my main orchestrator agent through MCP.Connector URL:
https://YOUR-RENDER-SERVICE.onrender.com/mcp
Сохраните.
В новом чате выберите этот connector/tool и попросите ChatGPT вызвать оркестратор.
Пример тестового запроса в ChatGPT
Используй Orchestrator и вызови run_orchestrator с goal:
"Составь пошаговый план запуска MVP моего продукта"Ожидаемый ответ от tool сейчас будет примерно:
{
"status": "ok",
"message": "Stub orchestrator accepted the goal.",
"goal": "Составь пошаговый план запуска MVP моего продукта",
"next_step": "Replace call_real_orchestrator() in server.py with your real agent call."
}Где заменить заглушку на реального агента
Откройте server.py и найдите функцию:
def call_real_orchestrator(goal: str) -> dict[str, Any]:Сейчас она возвращает тестовый JSON. Позже замените ее тело на реальный вызов вашего главного агента.
Пример будущей замены:
def call_real_orchestrator(goal: str) -> dict[str, Any]:
result = my_main_agent.run(goal)
return {
"status": "ok",
"goal": goal,
"result": result,
}Важно: не создавайте отдельный MCP server для каждого подручного агента на первом этапе. Пусть ChatGPT видит только один tool run_orchestrator, а уже ваш главный агент внутри решает, каких подручных вызывать.
Итоговые URL
Локально:
http://localhost:8000/mcpProduction URL-шаблон:
https://YOUR-RENDER-SERVICE.onrender.com/mcpURL для ChatGPT:
https://YOUR-RENDER-SERVICE.onrender.com/mcpПолезные официальные документы
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/vadimsey/MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server