The API and the MCP server

ShippedWorks today.

Each book has an HTTP ledger API scoped by a book key, and an MCP server exposing the tool surface an agent needs to read and write validated double-entry.

Scope and authorisation

A book key (cbk_…) is scoped to exactly one book. Three authorisation layers stay distinct — org membership, access grants, and key scopes — and no access returns 404 rather than 403, so a key cannot be used to discover which books exist.

The tool surface

create_book · book_status · add_transactions · add_directives · open_accounts · list_accounts · get_ledger · run_query · balances · generate_report · history · revert

Writes go through bean-check server-side. A rejected write returns REJECTED with the validator’s error, and nothing is committed.

Connecting the plugin

Pass only the cbk_… key and the bok_… id. Do not pass an explicit control_urlconnect_book rejects it even when it is the correct /v1/books/<id>/api URL the book page prints. Let the plugin resolve the endpoint.

What there is not

No webhooks, no public OpenAPI document, and no rate-limit headers you can plan against. If you are building something that depends on any of those, say so on the board and it will be visible rather than guessed at.

Something here wrong or missing? Put it on the board — it is public, and the reply is in the thread.