Voting Mcp

io.github.HrishiKabra由 GitHub 帳號 HrishiKabra 發布v0.1.3更新於 Oct 24, 2026

Social-choice voting rules (Borda, Copeland, Condorcet, STV, opinion pool) as MCP tools.

已驗證STDIO僅桌面資料與分析AI 與機器學習

概覽

AI 產生的概覽

將 Borda、Copeland、Condorcet、STV、意見池等社會選擇投票規則做成 MCP 工具,用來彙整排序或贊成票。

可以做什麼
提供可呼叫的工具,接收候選人加選票的 profile,回傳包含完整共同當選者集合、經打破平手後的單一當選者、排名、各候選人分數與說明的 Result。規則包括 borda、copeland、condorcet、approval、stv、opinion_pool、plurality、majority,以及依 rule 列舉分派的 aggregate_rule。打破平手是明確參數(預設字典序、none 或帶種子的隨機)。另有基準腳本彙整多個 LLM 的集成結果,並將各規則與簡單多數票比較。
適用情境
適合助理或多代理系統需要合併多個投票者或模型偏好、而不只是計算第一選擇票的情境,例如彙整 LLM 集成結果或進行社會選擇實驗。基準腳本用於在推理資料集上衡量某規則是否優於多數票。
執行需求
以 PyPI 套件 voting-mcp 透過 stdio 在本機執行,通常用 uvx 啟動,或從原始碼以 uv 執行。未宣告帳號、API 金鑰、環境變數或標頭。選用的基準需要 bench 額外相依,並透過 OpenRouter 使用相容 OpenAI 的用戶端,還需要網路存取以取得資料集與呼叫 API。
安裝前請注意
此伺服器自稱純運算,無網路、無檔案寫入、無密鑰。基準會透過 OpenRouter 呼叫外部 API,先印出費用估算並在未確認時停止,原始回應快取於 bench/results/raw。將儲存庫放在 iCloud 同步資料夾可能導致可編輯安裝失效。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Voting Mcp,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

voting-mcp

Principled social-choice aggregation as MCP tools — with a benchmark that measures the accuracy lift over naive majority vote.

Almost every multi-agent system aggregates votes with Counter(votes).most_common(1), throwing away preference order and confidence. voting-mcp ships the real rules (Borda, Copeland, Condorcet, approval, STV, linear opinion pool) as callable MCP tools — each with its known axiomatic behavior and explicit, documented tie-breaking — plus a reproducible benchmark that aggregates a diverse ensemble of LLMs on a reasoning set and reports accuracy with bootstrap confidence intervals.

The server is pure compute: stdio transport, no network, no file writes, no secrets — clean against the OWASP MCP Top 10 by construction.

Install

sh
# run the server directly (once published)uvx voting-mcp
# or from sourcegit clone https://github.com/HrishiKabra/voting-mcp && cd voting-mcpuv syncuv run python -m voting_mcp.server

Add it to an MCP client (e.g. Claude Desktop claude_desktop_config.json):

json
{  "mcpServers": {    "voting": { "command": "uvx", "args": ["voting-mcp"] }  }}

Tools

Every tool takes a profile ({candidates, ballots}) and returns a Result with the full co-winner set (winners, so ties are never hidden), the single tie-broken winner (or null when none exists), a ranking, per-candidate scores, and a note.

ToolBallotsNotes
bordarankingspositional; Condorcet-inconsistent, clone-sensitive
copelandrankingsCondorcet-consistent pairwise (+1 win, +0.5 tie)
condorcetrankingsreturns the pairwise winner or an explicit no-winner on a cycle
approvalapproval setsmost-approved wins
stvrankingssingle-winner instant-runoff; clone-resistant
opinion_pooldistributionslinear pool — preserves confidence, not an argmax vote
pluralityrankingsbaseline (most first choices)
majorityrankingsstrict >50% or no winner
aggregate_ruleanydispatch by a rule enum

Tie-breaking is an explicit parameter (lexicographic default, none, or seeded random).

Benchmark

Aggregate an ensemble of 5 models (one OpenAI-compatible client via OpenRouter) on ARC-Challenge and compare each rule to the naive majority vote:

sh
uv sync --extra benchuv run python -m bench.fetch_arc --limit 200# prints a cost estimate and STOPS; add --yes to actually call the API, --mock for a free dry runuv run python -m bench.run_ensemble --dataset bench/datasets/arc_challenge.jsonl --limit 200 --yesuv run python -m bench.compare --dataset bench/datasets/arc_challenge.jsonl --limit 200

Every raw response is cached under bench/results/raw/; re-runs never re-call the API, so aggregation tweaks are free.

Results

5-model ensemble (gpt-4o-mini · gemini-2.5-flash-lite · deepseek-v3 · claude-haiku-4.5 · glm-4.7), n = 200, bootstrap 95% CI. Two datasets of different difficulty; full write-up and both plots in RESULTS.md.

MMLU-Pro (hard, baseline 73.5%) — the informative case:

RuleAccuracy95% CIpaired Δ vs majorityp
opinion_pool0.755[0.695, 0.815]+0.020 [−0.011, +0.052]0.225
majority_vote (baseline)0.735[0.679, 0.788]——
approval0.701[0.640, 0.757]−0.035 [−0.063, −0.006]0.014
stv0.693[0.630, 0.750]−0.043 [−0.072, −0.015]0.002
copeland0.647[0.580, 0.710]−0.088 [−0.127, −0.052]<0.001
condorcet0.620[0.550, 0.685]−0.115 [−0.155, −0.079]<0.001
majority (strict)0.590[0.520, 0.655]−0.145 [−0.189, −0.105]<0.001
borda0.472[0.405, 0.540]−0.263 [−0.323, −0.206]<0.001

Δ is tested with a paired bootstrap on the per-question accuracy difference (same questions, so shared difficulty cancels), not by eyeballing the independent CIs.

[MMLU-Pro]

The finding (honest): the value isn't "fancy voting beats majority." It's that the confidence-preserving rule (opinion_pool) wins when the crowd is uncertain (+2.0pp, the only rule above baseline — suggestive but not significant at n=200, paired p=0.225), while forcing the distributions into full rankings actively hurts, significantly — every ranking rule is below baseline at paired p≤0.014, and borda collapses to 0.472 because with 10 options the tail of the ranking is mostly noise. Aggregate the confidence; don't throw it away. On ARC-Challenge (baseline 96.8%, near-ceiling) nothing separates — no rule differs significantly. See RESULTS.md.

Develop

sh
uv run pytest -quv run ruff check .uv run mypy --strict src# exercise the tools in the MCP Inspector:npx @modelcontextprotocol/inspector uv run python -m voting_mcp.server

Note: if you keep this repo under an iCloud-synced folder (e.g. ~/Desktop), iCloud can spawn duplicate .pth files that intermittently break the editable install. Tests use pythonpath=src; run the server with PYTHONPATH=src if an import fails, or move the repo off the synced folder.

Related research

The choice of rules here grows out of the author's work on voting-rule design: Optimizing Voting Rules for Social Welfare and Beyond (AAMAS). That line of work asks which aggregation rules maximize welfare given how voters actually express preferences; this project applies the same lens to LLM ensembles — where the benchmark's answer is that confidence-preserving aggregation (the linear opinion pool) is what pays off, and forcing cardinal beliefs into ordinal rankings destroys signal.

License

MIT

來源:README.md,提交 1c7fb21

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.1.3最新Sep 16, 2026

評分

已滿足適用檢查項的 40%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。