选举计算协议服务器

ElectoMCP是一个用于选举计算和分析的MCP服务器,支持多种选举方法,包括比例代表制和配额方法,用于席位分配计算、投票失真分析和有效政党数量计算。

  • by edugzlez
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 edugzlez/electosim-mcp

使用说明

ElectoMCP

用于选举计算和分析的模型上下文协议(MCP)服务器。

概述

ElectoMCP是一个MCP服务器,提供计算选举系统中席位分配、分析投票失真和计算有效政党数量的工具。它支持各种选举方法,包括比例代表制和基于配额的方法。

特性

  • 座位分布计算:计算如何使用不同的选举方法在候选人之间分配席位
  • 投票失真分析:使用Loosemore Handby方法计算投票失真
  • 有效缔约方数量:使用Laakso-Taagepera或Golosov公式计算ENP

支持的选举方法

除数方法

  • 德洪特:最常见的比例代表法
  • 圣拉古:修改了除数法,以获得更均衡的结果
  • 亚当斯:有利于小党派的除数法
  • 帝国:意大利风格除数法
  • 亨廷顿山:用于美国众议院分配
  • 丹麦语:丹麦式除数法

配额方法

  • 野兔:简单配额法
  • 下垂:STV系统中最常见的配额
  • 哈根巴赫-比肖夫:替代配额方法
  • 帝国 配额:Imperiali方法的配额变体

安装

# Clone the repository
git clone <repository-url>
cd electomcp

# Install dependencies
uv sync

# Run the MCP server
uv run electomcp

用法

这是一个设计用于MCP兼容客户端的MCP服务器。运行后,它提供以下工具:

compute_method

根据指定的选举方法计算候选人之间的席位分配。

参数:

  • candidates:候选人名单及其计票结果
  • seats:要分配的席位总数
  • method:要使用的选举方法(默认值:“dhondt”)

vote_distorsion_loosemore_handby

使用Loosemore Handby方法计算投票失真。

参数:

  • candidates:获得选票和分配席位的候选人名单

effective_number_of_parties

计算参与方的有效数量。

参数:

  • votes_or_seats:计票或席位清点清单
  • version:“laakso.taagepera”(默认)或“golosov”

示例

# Example candidate data
candidates = [
    {"name": "Party A", "votes": 45000, "seats": 0},
    {"name": "Party B", "votes": 35000, "seats": 0},
    {"name": "Party C", "votes": 20000, "seats": 0}
]

# Calculate seat distribution using D'Hondt method
result = compute_method(candidates, seats=10, method="dhondt")

需求

  • Python≥3.13
  • FastMCP≥2.13.0.1

发展

# Install development dependencies
uv sync --group dev

# Run type checking
uv run pyright