Files
crank/README.md
T
github-ops 37b569e6bc
Deploy / deploy (push) Successful in 30s
CI / Rust Checks (push) Successful in 4m58s
CI / UI Checks (push) Successful in 4s
CI / Deployment Manifests (push) Successful in 2s
CI / Frontend E2E (push) Successful in 4m0s
chore: publish clean community baseline
2026-06-17 06:15:46 +00:00

186 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Crank
![Crank](./Crank.png)
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