Independent, signed check of AI work: math, quotes, sources, links, code. Public verifiable log.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Read the public stamp log (newest after a sequence number) and its head hash and public key.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http countersign https://countersign.llpro.ai/mcp
Read the public stamp log (newest after a sequence number) and its head hash and public key.
| Argument | Type | Description |
|---|---|---|
| after | integer | |
| limit | integer |
{
"type": "object",
"properties": {
"after": {
"type": "integer"
},
"limit": {
"type": "integer"
}
}
}Use when you need an independent, signed check of work you or another agent produced (a report, calculation, summary, filing draft or code) before relying on it or handing it on. Countersign re-computes arithmetic, looks up quotes and values in the cited sources, opens links and parses code, then returns a signed stamp (pass, fail or inconclusive) saying exactly what is wrong, with time and method. The stamp is kept in a public log. It never checks work it produced.
| Argument | Type | Description |
|---|---|---|
| kind | string | |
| claims | array | Optional explicit items: {type:'arithmetic', expression, claimed} or {type:'quote', source_url, quote} or {type:'value', source_url, value} |
| output* | string | The work to check, as text (max 100000 chars). Equations written as '12 * 4 = 48' are re-computed. |
| private | boolean | If true the public log shows only a hash of each finding's detail; you still get the full detail |
| sources | array | Optional cited sources: {url, quote?} |
| language | string | For code: python or json get a syntax check |
| producer* | object | Who made the work: {agent_id, model}. Required; used for the independence rule. |
{
"type": "object",
"required": [
"output",
"producer"
],
"properties": {
"kind": {
"enum": [
"report",
"calculation",
"summary",
"filing_draft",
"code",
"other"
],
"type": "string"
},
"claims": {
"type": "array",
"items": {
"type": "object"
},
"description": "Optional explicit items: {type:'arithmetic', expression, claimed} or {type:'quote', source_url, quote} or {type:'value', source_url, value}"
},
"output": {
"type": "string",
"description": "The work to check, as text (max 100000 chars). Equations written as '12 * 4 = 48' are re-computed."
},
"private": {
"type": "boolean",
"description": "If true the public log shows only a hash of each finding's detail; you still get the full detail"
},
"sources": {
"type": "array",
"items": {
"type": "object"
},
"description": "Optional cited sources: {url, quote?}"
},
"language": {
"type": "string",
"description": "For code: python or json get a syntax check"
},
"producer": {
"type": "object",
"required": [
"agent_id"
],
"properties": {
"model": {
"type": "string"
},
"agent_id": {
"type": "string"
}
},
"description": "Who made the work: {agent_id, model}. Required; used for the independence rule."
}
}
}Confirm a Countersign stamp is real: give a stamp id (and optionally the work, to confirm the stamp is for exactly that text). Returns whether it is in the public log and whether its hash and signature are valid.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| output | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"output": {
"type": "string"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 7, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.