mcpField
V
voting-mcp

voting-mcp

本地服务
github.comAI 与智能体017 周前更新

关于 voting-mcp

voting-mcp 为多 Agent 系统提供社会选择投票规则工具,包括排序投票、审批投票和意见池。它还附带可复现基准测试,用于比较聚合规则与简单多数投票的准确率。

主要功能

  1. 01提供多种投票聚合规则
  2. 02返回并列赢家、排名与分数
  3. 03支持明确配置平局处理
  4. 04基准测试规则准确率

适用场景

  1. 01聚合多个 Agent 的偏好或信心分布
  2. 02比较不同投票规则的结果
  3. 03评估规则相对简单多数投票的表现

MCP 相关

这是一个通过 stdio 传输的纯计算 MCP 服务,以工具形式提供投票聚合规则;不使用网络、不写入文件,也不需要密钥。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"hrishikabra-voting": {
"command": "uvx",
"args": [
"voting-mcp"
]
}
}
}
启动命令uvx voting-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypivoting-mcp0.1.3

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

voting-mcp

基于 MCP 工具的原则性社会选择聚合——并通过基准测试衡量相较于简单多数投票的准确率提升。

几乎所有多 Agent 系统都用 Counter(votes).most_common(1) 来聚合投票,丢弃了偏好顺序和置信度。voting-mcp 将真正的规则(Borda、Copeland、Condorcet、approval、STV、linear opinion pool)作为可调用的 MCP 工具提供——每种规则都具有已知的公理性质和明确记录的平局处理方式——并提供可复现的基准测试:在推理数据集上聚合多样化的大模型集成的结果,并报告准确率及自助法置信区间。

该服务纯粹执行计算:使用 stdio 传输,不联网、不写入文件、不涉及机密——从设计上符合 OWASP MCP Top 10 的要求。

安装

# run the server directly (once published)
uvx voting-mcp

# or from source
git clone https://github.com/HrishiKabra/voting-mcp && cd voting-mcp
uv sync
uv run python -m voting_mcp.server

将其添加到 MCP 客户端(例如 Claude Desktop 的 claude_desktop_config.json):

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

工具

每个工具都接收一个 profile({candidates, ballots}),并返回一个 Result,其中包含完整的共同获胜者集合(winners,因此平局绝不会被隐藏)、经过单个平局处理后选出的获胜者 winner(如果没有则为 null)、排名 ranking、各候选人的得分 scores,以及说明 note。

工具选票说明
borda排名位置计分;与 Condorcet 规则不一致,对克隆敏感
copeland排名符合 Condorcet 规则的两两比较(胜 +1,平 +0.5)
condorcet排名返回两两比较的获胜者,或在出现循环时明确返回无人获胜
approval认可集合获得最多认可者获胜
stv排名单一获胜者即时决选;抗克隆
opinion_pool分布线性池化——保留置信度,而非采用 argmax 投票
plurality排名基线(第一选择最多者获胜)
majority排名严格超过 50% 才获胜,否则无人获胜
aggregate_rule任意根据 rule 枚举值分派

平局处理是显式参数(默认为 lexicographic,也可以设为 none 或带种子的 random)。

基准测试

在 ARC-Challenge 上聚合由 5 个模型组成的集成(通过 OpenRouter 使用一个兼容 OpenAI 的客户端),并将每种规则与简单多数投票进行比较:

uv sync --extra bench
uv 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 run
uv run python -m bench.run_ensemble --dataset bench/datasets/arc_challenge.jsonl --limit 200 --yes
uv run python -m bench.compare --dataset bench/datasets/arc_challenge.jsonl --limit 200

每条原始响应都会缓存在 bench/results/raw/ 下;重新运行时不会再次调用 API,因此可以免费调整聚合方式。

结果

5 模型集成(gpt-4o-mini · gemini-2.5-flash-lite · deepseek-v3 · claude-haiku-4.5 · glm-4.7),n = 200,bootstrap 95% 置信区间。两个难度不同的数据集;完整报告和 两张图表见 RESULTS.md。

MMLU-Pro(高难度,基线 73.5%)——最有参考价值的案例:

规则准确率95% 置信区间相对多数投票的配对 Δp
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

Δ 使用逐题准确率差异进行配对 bootstrap检验(题目相同,因此共同难度会相互抵消),而不是通过比较独立置信区间来判断。

MMLU-Pro

发现(如实说明):关键不在于“复杂投票胜过多数投票”,而在于:当群体不确定时,保留置信度的规则(opinion_pool)表现最好(+2.0 个百分点,是唯一高于基线的规则——结果有参考意义,但在 n=200 时未达显著,配对 p=0.225);而强行将概率分布转化为完整排名会显著损害表现——所有排名规则的配对 p 值均 ≤0.014,低于基线;borda 更是降至 0.472,因为在 10 个选项中,排名尾部大多是噪声。汇总置信度,不要将其丢弃。在ARC-Challenge 上(基线 96.8%,接近上限),各规则之间没有显著差异。详见 RESULTS.md。

开发

uv run pytest -q
uv 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

注意:如果将此仓库放在由 iCloud 同步的文件夹中(例如 ~/Desktop),iCloud 可能会生成重复的 .pth 文件,间歇性地导致可编辑安装失败。测试使用 pythonpath=src;如果导入失败,请使用 PYTHONPATH=src 运行服务,或将仓库移出同步文件夹。

相关研究

这里对规则的选择源于作者在投票规则设计方面的研究: Optimizing Voting Rules for Social Welfare and Beyond (AAMAS)。这项研究探讨的是:考虑到选民实际表达偏好的方式,哪些聚合规则能最大化社会福利;本项目将同样的视角应用于 LLM 集成——基准测试给出的答案是,保留置信度的聚合(线性意见池)能够带来收益,而将基数信念强行转化为序数排名则会破坏信号。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。