wishlist-mcp
wishlist-mcp
Хостируемый MCP-сервер для wishlist.fit. Он позволяет Claude, ChatGPT или Codex читать и обновлять ваш вишлист от вашего имени.
https://mcp.wishlist.fit/mcpПодключайте его через app.wishlist.fit/connect — там пошаговые инструкции по настройке для каждого клиента. Сначала нужен аккаунт wishlist; этот сервер никогда его не создаёт.
Что это
Чистый сервер ресурсов OAuth 2.1 перед wishlist REST API. У него нет ни базы данных, ни бизнес-правил. Видимость, ограничения частоты запросов и обработка приглашений живут в wishlist API, и этот сервер наследует их, когда вызывает этот API с собственным токеном доступа пользователя.
Это решение осознанное. Альтернатива — второй сервис с собственной копией правил — так две поверхности незаметно начинают расходиться во мнениях о том, кому что можно видеть.
Claude / ChatGPT / Codex
│ MCP over HTTP, bearer token
▼
this server ──── verifies the token (issuer + audience)
│
│ the same token, forwarded
▼
api.wishlist.fit ──── applies visibility, rate limits, invite rules
│
▼
PostgresWorkOS AuthKit — сервер авторизации. Этот сервер ничего не выдаёт и не показывает экран согласия; он только проверяет, что подписал AuthKit.
Инструменты
Инструментов четырнадцать — по одному на каждое действие, которое вы уже можете выполнить руками в веб-приложении. Правило тут — паритет: никаких привилегий только для агента и ничего такого, чего не может само приложение.
Инструмент | Тип |
| чтение |
| чтение |
| чтение |
| чтение |
| чтение |
| чтение |
| чтение |
| чтение |
| запись |
| запись |
| запись |
| запись |
| разрушительный |
| разрушительный |
wishlist_get_gift_guide возвращает профиль человека и его вишлист вместе. Это ради него кто угодно подключает этот сервер, и без него путь дарителя подарка занимает три полных цикла запросов и ответов.
Два разрушительных инструмента имеют destructiveHint: true, поэтому клиенты, которые запрашивают подтверждение необратимых действий, спросят заблаговременно. Отправка приглашения — это письмо реальному человеку, и его нельзя отменить. Принятие приглашения обоюдно: приглашающий получает доступ к вашим полям, видимым только для круга, а вы — к его.
Одно подключение — всё
Скоупов нет. WorkOS не умеет выражать собственные, поэтому одно подключение несёт всю поверхность инструментов. Защита на запись — поведенческая, а не структурная: это аннотации выше, описания инструментов и ограничения частоты, которые применяет API.
Запуск локально
uv sync
cp .env.example .env # point it at a local API and the Local WorkOS environment
uv run python -m wishlist_mcp.mainuv run pytest
uv run ruff format --check . && uv run ruff check .Тесты подменяют wishlist API заглушкой respx. Проверяют здесь собственную работу сервера: верификацию токенов, формирование запросов и превращение ошибок API в формулировки, которые модель может использовать для действий. Сами правиливают в API и тестируются там.
Конфигурация
Каждая переменная имеет префикс WISHLIST_MCP_. Смотрите .env.example.
Переменная | Назначение |
| wishlist REST API, к которому обращается сервер |
| Эмитент WorkOS AuthKit. Пусто — сервер отказывается запускаться |
| Канонический URI. Аудитория каждого токена должна совпадать с ним точно |
| На любом другом хосте сервер отвечает 404 |
| Сколько секунд ждать ответ от API |
RESOURCE_URI должен совпадать с индикатором ресурса, настроенным в WorkOS, символ в символ, включая путь /mcp. Несовпадение — самая частая причина, почему клиент отказывается подключаться.
Что важно знать, прежде чем менять это
Каждый из пунктов — это баг, который один раз дошёл до продакшена.
get_http_headers()отбрасывает заголовокauthorization. Запрашивайте его явно. Без него каждый вызов инструмента сообщает «no access token», хотяinitializeиtools/listпо-прежнему успешные — на них отвечают до выполнения тела какого-либо инструмента. Успешное рукопожатие — не доказательство, что инструменты работают.MCP-приложение смонтировано в корень и само обрабатывает свой путь. При монтировании в
/mcpStarlette перенаправляет/mcpна/mcp/, а адрес, который отдаётся клиенту, не имеет завершающего слэша.Заголовку
X-Forwarded-Protoдоверяют. Cloud Run снимает TLS, поэтому без него каждый сгенерированный URL заявляетhttp://. В сочетании с редиректом выше это однажды означало, что клиент отправит свой bearer-токен открытым текстом.Жизненный цикл FastMCP включается в жизненный цикл приложения. Монтирование ASGI-приложения не запускает его жизненный цикл, и без этого каждый вызов инструмента падает с «Task group is not initialized», хотя юнит-тесты проходят.
TestClientпо умолчанию переходит по редиректам. Передавайтеfollow_redirects=False, когда смысл в том, что путь отвечает напрямую.
Развёртывание
Cloud Run, asia-southeast1, в том же проекте, что и весь wishlist. Ветка main разворачивается при push. Инфраструктура живёт в wishlist-infrastructure.
Лицензия
MIT. См. LICENSE.
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 Connectors
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
Cloud-hosted MCP server for durable AI memory
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/teslakoile/wishlist-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server