← The evidence ledger
Evidence row 292279
Observed , by probe.mcp/1.
- Kind
- mcp.tools
- About
- endpoint babcdbcc-e772-49aa-ba90-d7375be8124b
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- 938dce996b5483bdef000ce87643dc5a53e55f1d4e5973aa7010c731e4e3e9c8
- Leaf
- 0xf81df718b13d70af10e230344eaa7d317d7c3b5970f06baebd12f80d606dd238
What was observed
{
"count": 7,
"tools": [
{
"description": "The complete attested record of a proposal in chronological order: creation, every blackboard write, every vote with reasoning, the outcome. Optional filter: all | writes | votes | outcome.",
"inputSchema": {
"properties": {
"filter": {
"description": "Default all.",
"enum": [
"all",
"writes",
"votes",
"outcome"
],
"type": "string"
},
"proposal_id": {
"type": "string"
}
},
"required": [
"proposal_id"
],
"type": "object"
},
"name": "history"
},
{
"description": "Open a new proposal: a question, named options, expected voter identities, an aggregation algorithm, a deadline, and a quorum threshold. Returns the proposal id, the creation attestation, and the deadline. All later operations key off the proposal id.",
"inputSchema": {
"properties": {
"algorithm": {
"description": "Aggregation algorithm. Default approval -- robust general-purpose choice with no strategic incentive.",
"enum": [
"plurality",
"borda",
"condorcet",
"approval",
"opinion_pool",
"supermajority"
],
"type": "string"
},
"api_key": {
"description": "Optional. Your Quorum API key (from register). Binds the proposal to your account so its spans push to your Telinea. Omit for anonymous use -- everything works, no spans.",
"type": "string"
},
"deadline_minutes": {
"description": "Minutes until voting closes.",
"type": "number"
},
"description": {
"description": "Optional context for the audit trail.",
"type": "string"
},
"name": {
"description": "Human-readable proposal id, e.g. pr-review-2026-09-18. Letters, digits, . _ - only; becomes the key for all subsequent calls.",
"type": "string"
},
"namespace": {
"description": "Optional tenant namespace. The proposal id becomes '<namespace>:<name>' -- different teams can reuse names without colliding. Same charset as name.",
"type": "string"
},
"options": {
"description": "Named options. Default [\"yes\",\"no\"].",
"items": {
"type": "string"
},
"type": "array"
},
"question": {
"description": "The thing being decided.",
"type": "string"
},
"quorum": {
"description": "Min percent of expected voters that must vote before resolution. Default 100.",
"type": "number"
},
"threshold": {
"description": "Supermajority only: required share of votes cast, percent. Default 66.67.",
"type": "number"
},
"voters": {
"description": "Expected voter identities. Only these may vote; missing voters at resolution are recorded abstained.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"name",
"question",
"voters",
"deadline_minutes"
],
"type": "object"
},
"name": "propose"
},
{
"description": "Read a proposal's blackboard: every write in order with timestamp, author, and attestation id -- the complete deliberation record, or filtered to one key.",
"inputSchema": {
"properties": {
"key": {
"description": "Optional: only entries with this key.",
"type": "string"
},
"proposal_id": {
"type": "string"
}
},
"required": [
"proposal_id"
],
"type": "object"
},
"name": "read"
},
{
"description": "OPTIONAL one-time setup -- only needed if you want proposal telemetry (OTLP spans) pushed to your Telinea account. Call once before propose: it binds an api_key you choose to your Telinea API key. Afterwards, pass the same api_key on propose and every span for that proposal is pushed to your Telinea with standard OTLP bearer auth. Storage: the Telinea key is sealed with AES-256-GCM under a key derived from your api_key (HKDF-SHA256, per-account salt); only sha256(api_key) is kept as the lookup id, so neither key is ever stored in the clear. Re-registering with the same api_key rotates the stored Telinea key. Skip this tool entirely for anonymous use -- propose works without an api_key, just with no span streaming.",
"inputSchema": {
"properties": {
"api_key": {
"description": "Your Quorum API key -- chosen by you, presented on propose, never stored.",
"type": "string"
},
"telinea_key": {
"description": "Your Telinea API key -- stored encrypted, used to authenticate span pushes.",
"type": "string"
}
},
"required": [
"api_key",
"telinea_key"
],
"type": "object"
},
"name": "register"
},
{
"description": "Compute and attest the outcome once quorum is met (or the deadline has passed). Idempotent: resolving twice returns the recorded outcome. Condorcet cycles and missed supermajority thresholds return co_winners with status unresolved rather than an arbitrary tiebreak.",
"inputSchema": {
"properties": {
"proposal_id": {
"type": "string"
}
},
"required": [
"proposal_id"
],
"type": "object"
},
"name": "resolve"
},
{
"description": "Submit a vote from an expected voter identity, with optional reasoning stored in the attested record. Vote shape depends on the algorithm: plurality/supermajority take an option string; approval takes an option or list of options; borda takes a ranking of all options; condorcet takes a ranking or a single option; opinion_pool takes a probability distribution over options. Duplicates and post-deadline votes are rejected.",
"inputSchema": {
"properties": {
"proposal_id": {
"type": "string"
},
"reasoning": {
"description": "Free-text rationale, kept in the audit trail.",
"type": "string"
},
"value": {
"description": "Ballot in the algorithm's format."
},
"voter": {
"type": "string"
}
},
"required": [
"proposal_id",
"voter",
"value"
],
"type": "object"
},
"name": "vote"
},
{
"description": "Append a key-value entry to a proposal's blackboard. Any agent may write; writes are appended, never replaced -- the full ordered history is preserved and attested.",
"inputSchema": {
"properties": {
"author": {
"description": "Optional author identity, recorded and attested.",
"type": "string"
},
"key": {
"description": "Key other agents use to filter this entry on read.",
"type": "string"
},
"proposal_id": {
"type": "string"
},
"value": {
"description": "Any JSON value."
}
},
"required": [
"proposal_id",
"key",
"value"
],
"type": "object"
},
"name": "write"
}
]
}What the leaf hashes
{"body":"938dce996b5483bdef000ce87643dc5a53e55f1d4e5973aa7010c731e4e3e9c8","id":292279,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793048689223834,"prev":null,"subject":"babcdbcc-e772-49aa-ba90-d7375be8124b","subject_kind":"endpoint"}Proof
Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (296695 rows).
- 0xf81e25160f7eecdd88a7fdc97b4e7fcb39407f6e35bbcdcbc969aaf75eca0825
- 0x9bb985f4f8a44a563b285cec3d9e70e704bba50fbff136c0a1bf69dc0cf35fe2
- 0x3d3e54811700bb3d026c29166d1ae03ab6674efe15acbe62299a5bcd644631e0
- 0x2f115b369fb443b6c011930899827d4e67d51f43b63560a4148ed27a0d2b8ca4
- 0x23e5d6e3fcbfa7c93345811d794b11dd27b953581d82e999298f9d6927a547a1
- 0xe86505a8625eb1e67e0671ffa79391d1ec2075b2a52d413fb12e155bfb83c1d6
- 0x05c3ef9d3a3071897fe358535fa7344b190c91d592314637de4df7bb61d3e040
- 0x85775a15fd943726a8fb65c7fce73fa4993a73a3c9599164bc5682f2e54a52b6
- 0x2346b54e8961351591237aa6905edcee2e14f9d9d4a3f3ccc65c57e060aad838
- 0x0eea714eaa5097f3236c62c5eab0dbd64a4b080a83c9a924990a89ae274e7c4e
- 0x0836eb686ada9beddba0f76357ec59493359d2a7c51aa5c4a31d3cfe9873ea74
- 0xf7eba200f6f1012d700fcc53fc6d57dcafd1019c920b1030d42fa21d4af95d94
- 0x694eb701ea36a0e3dcde192253ab85a618738bdc1e3a6e582e6f8bf9647f7a6a
- 0x44945ea9ad8b24e723ad5a8fd6d014024a49531783f74ff9229c2ab6930e84c8
- 0x68d296b1e00b4899fb83c3fba36fffaefa311eac2903067dbebfe776a12b4a9a
- 0x5fb5dda563336cd1bc1b9f44c52b76237ae72ed2145cb9290f39f304ca7dd678
- 0x74a0a08e4e7ab9aa5bfbead33dec7e1c7e8e364cff69a63720d764bbe987aadc
- Day root
- 0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
- Chained
- 0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
- Published
- On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae