issue_receiptLABSCO SUMMARY
The refusal happens before the receipt, which is the whole design.
Spending caps and action whitelists are evaluated first, so a denied action leaves no signed record — the ledger is a record of what was allowed, not of what was attempted. Verification is the other half: a provider checks a receipt with one public GET and no account, which is what lets both sides trust the same proof. Read the policy on startup and pre-check anything expensive.
What it is
A Python server in front of Openterms. Before an agent calls an API it requests a receipt; the policy engine evaluates the action first, and a denied action never gets one. Receipts are Ed25519-signed over canonical JSON with a SHA-256 hash, and anyone can verify them from public keys.
What you get
- A signed receipt issued before an action, carrying provider verification headers —
issue_receipt - Receipt verification, direct and by canonical hash, both public — no API key needed to check one —
verify_receipt,verify_receipt_by_hash - The active guardrails, meant to be read on startup, and a pre-check on a hypothetical action —
get_policy,simulate_policy - The audit trail of every allow, deny and escalate —
policy_decisions - Recent receipts, workspace balance and per-receipt pricing —
list_receipts,check_balance,get_pricing - Receipt statistics for an API you operate, behind provider auth —
provider_activity
Requirements
Self-host or use the hosted instance. Self-hosting needs pip install flask pyjwt cryptography pyyaml and python run.py, serving on http://localhost:5000, or docker compose up --build; storage is SQLite with no external dependencies. The MCP server runs openterms_mcp_server.py under python3, with OPENTERMS_API_URL pointing at your instance or the hosted one, and OPENTERMS_API_KEY for your workspace. Receipt issuance is free — no wallet, no deposit.
Setup effort
Build from source — git clone https://github.com/jstibal/openterms-mcp.git
USE CASES
Capping what an agent can spend
Set daily limits and action whitelists so a runaway loop is refused rather than logged after the fact.
Proving what an agent agreed to
Issue the receipt before the call and hand the header along, so the action carries its own evidence.
Verifying as the API provider
Check the receipt by hash with a public call before serving the request, with no account needed.
Reviewing what was allowed and denied
Read the decision trail rather than reconstructing behaviour from application logs.
10 tools
Listed in project docs. Your client may show a different list.
verify_receiptverify_receipt_by_hashcheck_balanceget_pricinglist_receiptsget_policysimulate_policypolicy_decisionsprovider_activityBEFORE YOU INSTALL
What to know first
Tools you get
10 tools named in the project's documentation.
Requires
- python3 on PATH
- OPENTERMS_API_KEY in your environment
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
You clone this one yourself.
Server setup
git clone https://github.com/jstibal/openterms-mcp.git
cd openterms-mcp
pip install .MCP Clients
Any MCP client
{
"mcpServers": {
"openterms": {
"command": "python3",
"args": [
"<YOUR_PATH_TO_OPENTERMS_MCP>/openterms_mcp_server.py"
],
"env": {
"OPENTERMS_API_URL": "https://openterms.com",
"OPENTERMS_API_KEY": "<YOUR_OPENTERMS_API_KEY>"
}
}
}
}