Shopping List MCP Server
by mihey3000
README.md
# 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`.
Затем в этом каталоге:
```bash
../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-адреса:
```bash
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`](docs/keycloak.md).
Выгрузка MCP как самостоятельного systemd-сервиса без Docker — в
[`deploy/README.md`](deploy/README.md).
## Локальная разработка без Keycloak
Этот режим нужен только для быстрых локальных smoke-тестов. Он не реализует
OAuth discovery и не должен попадать в серверную конфигурацию.
```bash
MCP_AUTH_MODE=development \\
MCP_AUTH_TOKEN='длинный-случайный-токен' \\
../shopping-list-app/.venv/bin/python -m mcp_adapter.server
```
## Проверка
```bash
../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-запрос должен передавать тот же токен:
```http
Authorization: Bearer <MCP_AUTH_TOKEN>
```
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues