Shopping List MCP Server
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.serverMCP будет доступен по 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>