loading…
Search for a command to run...
loading…
Enables ChatGPT to call an orchestrator agent via a single MCP tool, currently a stub but designed to be replaced with a real agent for task execution.
Enables ChatGPT to call an orchestrator agent via a single MCP tool, currently a stub but designed to be replaced with a real agent for task execution.
Минимальный remote MCP server на Python для схемы:
ChatGPT -> MCP server -> main orchestrator -> helper agents
На первом этапе сервер содержит один tool:
run_orchestratorgoal: stringВнутри сейчас стоит заглушка. Позже ее можно заменить на вызов вашего настоящего главного агента.
FastMCP выбран потому, что он позволяет описать MCP tool обычной Python-функцией и сразу запустить remote MCP endpoint по HTTP. Для подключения в ChatGPT нужен публичный HTTPS endpoint вида /mcp.
.
├── .gitignore
├── server.py
├── requirements.txt
├── Procfile
├── render.yaml
└── README.md
Требования:
PowerShell:
python -m venv .venv
.\.venv\Scripts\Activate.ps1
Если на Windows команда python открывает Microsoft Store или не показывает версию, используйте:
py -3.11 -m venv .venv
.\.venv\Scripts\Activate.ps1
macOS/Linux:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
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
New -> Web Service.render.yaml.Pythonpip install -r requirements.txtpython server.pyDeploy.После деплоя Render выдаст URL примерно такого вида:
https://chatgpt-orchestrator-mcp.onrender.com
Production MCP endpoint будет:
https://chatgpt-orchestrator-mcp.onrender.com/mcp
Production health endpoint для проверки в браузере:
https://chatgpt-orchestrator-mcp.onrender.com/health
Именно этот URL нужно вставлять в ChatGPT.
Settings.Apps & Connectors или Connectors.Advanced settingsDeveloper modeCreate или Create connector.OrchestratorRuns my main orchestrator agent through MCP.https://YOUR-RENDER-SERVICE.onrender.com/mcpИспользуй 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, а уже ваш главный агент внутри решает, каких подручных вызывать.
Локально:
http://localhost:8000/mcp
Production URL-шаблон:
https://YOUR-RENDER-SERVICE.onrender.com/mcp
URL для ChatGPT:
https://YOUR-RENDER-SERVICE.onrender.com/mcp
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"chatgpt-orchestrator-mcp-server": {
"command": "npx",
"args": []
}
}
}