Simple-MCP-Server
Домашнее задание MCP Agent
Система TypeScript MCP (Model Context Protocol), созданная для задания в MCP_HOMEWORK_SKILL.md: Agent Host, который загружает Agent Skill (SKILL.md), подключается к трём MCP-серверам через все три требуемых транспорта, обнаруживает/агрегирует их инструменты и позволяет Gemini выбирать и вызывать нужный инструмент на нужном сервере.
Архитектура
Agent Host (src/host)
skill-loader + connection-manager
+ tool-bridge + gemini-client
|
+------------------+------------------+
| | |
v v v
stdio server local HTTP server public HTTP server
(src/servers/stdio- (src/servers/http- (same http-server.ts,
server.ts) server.ts, no auth) API-key protected)
| | |
+------------------+-------------------+
|
shared tool logic (src/servers/shared/tools.ts)
3 tools (calculator, text_stats, unit_convert) + 1 resource + 1 promptsrc/servers/shared/tools.ts— единственная реализация 3 инструментов, 1 ресурса и 1 промпта, зарегистрированных одинаково на каждом сервере, чтобы одна и та же логика переиспользовалась везде (без дублирования бизнес-логики).src/servers/stdio-server.ts— MCP через stdio (запускается как дочерний процесс).src/servers/http-server.ts— MCP через Streamable HTTP. Один и тот же файл/код запускает и «локальный», и «публичный» серверы; разница только в конфигурации (PORT,PUBLIC_MCP_API_KEY).src/host/connection-manager.ts— MCP Host: подключается к каждому настроенному серверу, обнаруживает инструменты/ресурсы/промпты, разносит имена инструментов по пространствам имён как<namespace>__<tool>во избежание коллизий и направляет вызовы инструментов обратно на владеющий сервер.src/host/tool-bridge.ts— преобразует обнаруженные MCP-инструменты в объявления функций Gemini.src/host/gemini-client.ts— цикл вызова инструментов Gemini (отправка сообщения → чтение вызовов функций → диспетчеризация через connection manager → отправка ответов функций обратно → повтор до финального текста).src/host/skill-loader.ts— загружает SKILL.md и внедряет его как системную инструкцию модели, так что скилл активно формирует использование инструментов.src/host/agent-host.ts— связывает всё вышеперечисленное на основе config/servers.json.src/host/cli.ts— точка входа CLI (интерактивный режим или--demo).
Related MCP server: mcp-tools-server
Настройка
npm installСекреты хранятся в api.env (уже в gitignore):
API_KEY=your-gemini-api-key
# Optional, only needed once you deploy the public server:
# PUBLIC_MCP_URL=https://your-app.onrender.com/mcp
# PUBLIC_MCP_API_KEY=some-strong-random-keyЗапуск каждого компонента
stdio-сервер (20 баллов)
npm run server:stdio # run directly
npm run inspector:stdio # open MCP Inspector against itInspector обнаружит 3 инструмента (calculator, text_stats,
unit_convert), 1 ресурс (docs://unit-conversions) и 1 промпт
(explain-tool-result) и сможет выполнить/прочитать их все.
Локальный HTTP-сервер
npm run server:http # listens on http://127.0.0.1:8787/mcp, no auth
npm run inspector:http # then connect Inspector to that URLПубличный HTTP-сервер (15 баллов)
Тот же http-server.ts становится «публичным» сервером, как только задан
PUBLIC_MCP_API_KEY — каждый запрос теперь требует соответствующий заголовок
x-api-key; при отсутствии/неверном ключе возвращается 401 Unauthorized.
$env:PORT=8788; $env:PUBLIC_MCP_API_KEY="a-strong-secret"; npm run server:httpПубличное развёртывание (Render.com, с использованием приложенного render.yaml):
git init && git add -A && git commit -m "MCP homework", затем запушьте в ваш собственный репозиторий GitHub.В Render: New + → Blueprint → выберите репозиторий (он читает
render.yamlавтоматически) или создайте Web Service вручную с:Команда сборки:
npm install && npm run buildКоманда запуска:
npm run start:httpПуть проверки здоровья:
/health
В панели Render задайте переменную окружения
PUBLIC_MCP_API_KEYкак надёжный секрет (никогда не коммитьте его).После развёртывания поместите полученный URL + ключ в
api.env:PUBLIC_MCP_URL=https://<your-service>.onrender.com/mcpиPUBLIC_MCP_API_KEY=<тот же секрет>.Проверьте с помощью Inspector:
Без ключа → отклонено:
curl -X POST https://<url>/mcp -H "Content-Type: application/json" -d "{...}"возвращает401.С ключом → работает: передайте
--header "x-api-key: <secret>"вnpx @modelcontextprotocol/inspector --cli <url> --method tools/list.
Agent Host
npm run agent # interactive CLI
npm run agent:demo # runs a scripted set of demo queriesПри запуске хост:
Загружает
SKILL.mdкак системную инструкцию.Читает config/servers.json и подключается к stdio-серверу (запускается автоматически), локальному HTTP-серверу (должен уже работать) и публичному HTTP-серверу (пропускается автоматически, если
PUBLIC_MCP_URL/PUBLIC_MCP_API_KEYне заданы — он опционален, чтобы демо работало и без живого развёртывания).Обнаруживает и разносит по пространствам имён каждый инструмент, передаёт их Gemini и направляет каждый вызов инструмента, сделанный Gemini, на правильный MCP-сервер.
Конфигурация
Регистрация серверов управляется данными через config/servers.json
— добавляйте/удаляйте серверы там, а не редактируйте код хоста. ${VAR} в url
разрешается из process.env в момент подключения; apiKeyEnv задаёт имя
переменной окружения, значение которой отправляется как x-api-key.
Agent Skill
SKILL.md инструктирует агента предпочитать вызов инструментов
угадыванию при арифметике/конвертациях/текстовой статистике, выбирать один
инструмент с пространством имён на каждый логический запрос, обращаться
к ресурсу docs://unit-conversions при неуверенности в поддерживаемых
конвертациях и объяснять результаты простым языком. Он загружается дословно
в системную инструкцию Gemini при каждом запуске (см.
src/host/skill-loader.ts), так что его правила напрямую влияют на выбор
инструментов и стиль ответов — это видно в выводе демо (например, агент всегда
вызывает инструмент для арифметики, а не вычисляет сам).
Замечания по безопасности
Секреты не коммитятся;
api.envв gitignore, и публичный сервер читаетPUBLIC_MCP_API_KEYтолько из окружения.Публичный HTTP-сервер отклоняет любой запрос без соответствующего заголовка
x-api-key(401) и принимает запросы при наличии действительного ключа.
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
- FlicenseAqualityDmaintenanceA lightweight MCP server providing utility tools for math, text processing, data conversion, and URL fetching. It supports both STDIO and SSE communication modes for seamless integration with Claude Desktop and remote AI agents.51
- AlicenseNot gradedqualityBmaintenanceA general-purpose MCP server with utility tools including datetime information, safe math calculations, text statistics, JSON extraction, knowledge base search, and HTTP GET requests. It demonstrates server-side MCP implementation and can be connected to Claude Desktop or LangGraph agents.MIT
- FlicenseNot gradedqualityDmaintenanceProvides math and weather tools accessible via LangGraph agent using MCP protocol with stdio and streamable HTTP transports.1
- FlicenseNot gradedqualityDmaintenanceLocal MCP server that exposes fixed tools for GPT, Claude, and Gemini while routing to any OpenAI-compatible chat completions backend with independent configuration per target.1
Related MCP Connectors
MCP server exposing the Backtest360 engine API as tools for AI agents.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
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/kindinh903/Simple-MCP-Server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server