Serveur MCP

quorum

io.github.terradev-cloud/quorum
Infrastructure MCP et agents Public et accessible MCP 2026-07-28

Ce que fait ce MCP

Coordinates attested multi-agent proposals through voting, shared blackboards, quorum resolution, and historical records.

history
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.
Schéma d’entrée
{'type': 'object', 'required': ['proposal_id'], 'properties': {'filter': {'enum': ['all', 'writes', 'votes', 'outcome'], 'type': 'string', 'description': 'Default all.'}, 'proposal_id': {'type': 'string'}}}
propose
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.
Schéma d’entrée
{'type': 'object', 'required': ['name', 'question', 'voters', 'deadline_minutes'], 'properties': {'name': {'type': 'string', 'description': 'Human-readable proposal id, e.g. pr-review-2026-09-18. Letters, digits, . _ - only; becomes the key for all subsequent calls.'}, 'quorum': {'type': 'number', 'description': 'Min percent of expected voters that must vote before resolution. Default 100.'}, 'voters': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Expected voter identities. Only these may vote; missing voters at resolution are recorded abstained.'}, 'api_key': {'type': 'string', '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.'}, 'options': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Named options. Default ["yes","no"].'}, 'question': {'type': 'string', 'description': 'The thing being decided.'}, 'algorithm': {'enum': ['plurality', 'borda', 'condorcet', 'approval', 'opinion_pool', 'supermajority'], 'type': 'string', 'description': 'Aggregation algorithm. Default approval -- robust general-purpose choice with no strategic incentive.'}, 'namespace': {'type': 'string', 'description': "Optional tenant namespace. The proposal id becomes '<namespace>:<name>' -- different teams can reuse names without colliding. Same charset as name."}, 'threshold': {'type': 'number', 'description': 'Supermajority only: required share of votes cast, percent. Default 66.67.'}, 'description': {'type': 'string', 'description': 'Optional context for the audit trail.'}, 'deadline_minutes': {'type': 'number', 'description': 'Minutes until voting closes.'}}}
read
Read a proposal's blackboard: every write in order with timestamp, author, and attestation id -- the complete deliberation record, or filtered to one key.
Schéma d’entrée
{'type': 'object', 'required': ['proposal_id'], 'properties': {'key': {'type': 'string', 'description': 'Optional: only entries with this key.'}, 'proposal_id': {'type': 'string'}}}
register
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.
Schéma d’entrée
{'type': 'object', 'required': ['api_key', 'telinea_key'], 'properties': {'api_key': {'type': 'string', 'description': 'Your Quorum API key -- chosen by you, presented on propose, never stored.'}, 'telinea_key': {'type': 'string', 'description': 'Your Telinea API key -- stored encrypted, used to authenticate span pushes.'}}}
resolve
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.
Schéma d’entrée
{'type': 'object', 'required': ['proposal_id'], 'properties': {'proposal_id': {'type': 'string'}}}
vote
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.
Schéma d’entrée
{'type': 'object', 'required': ['proposal_id', 'voter', 'value'], 'properties': {'value': {'description': "Ballot in the algorithm's format."}, 'voter': {'type': 'string'}, 'reasoning': {'type': 'string', 'description': 'Free-text rationale, kept in the audit trail.'}, 'proposal_id': {'type': 'string'}}}
write
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.
Schéma d’entrée
{'type': 'object', 'required': ['proposal_id', 'key', 'value'], 'properties': {'key': {'type': 'string', 'description': 'Key other agents use to filter this entry on read.'}, 'value': {'description': 'Any JSON value.'}, 'author': {'type': 'string', 'description': 'Optional author identity, recorded and attested.'}, 'proposal_id': {'type': 'string'}}}
Ajouté
history
28 September 2026 02:40
Ajouté
resolve
28 September 2026 02:40
Ajouté
vote
28 September 2026 02:40
Ajouté
read
28 September 2026 02:40
Ajouté
write
28 September 2026 02:40
Ajouté
propose
28 September 2026 02:40
Ajouté
register
28 September 2026 02:40