Orders MCP server
MCP против API: один сервис заказов, два интерфейса
Репозиторий-компаньон для видео «MCP против API: зачем нужен MCP, если REST уже работает?»
Склонируйте его, выполните две команды и сделайте одну и ту же работу дважды. Один раз — через обычный REST API. Второй раз — с MCP-сервером поверх него. Займёт около 20 минут.
Что мы строим
У вас небольшой интернет-магазин. Приходят заказы. Некоторые застревают и никогда не отправляются. Вы хотите, чтобы AI-агент находил застрявшие заказы и открывал по одному issue на GitHub для каждого.
Это весь пример. Одна маленькая, реальная задача.
Первый способ: вы даёте агенту документацию вашего API и позволяете ему использовать curl. Ему приходится самому выяснять, какой endpoint вызывать, строить фильтр по дате для «более 7 дней», замечать, что ответ приходит страницами, и переводить центы в доллары.
Второй способ: вы даёте ему инструмент под названием find_stale_orders, который принимает { older_than_days: 7 }.
Оба способа вызывают один и тот же endpoint — GET /orders. Магазин не меняется вообще. Меняется то, кто выполняет思考: агент или ваш сервер.
┌──────────────────────────────────┐
Web frontend ───────▶│ │
Mobile app ───────▶│ Orders service (Express) │
Microservice ───────▶│ GET /orders │
│ GET /orders/:id │
│ PATCH /orders/:id │
└──────────────▲───────────────────┘
│ plain HTTP, nothing AI specific
┌──────────────┴───────────────────┐
Claude Code ───────▶│ Orders MCP server │
Cursor ───────▶│ tool: find_stale_orders │
Codex ───────▶│ input: { older_than_days: 7 } │
└──────────────────────────────────┘Ваш API — это дверь. MCP даёт AI-клиентам стандартную ручку, чтобы её открыть.
Сервис заказов никогда не узнает, что существует Claude Code. MCP-сервер — это просто ещё один HTTP-клиент вашего API. Единственное отличие в том, что он описывает себя так, как понимают агенты.
Related MCP server: OHMS
Попробуйте за одну минуту
Вам нужен Node 20 или новее. Больше ничего. Никакой базы данных, никаких API-ключей.
git clone https://github.com/bytemonk-academy/mcp-vs-api.git
cd mcp-vs-api
npm install
npm testnpm test запускает 31 тест и для REST API, и для MCP-сервера. Если они проходят — всё работает, а дальше вам остаётся только наблюдать за происходящим.
Теперь запустите сервис и оставьте его работать:
npm run apiВо втором терминале посмотрите на данные:
npm run orders ID CUSTOMER STATUS PLACED DAYS TOTAL
----------------------------------------------------------------------
ORD-1001 Ada Lovelace UNSHIPPED 2026-07-27 31 $129.00
ORD-1002 Grace Hopper UNSHIPPED 2026-08-03 24 $45.99
...
Showing 20 of 24 matching orders.
!! There are more. page.nextOffset = 20
You have NOT seen all 24 orders.Затем задайте ему тот вопрос, ради которого весь этот демо-пример:
npm run orders -- --stale=7Восемь заказов. Одни и те же восемь на любой машине, в любое время суток.
Что такое npm run orders?
Это сокращение для curl.
Он отправляет GET /orders на ваш API и выводит ответ в виде таблицы вместо сырого JSON. Вот и всё, что он делает. Вы можете выполнить тот же запрос сами:
curl "http://localhost:3000/orders"Вы получите те же данные, просто их труднее читать. Скрипт нужен только для того, чтобы вы могли быстро проверить данные. Он не является частью урока. В Фазе 1 агент получает curl и документацию — и ничего больше.
Он принимает несколько опций:
npm run orders -- --stale=7 # unshipped for more than 7 days
npm run orders -- --status=UNSHIPPED # filter by status
npm run orders -- --limit=5 --offset=5 # move through the pages by handПочему тестовые данные выглядят именно так
Есть 24 заказа, хранящихся в памяти, с датами, заданными относительно сегодняшнего дня. Поэтому всегда есть ровно 8 просроченных заказов, когда бы вы ни склонировали этот репозиторий.
Три проблемы добавлены намеренно, чтобы вы увидели разницу сами, а не поверили видео на слово:
Ответ приходит страницами. Запросите заказы — и получите 20 из 24. Ничто в этих 20 строках не выглядит неполным. Агент, который останавливается на первой странице, даёт неверный ответ и звучит при этом уверенно.
Некоторые старые заказы отменены. Они выглядят просроченными, но не являются таковыми. Если фильтровать по
shippedAtвместоstatus, вы посчитаете их по ошибке.Некоторые заказы находятся ровно на границе 7 дней. Посчитайте дни чуть неправильно — и получите неверный итог, а не сообщение об ошибке.
MCP-сервер решает все три проблемы в коде, один раз, в src/mcp/server.ts. В версии с curl агенту приходится справляться со всеми тремя каждый раз.
Упражнение
Выполняйте по порядку. Фаза 1 перед Фазой 2 — это и есть суть, потому что разница и есть урок.
Руководство | Что вы делаете | |
Фаза 1 | Дайте агенту документацию вашего API, позвольте ему использовать curl, посмотрите, что ему приходится выяснять самостоятельно | |
Фаза 2 | Включите MCP-сервер Orders и GitHub, запустите тот же промпт снова | |
После | Что изменилось, что нет и когда MCP не стоит того |
Также здесь: справочник по API, который вы даёте агенту в Фазе 1, промпты, которые можно копировать, и устранение неполадок.
Фаза 2 открывает настоящие issue на GitHub, поэтому используйте тестовый репозиторий, который не жалко засорить.
Что здесь находится
src/
data/orders.ts The 24 test orders
api/app.ts The REST API. Knows nothing about MCP.
api/server.ts Starts it on a port.
mcp/server.ts The MCP server. Calls the REST API over HTTP.
scripts/orders.ts The table viewer used above
clients/ Plain MCP clients, in Python and TypeScript
tests/ Tests for both halves
docs/ The walkthrough
.mcp.json Claude Code reads this automatically
.cursor/mcp.json Cursor reads this automaticallyТри инструмента. Каждый — тонкая обёртка над endpoint'ом, который у вас уже есть:
Инструмент | Входные данные | Вызовы |
|
|
|
|
|
|
|
|
|
src/mcp/server.ts — около 170 строк, и большая часть из них — комментарии. Вот и всё, чем на самом деле является MCP-сервер.
Увидеть протокол своими глазами
Claude Code не делает здесь ничего особенного. Он запускает сервер как подпроцесс и отправляет JSON-RPC-сообщения через stdin и stdout.
clients/raw_mcp_client.py делает то же самое вручную:
async with stdio_client(server) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
result = await session.call_tool("find_stale_orders", {"older_than_days": 7})Тот же скрипт затем общается с MCP-сервером GitHub по HTTP, чтобы открыть issue:
await session.call_tool("create_issue", {"owner": owner, "repo": name, "title": ...})Одинаковая форма в обоих случаях. Один сервер — это Node-процесс на вашем ноутбуке. Другой запущен GitHub. Клиент не может их различить. Вот эту часть стоит запомнить. В clients/ есть версия на TypeScript, если вы предпочитаете оставаться на одном языке.
Тесты
npm test31 тест. MCP-тесты управляют настоящим MCP-клиентом через stdio — точно так же, как это делает Claude Code.
Стоит прочитать, если вы планируете писать собственный сервер. Они показывают, что действительно стоит проверять: что у каждого инструмента есть понятное описание и схема, что пагинация действительно работает, что 404 возвращается как ошибка инструмента, а не как падение, и что отменённые заказы не попадают в результаты.
Команды
npm run api # REST API on :3000
npm run api:dev # same, restarts when you edit a file
npm run orders # print the orders as a table
npm run mcp # run the MCP server directly (agents usually do this for you)
npm test # the tests
npm run typecheck # tsc --noEmit
npm run inspect # MCP Inspector, to try the tools by handnpm run inspect — самый быстрый способ увидеть ровно то, что видит агент: названия инструментов, описания и схему входных данных для каждого.
Данные хранятся в памяти, поэтому перезапуск npm run api возвращает всё в исходное состояние.
Когда MCP оправдан?
Фаза 1 работает. Это не трюк. Хороший агент найдёт просроченные заказы и откроет issue, используя только curl и вашу документацию. MCP — не то, что делает задачу возможной.
Он меняет форму интеграции. Знание о том, как запрашивать ваш сервис заказов, теперь живёт в одном сервере, а не в контекстном окне каждого агента. Та же возможность работает в Claude Code, Cursor и Codex без написания новой интеграции для каждого. И вы сами выбираете, какие возможности открывать, — это сильно отличается от передачи API-ключа.
Чего он не меняет: аутентификация, авторизация, валидация, ограничение частоты запросов, повторные попытки и хороший дизайн сервиса — всё это по-прежнему ваша работа. MCP-сервер поверх плохо спроектированного API — это всё ещё плохо спроектированный API.
Грубо говоря, ценность растёт вместе с произведением числа клиентов на число инструментов. Один агент вызывает две функции, которыми вы управляете? Пропустите MCP, просто вызывайте функции. Тридцать инструментов в пяти командах и четырёх клиентах? Вот когда общий протокол начинает окупаться. docs/architecture.md подробно разбирает, где проходит граница.
Лицензия MIT. Используйте в своём обучении, указание авторства не требуется.
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 gradedqualityDmaintenanceEnables management of Shopify orders through the Admin REST API, allowing users to create new orders and retrieve order status details. It supports both local and remote access via SSE and STDIO transports for integration with MCP clients like Claude Desktop.
- FlicenseNot gradedqualityCmaintenanceExposes Shopify order and inventory management tools via MCP, allowing agents to fetch, update, and print orders without exposing raw Shopify credentials.
- FlicenseAqualityCmaintenanceWraps a procurement REST API into MCP tools, enabling AI assistants to query purchase orders via natural language.2
- AlicenseNot gradedqualityBmaintenanceExposes order status lookup and knowledge base search tools from the Support Agent AI over MCP, enabling MCP clients to handle customer support queries with grounded, citation-backed answers.MIT
Related MCP Connectors
Shopify MCP Pack — wraps the Shopify Admin REST API (2024-01)
India shipping for AI agents: Shiprocket courier serviceability, create orders, track AWB.
Real-time Amazon, WIPO & PACER data for AI agents — 19 tools via the MCP protocol.
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/bytemonk-academy/mcp-vs-api'
If you have feedback or need assistance with the MCP directory API, please join our Discord server