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_url — connect_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.