Releases: HrishiKabra/voting-mcp
Release list
v0.1.3 — security hardening
Input hardening from a full security review (bandit, pip-audit, wheel inspection, manual exploit-class review, live stdio probing):
- Reject non-finite floats (
Infinity/NaN, which JSON parsers accept) on ballot weights and score values — these previously reached the rules and produced nan/inf scores or a silently-wrong winner. - Cap ballot weights at 1e12 so no within-bounds sum can overflow to infinity.
- Bound profile size (1,000 candidates / 100,000 ballots) — the pairwise tally is O(candidates²), an OOM vector.
- Add SECURITY.md documenting the pure-compute posture.
No known vulnerabilities in dependencies (pip-audit clean); wheel ships only voting_mcp/.
v0.1.2 — paired significance testing + official MCP registry
What's new
- Paired bootstrap significance testing in the benchmark: each rule is now compared to the majority-vote baseline on the per-question accuracy difference (shared question difficulty cancels), reported as a CI on Δ plus a two-sided p-value. On MMLU-Pro this makes the negative findings rigorous — every ranking-consuming rule is significantly below majority vote (p ≤ 0.014) — while opinion_pool's +2.0pp remains suggestive (p = 0.225) at n=200.
- Listed on the official MCP registry as
io.github.HrishiKabra/voting-mcp(server.jsonincluded; aggregators such as PulseMCP and Glama index from there). - README: related-research link to Optimizing Voting Rules for Social Welfare and Beyond (AAMAS); repository links now surface on PyPI.
Install: uvx voting-mcp · PyPI: https://pypi.org/project/voting-mcp/0.1.2/
voting-mcp 0.1.0
First release. An MCP server exposing principled social-choice aggregation rules as tools, plus a reproducible LLM-ensemble benchmark.
Install: uvx voting-mcp · on PyPI: https://pypi.org/project/voting-mcp/
Tools (stdio, pure compute): borda, copeland, condorcet, approval, stv, opinion_pool, plurality, majority, aggregate_rule — strict JSON schemas; ties surfaced as co-winners; explicit no-winner on Condorcet cycles.
Benchmark finding (honest): on MMLU-Pro (hard, 73.5% baseline) the confidence-preserving opinion_pool is the only rule above naive majority vote (+2.0pp; CI overlaps, so suggestive not conclusive), while forcing the distributions into full rankings hurts — borda collapses to 0.472 because the tail of a 10-option ranking is noise. On near-ceiling ARC-Challenge nothing separates. Takeaway: aggregate the confidence, don't force rankings. See RESULTS.md.