Skip to main content
Glama
mihey3000

Shopping List MCP Server

by mihey3000

MCP списка покупок

Самостоятельный MCP-сервис. Он не открывает SQLite и не содержит бизнес-логику: все операции выполняются через REST веб-приложения.

Режимы авторизации

На сервере MCP работает как OAuth 2.1 Resource Server. Клиент получает access token у Keycloak и передаёт его как Authorization: Bearer <token>. Сервер публикует метаданные защищённого ресурса MCP, а затем проверяет токен через Keycloak Introspection: активность, issuer, audience, scope и срок действия. Статический токен допускается только в локальном режиме разработки.

Запуск с OAuth 2.1

Сначала запустите приложение из репозитория shopping-list-app на порту 8000. Затем в этом каталоге:

../shopping-list-app/.venv/bin/python -m pip install -e ".[dev]"
cp .env.example .env
# Заполните MCP_OAUTH_* значениями из Keycloak.
set -a; source .env; set +a
../shopping-list-app/.venv/bin/python -m mcp_adapter.server

MCP будет доступен по http://127.0.0.1:8001/mcp/.

Для удалённого приложения укажите публичные HTTPS-адреса:

SHOPPING_APP_URL=https://app.example.com \\
MCP_RESOURCE_SERVER_URL=https://mcp.example.com/mcp \\
../shopping-list-app/.venv/bin/python -m mcp_adapter.server

Конфигурация Keycloak и сценарий для пользователя reviewer — в docs/keycloak.md. Выгрузка MCP как самостоятельного systemd-сервиса без Docker — в deploy/README.md.

Локальная разработка без Keycloak

Этот режим нужен только для быстрых локальных smoke-тестов. Он не реализует OAuth discovery и не должен попадать в серверную конфигурацию.

MCP_AUTH_MODE=development \\
MCP_AUTH_TOKEN='длинный-случайный-токен' \\
../shopping-list-app/.venv/bin/python -m mcp_adapter.server

Проверка

../shopping-list-app/.venv/bin/python -m pip install -e ".[dev]"
../shopping-list-app/.venv/bin/python -m pytest
export MCP_AUTH_MODE=development
export MCP_AUTH_TOKEN='длинный-случайный-токен'
../shopping-list-app/.venv/bin/python scripts/mcp_smoke.py

В этом локальном режиме каждый HTTP-запрос должен передавать тот же токен:

Authorization: Bearer <MCP_AUTH_TOKEN>