# Crank

Crank Community is a self-hosted platform for publishing REST APIs as MCP tools.

It lets operators describe an upstream REST endpoint, test it, publish it, and
expose it to LLM clients through MCP without writing a custom MCP server for
each integration.

## Features

- REST operation creation from the web UI or YAML.
- MCP input mapping into REST query, body, and header fields.
- REST response mapping into structured MCP tool output.
- Agent-scoped MCP endpoints with curated tool catalogs.
- Operation drafts, versions, samples, mappings, logs, and usage in PostgreSQL.
- Simple admin authentication with a bootstrap admin user.
- PostgreSQL-backed secrets and auth profiles for upstream REST APIs.
- Docker Compose deployment.

## Community Scope

This repository contains only the Community feature set:

- REST protocol only.
- Single self-hosted deployment.
- Simple admin authentication.
- Static agent API keys for MCP access.
- PostgreSQL as the system database.
- Optional Valkey/Redis cache for runtime coordination.
- Gitea Actions CI/CD.

The repository is focused only on the scope listed above.

## Architecture

Core concepts:

- `Workspace` is the data boundary for operations, agents, secrets, and logs.
- `Operation` is a versioned REST integration contract.
- `Agent` is an MCP surface that exposes a curated set of operations.

Runtime flow:

1. An operator creates or imports a REST operation.
2. Crank validates the schema and mapping.
3. The operator runs a test call against the upstream REST API.
4. The operation is published.
5. An agent exposes the published operation as an MCP tool.
6. MCP clients call the tool through `mcp-server`.

## License

GNU Affero General Public License v3.0 only
