quorum について
Quorumは、複数エージェントによる提案、共有討議、投票、合意結果を扱うMCPサーバーです。社会選択アルゴリズムを設定し、改変できない証明付きの意思決定記録を必要とするオーケストレーター向けです。
主な機能
- 01提案の作成と共有ブラックボード
- 02追記式コンテキストと順序付き履歴
- 03複数の投票・集約アルゴリズム
- 04定足数と期限に基づく決議
- 05証明付きで改ざん防止された意思決定履歴
- 06Telineaへのトレース送信
活用シーン
- 01提案に対するエージェントの投票収集
- 02投票前の分析共有
- 03選択した合意アルゴリズムの適用
- 04監査可能な意思決定記録の確認
MCP 対応
QuorumはMCPクライアントに、提案、書き込み、読み取り、投票、決議、履歴、アカウント登録のツールを提供します。提案イベントに証明を付与し、Telineaへトレースを送信できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://quorum-mcp.terradev.cloud/mcpclaude mcp add --transport http terradev-cloud-quorum https://quorum-mcp.terradev.cloud/mcp{"mcpServers":{"terradev-cloud-quorum":{"type":"http","url":"https://quorum-mcp.terradev.cloud/mcp"}}}Cursor で開く{"servers":{"terradev-cloud-quorum":{"type":"http","url":"https://quorum-mcp.terradev.cloud/mcp"}}}VS Code で開く{"mcpServers":{"terradev-cloud-quorum":{"type":"http","url":"https://quorum-mcp.terradev.cloud/mcp"}}}{"mcpServers":{"terradev-cloud-quorum":{"serverUrl":"https://quorum-mcp.terradev.cloud/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
7| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| api_key | string | はい | あなたが選択する Quorum API キーです。propose で提示し、保存されることはありません。 |
| telinea_key | string | はい | あなたの Telinea API キーです。暗号化して保存し、span のプッシュ認証に使用します。 |
詳細
Quorum
共有ブラックボードを使った、証明付きマルチエージェント合意形成のための MCP サーバーです。
オーケストレーターが提案を開始し、参加するエージェントが共有ブラックボードにコンテキストを書き込み、理由を添えて投票します。Quorum は社会選択理論の文献に基づく原則的な集約アルゴリズムを適用します。また、提案、書き込み、投票、結果のすべてのステップがStampによって証明され、Telinea へトレースされます。 記録は不変で、改ざんが検知可能であり、独立して検証できます。
ホステッドエンドポイント(サインイン不要、公開):
https://quorum-mcp.terradev.cloud/mcp
理由
LLM エージェント間の多数決は、意見の分かれる問題では機能しません。重複するデータでトレーニングされたエージェントは、体系的な盲点を共有しているためです。エージェントは、コンドルセ陪審定理が前提とする独立した投票者ではありません。また、エージェントが共同で決定を下す場合でも、誰が投票したか、何を述べたか、どのコンテキストに基づいて作業したかといった、決定のプロセスは見えません。
Quorum は、アルゴリズム、状態、来歴を組み合わせた完全なプリミティブです。
ツール
-
register— 初回のみのアカウント設定です。api_key(自分で選ぶ Quorum キー)をtelinea_keyに紐付けます。Telinea キーは、Quorum キーから導出したキーで暗号化して保存されます(AES-256-GCM、HKDF)。Quorum キー自体は保存されません。以降、提案に関する各スパンは、標準的な OTLP ベアラ認証を使い、あなたの Telinea キーで送信されます。 -
propose— 提案を開始します。name(提案 ID になります)、question、voters(想定される参加者 ID)、deadline_minutesを指定します。 任意項目:api_key(register で取得。スパンのストリーミング用に提案を Telinea アカウントに紐付けます。匿名で使用する場合は省略します)、namespace(テナントのプレフィックス。ID はns:nameとなるため、異なるチームが名前を重複させずに再利用できます)、options(デフォルトは["yes","no"])、algorithm(デフォルトはapproval)、quorum(投票者の最小割合。デフォルトは 100)、threshold(超多数の割合。デフォルトは 66.67)、description。提案 ID、作成証明 ID、期限、ブラックボード URI を返します。 -
write— 提案のブラックボードにkey/valueを追記します。authorは任意です。書き込みは置き換えられず、追記されます。順序を含む完全な履歴が保持され、証明されます。 -
read— ブラックボードを読み取ります。すべての書き込みを、タイムスタンプ、作成者、証明 ID とともに順番に取得します。keyによる絞り込みは任意です。投票前の審議記録です。 -
vote— 想定されたvoterID から投票し、任意でreasoning(証明付き記録に保存されますが、結果には影響しません)を付けます。投票の形式はアルゴリズムによって異なります。下記を参照してください。重複投票と期限後の投票は、構造化エラーとともに拒否されます。 -
resolve— アルゴリズムを適用して結果を証明します。定足数に達した時点、または期限後に呼び出せます。定足数に達した状態で期限が過ぎた場合も、自動的に実行されます。冪等です。コンドルセ・サイクルや超多数のしきい値未達の場合は、ステータスがunresolvedのco_winnersを返します。真の曖昧さを明示し、隠しません。 -
history— 完全な証明付き記録です。作成、すべての書き込み、理由を含むすべての投票、結果を取得します。任意のfilter:all | writes | votes | outcome。コンプライアンス用の成果物です。
アルゴリズム
| アルゴリズム | 投票形式 | 用途 |
|---|---|---|
plurality | 選択肢の文字列 | 二択の決定のみ |
approval | 選択肢または選択肢のリスト | デフォルト。 戦略的な誘因がなく、弱い選好や複数の選好に対応 |
borda | すべての選択肢の順位付け | 選択肢が 3~5 個の場合。幅広く受け入れられる選択肢を明らかにします |
condorcet | 順位付けまたは単一の選択肢 | 合理的な選好の集約。サイクルは co_winners として返されます |
opinion_pool | 合計が 1 になる {option: probability} | 実際の確率的信念。完全な分布を返します |
supermajority | 選択肢の文字列 | 50% を超える支持が必要な重大な決定(threshold を設定) |
黒板
LLM の合意形成が失敗する原因は、アルゴリズムではなく情報の不足であることがよくあります。エージェントが個別に投票しているためです。黒板は、1 つの提案に限定された共有作業メモリです。エージェントは分析を書き込み、互いの調査結果を読み、その情報を踏まえて投票します。先に書き込み、後から読み込む順序と、期限前の投票を変更できない仕組みが、同調バイアスへの対策です。
トレーシング
各提案は 1 つの Telinea トレースです。ルートスパン(proposal)は propose で開始し、resolve または期限切れで終了します。その継続時間が審議時間です。各書き込み、投票、解決は、Stamp のアテステーション ID とともにリアルタイムで子スパンとして出力されます。ルートのステータスは、OK が決定済み、UNRESOLVED が曖昧、ERROR が定足数に達せず期限切れです。
スパン ID は決定論的(提案 ID とイベント連番を使った uuid5)なので、リプレイや再起動後も冪等性が保たれます。プッシュは応答を待たずに実行され、安全側に動作します。テレメトリーが投票を妨げることはありません。
認証はアカウントごとに行います。スパンは register で登録された Telinea キーを使ってプッシュされるため、取り込み時に正しいアカウントに関連付けられます。キーは暗号化して保存されます(Quorum キーから HKDF で導出した鍵による AES-256-GCM。Quorum キー自体は保存されません)。サーバー側で保持する QUORUM_DATA_KEY を使って提案ごとに再暗号化することで、Quorum キーを再提示しなくても、再起動後にスパンを認証できます。データベースのダンプからは暗号文しか確認できません。
設定項目:TELINEA_INGEST_URL(デフォルトは
https://ingest.terradev.cloud/v1/traces)、TELINEA_WORKSPACE_ID、
TELINEA_PROJECT_ID、TELINEA_DISABLED=1、QUORUM_DATA_KEY、
QUORUM_ACCOUNTS(アカウントストアのパス。デフォルトは
~/.quorum/accounts.json)。
HTTP トランスポート
| エンドポイント | メソッド | 説明 |
|---|---|---|
/mcp | POST | JSON-RPC 2.0 — 単一またはバッチ。通知には 202 を返します |
/mcp | GET | SSE キープアライブチャネル |
/ | GET/POST | サービスの識別情報/MCP エイリアス |
/health | GET | {"status":"ok"} |
/v1/info | GET | 自己記述型のサービス情報(ツール、認証、スパン、ドキュメント) |
/.well-known/agent.json | GET | エージェントカード |
/.well-known/oauth-protected-resource | GET | RFC 9728 — パブリック、認証不要 |
asyncio.Semaphore により、同時実行できる POST /mcp は最大 100 件に制限されます。
レート制限は提案ごとです。write と vote は、提案 ID ごとに QUORUM_PROPOSAL_RATE 件/分に制限されます(デフォルトは 120 件)。そのため、1 つの高負荷な提案がほかの提案を妨げることはありません。Caddy のエッジ側にある IP ごとのゾーンは、あくまで大まかな保護策です。
アテステーションはキューイングして集約されます。同時に発生したイベントでは、イベントごとに問い合わせるのではなく、キューの排出バッチごとに 1 回 NTP サンプルを共有します。それでも各イベントには、固有の ID と個別のペイロードハッシュを持つ独自の Stamp レコードが割り当てられるため、スループットが NTP との往復時間に左右されることはありません。
状態
イベントソーシング方式です。提案ごとに 1 つの追記専用 JSONL ファイルが
~/.quorum/proposals の下に保存されます(QUORUM_DATA_DIR で変更できます)。名前空間付きの提案は名前空間ごとのサブディレクトリ
(proposals/<ns>/<name>.jsonl)に保存されます。ログそのものが履歴です。history
は、ツールが追記するものと同じファイルをフィルタリングして読み取ります。書き換えや削除は行われません。
セルフホスティング
git clone https://github.com/theoddden/quorum-mcp.git
cd quorum-mcp
docker compose up -d --build
DNS がホストを指すようになれば、Caddy が TLS を処理します。deploy/Caddyfile を参照してください。
ライセンス
Copyright 2026 theoddden. Apache License, Version 2.0 の下でライセンスされています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。