186 lines
8.0 KiB
Markdown
186 lines
8.0 KiB
Markdown
# Crank
|
||
|
||

|
||
|
||
Crank Community — самостоятельная версия Crank для публикации REST API как MCP-инструментов.
|
||
|
||
Проект помогает подключать существующие HTTP API к LLM-клиентам без написания отдельного MCP-сервера для каждой интеграции. В Crank можно описать REST-операцию, проверить ее, опубликовать и открыть через MCP.
|
||
|
||
## Возможности
|
||
|
||
- Создание REST-операций через веб-интерфейс или YAML.
|
||
- Преобразование входных параметров MCP-инструмента в параметры REST-запроса: путь, query string, заголовки и тело запроса.
|
||
- Преобразование ответа REST API в структурированный результат MCP-инструмента.
|
||
- Публикация выбранных операций в MCP-точках доступа конкретных агентов.
|
||
- Отдельный каталог инструментов для каждого агента.
|
||
- Хранение черновиков, версий, примеров запросов и ответов, правил преобразования, журналов и статистики в PostgreSQL.
|
||
- Простая авторизация администратора через email, пароль и сессию браузера.
|
||
- Хранение секретов и профилей авторизации для внешних REST API.
|
||
- Развертывание через Docker Compose.
|
||
|
||
## Границы Community-версии
|
||
|
||
Этот репозиторий содержит только Community-возможности:
|
||
|
||
- только REST;
|
||
- одно самостоятельное развертывание;
|
||
- простая авторизация администратора;
|
||
- статические ключи агентов для MCP-доступа;
|
||
- PostgreSQL как основная база данных;
|
||
- необязательный Valkey или Redis для служебного кэша;
|
||
- CI/CD через Gitea Actions.
|
||
|
||
## Архитектура
|
||
|
||
Основные сущности:
|
||
|
||
- `Workspace` — граница данных для операций, агентов, секретов и журналов.
|
||
- `Operation` — версионируемое описание REST-интеграции.
|
||
- `Agent` — MCP-точка доступа с ограниченным набором опубликованных операций.
|
||
|
||
Рабочий сценарий:
|
||
|
||
1. Оператор создает или импортирует REST-операцию.
|
||
2. Crank проверяет схему входа, схему выхода и правила преобразования данных.
|
||
3. Оператор выполняет пробный вызов внешнего REST API.
|
||
4. Операция публикуется.
|
||
5. Операция привязывается к агенту.
|
||
6. MCP-клиент вызывает инструмент через `mcp-server`.
|
||
|
||
## Структура репозитория
|
||
|
||
```text
|
||
apps/
|
||
admin-api/ HTTP API для интерфейса, авторизации, операций, агентов, журналов и настроек
|
||
mcp-server/ MCP-сервер поверх Streamable HTTP
|
||
ui/ веб-интерфейс
|
||
|
||
crates/
|
||
crank-core/ общая доменная модель
|
||
crank-registry/ работа с PostgreSQL
|
||
crank-runtime/ выполнение REST-операций, преобразование данных, кэш, лимиты
|
||
crank-adapter-rest/ REST-адаптер
|
||
crank-community-auth/ пароли и сессии
|
||
crank-community-mcp/ прикладной слой MCP
|
||
crank-mapping/ преобразование данных через JSONPath
|
||
crank-schema/ нормализация и проверка схем
|
||
|
||
deploy/community/
|
||
docker-compose.yml манифест развертывания Community-версии
|
||
.env.example пример переменных окружения
|
||
```
|
||
|
||
## Требования
|
||
|
||
- Rust toolchain из `rust-toolchain.toml`
|
||
- Node.js и npm для веб-интерфейса
|
||
- PostgreSQL
|
||
- Docker и Docker Compose для развертывания
|
||
|
||
## Локальная разработка
|
||
|
||
Запустите PostgreSQL и задайте переменные окружения:
|
||
|
||
```bash
|
||
export POSTGRES_HOST=127.0.0.1
|
||
export POSTGRES_PORT=5432
|
||
export POSTGRES_DB=crank
|
||
export POSTGRES_USER=crank
|
||
export POSTGRES_PASSWORD=crank
|
||
export CRANK_MASTER_KEY=0000000000000000000000000000000000000000000000000000000000000000
|
||
export CRANK_SESSION_SECRET=dev-session-secret
|
||
export CRANK_PASSWORD_PEPPER=dev-password-pepper
|
||
export CRANK_BOOTSTRAP_ADMIN_EMAIL=owner@crank.local
|
||
export CRANK_BOOTSTRAP_ADMIN_PASSWORD=change-me-admin-password
|
||
export CRANK_BOOTSTRAP_ADMIN_DISPLAY_NAME="Crank Owner"
|
||
export CRANK_STORAGE_ROOT=.tmp/storage
|
||
export CRANK_BASE_URL=http://127.0.0.1:3000
|
||
```
|
||
|
||
Запустите серверные приложения:
|
||
|
||
```bash
|
||
cargo run -p admin-api
|
||
cargo run -p mcp-server
|
||
```
|
||
|
||
Соберите веб-интерфейс:
|
||
|
||
```bash
|
||
cd apps/ui
|
||
npm ci
|
||
npm run build
|
||
```
|
||
|
||
## Проверки
|
||
|
||
Rust:
|
||
|
||
```bash
|
||
cargo fmt --all --check
|
||
cargo clippy --workspace --all-targets --all-features -- -D warnings
|
||
cargo test --workspace --all-targets
|
||
```
|
||
|
||
Веб-интерфейс:
|
||
|
||
```bash
|
||
cd apps/ui
|
||
npm ci
|
||
npm run build
|
||
npx playwright test
|
||
```
|
||
|
||
Playwright поднимает локальный проверочный стенд с PostgreSQL, `admin-api`, `mcp-server` и сервером веб-интерфейса.
|
||
|
||
## Развертывание
|
||
|
||
Манифест Community-версии находится в `deploy/community/docker-compose.yml`.
|
||
|
||
Для рабочего развертывания нужны:
|
||
|
||
- внешний PostgreSQL;
|
||
- контейнерные образы для `admin-api`, `mcp-server` и `ui`;
|
||
- секреты и настройки через переменные окружения;
|
||
- обратный прокси перед портами `3000`, `3001`, `3002`.
|
||
|
||
Процесс развертывания в `.gitea/workflows/deploy.yml` собирает образы, читает настройки из OpenBao, записывает `.env` на сервер развертывания и запускает Docker Compose.
|
||
|
||
Ключевые переменные окружения:
|
||
|
||
- `POSTGRES_HOST`, `POSTGRES_PORT`, `POSTGRES_DB`, `POSTGRES_USER`, `POSTGRES_PASSWORD`
|
||
- `CRANK_MASTER_KEY`
|
||
- `CRANK_SESSION_SECRET`
|
||
- `CRANK_PASSWORD_PEPPER`
|
||
- `CRANK_BOOTSTRAP_ADMIN_EMAIL`
|
||
- `CRANK_BOOTSTRAP_ADMIN_PASSWORD`
|
||
- `CRANK_BASE_URL`
|
||
- `CRANK_PUBLISH_BIND`
|
||
|
||
Дополнительная документация:
|
||
|
||
- [docs/runtime-config.md](docs/runtime-config.md)
|
||
- [docs/deployment.md](docs/deployment.md)
|
||
- [docs/mcp-interface.md](docs/mcp-interface.md)
|
||
|
||
## MCP
|
||
|
||
Crank публикует MCP-точки доступа для отдельных агентов через Streamable HTTP. Каждый агент имеет собственный каталог инструментов, поэтому MCP-клиент видит только REST-инструменты, явно привязанные к этому агенту.
|
||
|
||
Типовой сценарий:
|
||
|
||
1. Создать REST-операцию.
|
||
2. Проверить REST-операцию пробным вызовом.
|
||
3. Опубликовать REST-операцию.
|
||
4. Привязать операцию к агенту.
|
||
5. Создать ключ агента.
|
||
6. Подключить MCP-клиент к точке доступа агента.
|
||
|
||
## Английская документация
|
||
|
||
Английский вариант README находится в [docs/en/README.md](docs/en/README.md).
|
||
|
||
## Лицензия
|
||
|
||
MIT
|