mcp-register
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FORESTRIE_GRANT | No | Your Forestrie-Grant, as base64 or a file path. | |
| MCP_REGISTER_HOME | No | Key files, grants, registrations and the spend ledger. | ~/.config/forestrie/mcp-register |
| FORESTRIE_BASE_URL | No | The canopy SCRAPI base URL. | |
| MCP_REGISTER_PAY_TO | No | Optional: the only payee. | |
| FORESTRIE_ROOT_LOG_ID | No | The forest's root log id (R in /register/{R}/entries). | |
| MCP_REGISTER_KEY_FILE | No | The log key file. | $MCP_REGISTER_HOME/log-key.jwk |
| MCP_REGISTER_PAY_ASSET | No | The one asset it pays in. | USDC on Base Sepolia |
| MCP_REGISTER_PAY_NETWORK | No | The one network it pays on. | eip155:84532 |
| FORESTRIE_AUTHORITY_GRANT | No | Your authority log's grant, for issue_grant and register_grant. | |
| FORESTRIE_COORDINATOR_URL | No | The delegation coordinator, for delegate_sealing. | |
| FORESTRIE_KNOWN_SEALER_KEY | No | The registrar's voucher key, base64 x‖y, for delegate_sealing. | |
| MCP_REGISTER_PAYER_KEY_FILE | No | An EVM private key (0x + 64 hex, mode 600) that pays; unset means relay mode. | |
| MCP_REGISTER_PAY_MAX_PER_DAY | No | The most all payments in one UTC day may total (required with a payer). | |
| MCP_REGISTER_PAY_MAX_PER_CALL | No | The most one payment may be, in the asset's atomic units (required with a payer). | |
| MCP_REGISTER_PAY_ALLOW_MAINNET | No | Set to 1 to pay on a network that is not a testnet; off by default. | |
| MCP_REGISTER_AUTHORITY_KEY_FILE | No | The authority key file. | $MCP_REGISTER_HOME/authority-key.jwk |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_log_keyA | Return the public half of one of this server's keys (ES256, 64 bytes x‖y, as hex, base64 and an SPKI PEM) and where it lives, creating it on first use. which: "log" (the default) is the key that owns your data log: a grant issuer names it in the grant's grantData, and a grant naming any other key cannot carry statements this server signs. which: "authority" is the requester's key that owns your authority log and signs the grants issue_grant makes. Never returns private key material. |
| register_statementA | Sign a payload with the log key and register it under your Forestrie-Grant. Takes the payload bytes (inline base64 or a file path, up to canopy's 4 MiB statement limit) and its content type. The signed statement is saved before it is sent, so the returned content hash always names it, even if the request fails. A payload path may not point at the log key or inside this server's home. Registration is accepted, not yet sequenced: call check_registration next. |
| check_registrationA | One status check for a registration, by its content hash: pending (not yet sequenced; retry after the given seconds), awaiting_seal (sequenced, entry id known, receipt not yet sealed — sealing takes minutes, and never happens until delegate_sealing has run for the log), or sealed (the receipt is saved and its path returned). Any other answer from canopy is reported as a problem with its reason. canopy answers a statement it never received exactly like a pending one, so after ten minutes of pending this says so. Does not sleep; pace the retries yourself. |
| verify_registrationA | Verify a sealed registration's receipt over the statement you registered, with @forestrie/mcp-verify's verifier, and return its four-question answers unaltered. By default the trust root is this server's own log key, the root of your data log; verifying never creates a key. Pass a known accumulator (from @forestrie/mcp-resolve's fetch_accumulator) to use a root that can also answer split-view. |
| delegate_sealingA | Authorise the operator's sealer to publish checkpoints for your data log, signed with the log key. Without it entries sequence but are never sealed. If the coordinator has not learned the log's public root, this calls canopy's prepare with the same grant first. Run once per log; the delegation lasts until the returned expiresAt. With as: "authority" it does the same for your authority log, signed with the authority key, so the child grants you register there get sealed. |
| issue_grantA | As the requester, sign a child grant with this server's authority key: a data-log creation grant under your authority log (named by your authority grant, FORESTRIE_AUTHORITY_GRANT), naming the performer's log key (by default this server's own) and sized with maxHeight, the batch ceiling canopy prices it by. Saves the grant under a fresh child log id; nothing is sent. Call register_grant next. |
| register_grantA | Register a child grant with canopy (POST /register/{R}/grants, your authority grant as the parent) and follow it to its receipt; call it again with the same logId to resume until it reports complete. If canopy answers 402 and a payer is configured, it pays within the server's hard caps (per call, per UTC day, one network and asset, testnet only by default) and reports any cap that refuses. With no payer it returns the payment requirements: pay them from your own x402 wallet and call again with payment set to the X-PAYMENT value. Every payment for a grant carries a nonce derived from that grant, so retries and overlapping calls can never pay for it twice. When complete it returns the completed grant for delegate_sealing and register_statement. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| register | Walk through checking the key and grant, delegating sealing, registering, waiting for the seal, verifying and keeping the receipt. |
| audit | Explain which of the four trust questions a receipt answers under each trust root, and how to choose a root. |
| issue-and-pay | As the requester, size and sign a child grant, register it with canopy, pay its 402 within the caps or relay the payment, and hand the completed grant to the performer. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 7 tools
Most tools have clearly distinct purposes (key retrieval, signing, delegation, grant issuance). However, check_registration and verify_registration both operate on a registration's validity/status, and register_statement vs register_grant both 'register' an object, so a few pairs require careful reading of the descriptions to distinguish.
All seven tools follow a consistent verb_noun snake_case convention (check_registration, register_statement, issue_grant, register_grant, etc.). No camelCase or stylistic mixing.
Seven tools is well-scoped for a registration/grant lifecycle server, with each tool earning its place across key, statement, grant, and sealing operations. No padding or redundancy.
The core lifecycle (sign/register -> check -> verify, plus grant issue/register and sealing delegation) is well covered with no obvious dead ends. Minor gaps exist: no listing of pending registrations or grants, and no delete/revoke operations.