Files
crank/README.md
T
github-ops 1cf1efadfe
Deploy / deploy (push) Successful in 33s
CI / Rust Checks (push) Successful in 5m12s
CI / UI Checks (push) Successful in 5s
CI / Deployment Manifests (push) Successful in 3s
CI / Frontend E2E (push) Successful in 3m56s
chore: publish clean community baseline
2026-06-16 23:26:28 +00:00

192 lines
6.1 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 Community — self-hosted платформа для публикации REST API как MCP tools.
Проект решает практическую задачу: описать внешний REST endpoint, проверить его,
опубликовать и отдать LLM-клиентам через MCP без написания отдельного MCP server
для каждой интеграции.
## Возможности
- Создание REST operations через UI или YAML.
- Маппинг MCP input в query/body/header параметры REST-запроса.
- Маппинг REST response в структурированный output MCP tool.
- Публикация выбранных operations в agent-scoped MCP endpoints.
- Черновики, версии, samples, mappings, logs и usage в PostgreSQL.
- Простая авторизация через bootstrap admin user и browser session.
- PostgreSQL-backed secrets и auth profiles для upstream REST API.
- Docker Compose deployment.
## Scope Community
Этот репозиторий содержит только Community-возможности:
- только REST protocol;
- один самостоятельный self-hosted deployment;
- простая admin-аутентификация;
- статические agent API keys для MCP-доступа;
- PostgreSQL как системная БД;
- optional Valkey/Redis для runtime coordination;
- Gitea Actions workflow для CI/CD.
Репозиторий фокусируется только на перечисленном scope.
## Архитектура
Основные сущности:
- `Workspace` — граница данных для operations, agents, secrets и logs.
- `Operation` — версионируемый REST integration contract.
- `Agent` — MCP surface, который публикует ограниченный набор operations.
Рабочий flow:
1. Оператор создает или импортирует REST operation.
2. Crank валидирует schema и mapping.
3. Оператор выполняет test call к upstream REST API.
4. Operation публикуется.
5. Agent открывает published operation как MCP tool.
6. MCP client вызывает tool через `mcp-server`.
## Структура репозитория
```text
apps/
admin-api/ HTTP API для UI, auth, operations, agents, logs и settings
mcp-server/ Agent-scoped MCP Streamable HTTP server
ui/ Static web UI
crates/
crank-core/ Общая domain model
crank-registry/ PostgreSQL persistence
crank-runtime/ REST execution, mapping, cache, limits
crank-adapter-rest/ REST adapter
crank-community-auth/ Password hashing и sessions
crank-community-mcp/ MCP application layer
crank-mapping/ JSONPath mapping
crank-schema/ Schema normalization и validation
deploy/community/
docker-compose.yml Production-like Community deployment
.env.example Runtime env template
```
## Требования
- Rust toolchain из `rust-toolchain.toml`
- Node.js и npm для UI
- PostgreSQL
- Docker и Docker Compose для deployment
## Локальная разработка
Запустите 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
```
Запустите backend:
```bash
cargo run -p admin-api
cargo run -p mcp-server
```
Соберите UI:
```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
```
UI:
```bash
cd apps/ui
npm ci
npm run build
npx playwright test
```
Playwright поднимает локальный test stack с PostgreSQL, `admin-api`,
`mcp-server` и UI test server.
## Deployment
Community manifest находится в `deploy/community/docker-compose.yml`.
Production-like deployment ожидает:
- внешний PostgreSQL;
- container images для `admin-api`, `mcp-server` и `ui`;
- runtime secrets через environment variables;
- reverse proxy перед портами `3000`, `3001`, `3002`.
Gitea workflow `.gitea/workflows/deploy.yml` собирает images, читает runtime
configuration из OpenBao, пишет `.env` на deployment host и запускает Docker
Compose.
Ключевые runtime variables:
- `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`
Полная operational-документация:
- [docs/runtime-config.md](docs/runtime-config.md)
- [docs/deployment.md](docs/deployment.md)
- [docs/mcp-interface.md](docs/mcp-interface.md)
## MCP
Crank публикует agent-scoped MCP endpoints через Streamable HTTP. Каждый agent
имеет собственный published tool catalog, поэтому MCP client видит только REST
tools, явно привязанные к этому agent.
Типовой сценарий:
1. Создать REST operation.
2. Протестировать operation.
3. Опубликовать operation.
4. Привязать operation к agent.
5. Создать agent API key.
6. Подключить MCP client к agent endpoint.
## Английская документация
English README: [docs/en/README.md](docs/en/README.md).
## Лицензия
MIT