关于 Plain Ballot
Plain Ballot 是供选民按关注议题比较候选人的选举指南。它根据美国地址匹配选票,并展示带可核查引文和来源的候选人立场;匹配使用确定性算术,而非 AI。
主要功能
- 01按地址查询选票
- 02设置议题优先级并计算候选人匹配度
- 03提供精确引文及来源链接
- 04按需显示政党标签
- 05公开纠错和开放选举数据
适用场景
- 01比较候选人在所选议题上的立场
- 02核查候选人立场的来源
- 03在 Agent 或其他产品中使用选举研究数据
MCP 相关
其远程 MCP 服务提供只读工具,用于列出议题、按地址获取含引文和来源的选票,以及根据明确表达的优先级计算匹配度。它要求 Agent 不推断缺失立场,并且不存储地址。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://plainballot.com/mcpclaude mcp add --transport http n8peace-plain-ballot https://plainballot.com/mcp{"mcpServers":{"n8peace-plain-ballot":{"type":"http","url":"https://plainballot.com/mcp"}}}在 Cursor 中打开{"servers":{"n8peace-plain-ballot":{"type":"http","url":"https://plainballot.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"n8peace-plain-ballot":{"type":"http","url":"https://plainballot.com/mcp"}}}{"mcpServers":{"n8peace-plain-ballot":{"serverUrl":"https://plainballot.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
谁在参选,他们的立场是什么?选出你关心的议题,为每个议题设置倾向,然后输入地址。Plain Ballot 会查看你的选票,告诉你哪些候选人与你契合、原因是什么,以及依据来自哪里。在你主动查看前,政党标签都会隐藏。没有广告、无需账号,也不会存储你的地址。
覆盖加州的所有选举,以及美国 50 个州的众议院和参议院选举,适用于 2026 年 11 月 3 日。
两个项目,均免费且开源:
- Plain Ballot(本仓库):选民指南。
- Open Election Data:背后的研究数据。每位候选人都针对相同的 18 个议题进行研究,每个立场都附有准确引文及其来源,由必须达成一致的 AI Agent 研究。采用开放数据库许可证,免费使用,包括商业用途,并提供免费 API。
必须展示依据的 AI
聊天机器人会把投票信息弄错。Plain Ballot 的设计原则是,任何单个模型的说法都不会直接传达给选民。
- Agent 必须达成一致。 每位候选人都由使用不同模型(Claude Code、Codex、GPT-5.6 Luna)的独立 Agent 进行研究,每个 Agent 都会独立搜索和阅读。只有达成一致时才会发布某个立场:没有冲突时,3 个 Agent 中至少 2 个同意;若存在分歧,则须在 10 个 Agent 中形成明确多数。
- 每条引文都经过核实。 每项主张都附有准确引文,系统会从其来源获取引文并逐字核对,否则就会将其舍弃。每晚都会重新核查所有已发布的引文。
- 不猜测。 Agent 找不到来源,绝不算作一票。若未形成多数,该议题就会留空,选票也会明确说明。
- 匹配不是 AI。 匹配是在浏览器中进行的简单、确定性运算(lib/match.ts)。相同的答案和选票,每次都会得到相同结果。
- 选民可以提出异议。 对任何主张点击“有误?”,即可提交公开问题,并由新的 Agent 重新开展研究。所有更正都会公开。
- 每项更改都会经过偏见检查。 来自不同公司的 3 个模型会审查每个拉取请求,检查诱导性措辞和片面逻辑;测试还会确保匹配对每个倾向刻度的两端一视同仁。
- 所有内容都公开。 倾向刻度的措辞、一致性规则以及每项研究所得的立场都存放在 Open Election Data 中;匹配功能则存放在此处。
使用数据
研究数据属于独立项目:Open Election Data。该项目提供免费的静态 API,无需密钥:
curl -s https://n8peace.github.io/open-election-data/v1/divisions/ca/cd-10.json
你可以在任何用途(包括商业产品)中使用这些数据,但须遵守开放数据库许可证:注明来源,并以相同条款分享对数据所做的改进。
向你的 Agent 发送请求
Plain Ballot 无需浏览器即可运行。将任何支持 MCP 的 AI Agent(Claude、ChatGPT、Cursor 等)指向:
https://plainballot.com/mcp
它提供三个只读工具:
list_issues:列出 18 个议题,以及各方的表述方式。get_ballot:查询街道地址对应的所有已研究选举,每个选项的立场、原文引述和来源。score_fit:根据选民给出的优先事项,计算各选项与之匹配的程度,使用与网站相同的算法。不涉及模型。
Agent 会遵循与网站相同的规则:保持非党派立场、引用并链接来源、绝不补全缺失的立场,只根据选民明确陈述的优先事项评分。地址不会被存储。
更喜欢纯 JSON?GET https://plainballot.com/api/ballot?address=... 会返回相同的选票;研究数据本身也是一个免费静态 API。
已有哪些资源,以及我们为何仍要创建这个项目
优质来源已经不少,Plain Ballot 也从中汲取信息:
- Ballotpedia 是最完整的参选者记录,研究 Agent 会查阅它。其批量数据是付费产品,网页内容也不能由我们重新发布。
- BallotReady 通过面向组织的付费 API 提供候选人的议题立场。
- Vote Smart 通过候选人填写的 Political Courage Test 调查收集立场,同时还收集投票记录和评级。
- Google Civic 和 Democracy Works 提供选票上的参选者信息和投票方式。
我们找不到的是这样一个免费的开放数据集:记录候选人的立场,为每个立场附上可核查的引文,让所有候选人都围绕相同议题呈现以便比较,并且任何人都可以免费复用。因此,我们创建了一个:Open Election Data。每条主张仍然都来自候选人本人的话:Agent 会从摘要追溯到候选人网站、投票记录或采访,并引用原文。
研究你所在的州
研究工作使用你自己的 Claude 或 ChatGPT 方案运行,因此任何人都可以添加覆盖内容,无需支付 API 积分。研究在 Open Election Data 中进行,其中每个州都有一个开放的“研究你所在的州”议题。
在本地运行
npm install
cp .env.example .env.local
npm run dev # http://localhost:3000
没有密钥时,程序会使用虚构的样例选票运行,调节控件也仍然可用。已研究的选举数据来自开放数据的 API(将 ELECTION_DATA_DIR 设为本地检出副本中的 data/positions 即可离线使用)。配置密钥后,可启用文字输入的优先事项(AI_GATEWAY_API_KEY)、真实选票查询(GOOGLE_CIVIC_API_KEY)和地址建议(GOOGLE_PLACES_API_KEY)。
npm test # matching, neutrality, sharing, abuse limits
npm run eval # does the AI put people on the right side of each dial? (calls the model)
npm run check:issues # dial wording matches the research data
构建方式
基于 Vercel 上的 Next.js。人口普查地理编码器用于查找选民所在选区。已研究的选举数据来自 Open Election Data API,并按选区与选民匹配。BotID、速率限制和支出上限用于保护付费端点(docs/security.md)。完整架构图见:docs/ARCHITECTURE.md。使用 AI Agent 编码?将它指向 AGENTS.md。
贡献
最有帮助的是开展研究和核查研究,这两项都不需要编写代码。请参阅 CONTRIBUTING.md,或在浏览器中打开一个可直接运行的副本:
许可证
AGPL-3.0。任何人都可以运行自己的副本,但托管的副本必须公开其修改内容,因此没人能悄悄运行有偏见的版本。
Star 历史
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。