区议会选举
南卡罗来纳州选举数据的MCP服务器。将两个公共数据源合并为15个工具,用于研究候选人、竞选财务和官方披露。
不需要API密钥 --所有数据均来自政府公共网站。
数据源
| 来源 | URL | 内容 |
|---|---|---|
| SC道德委员会 | ethicsfiling.sc.gov | 竞选财务报告、捐款、支出、经济利益声明(SEI) |
| SC投票/VREMS | vrems.scvotes.sc.gov | 选举名单、候选人备案、联系方式、备案文件 |
安装
克劳德桌面(最简单)
- 下载 sc选择-mcp.mcpb
- 双击文件
- 点击 安装
就是这样。试着问: *“谁申请竞选南卡罗来纳州州长?”*
克劳德代码
claude mcp add sc-elections -- npx -y sc-elections-mcp手动配置
添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"sc-elections": {
"command": "npx",
"args": ["-y", "sc-elections-mcp"]
}
}
}需要 Node.js>=20.
工具
搜索和查找
| 工具 | 描述 | 关键参数 |
|---|---|---|
search_filers | 按姓名搜索候选人/官员(默认限制为50人,仅使用姓氏) | name, limit? |
list_filers_by_office | 查找某个办公室的所有申报人;仅当最近时,用平衡/活动ID进行丰富 | office, recent_only |
get_filer_profile | 完整资料:地址、电话、职位、办公室 | candidate_filer_id, sei_filer_id |
list_office_names | 从数据库中查找确切的办公室名称字符串(例如“50区房子”) | keyword? |
竞选资金
| 工具 | 描述 | 关键参数 |
|---|---|---|
get_campaign_summary | 开放/关闭的办公室、余额、捐款总额 | candidate_filer_id |
get_campaign_reports | 列出已提交的报告(campaign_id已自动解析) | candidate_filer_id, campaign_id?, office? |
get_campaign_report_details | 报告的详细收入/支出明细 | report_id |
get_contributions | 带有元数据标题、摘要模式和过滤器的贡献 | candidate_filer_id, campaign_id?, office?, summary?, year?, min_amount?, limit? |
get_expenditures | 带有元数据标题、摘要模式和过滤器的支出 | candidate_filer_id, campaign_id?, office?, summary?, year?, min_amount?, limit? |
跨候选人搜索
| 工具 | 描述 | 关键参数 |
|---|---|---|
search_expenditures | 全州所有候选人的搜索支出(默认限额200) | candidate, vendor_name, office, year, amount, limit? |
search_contributions | 全州所有候选人的搜索贡献(默认限制200) | candidate, contributor_name, office, year, amount, limit? |
经济利益声明
| 工具 | 描述 | 关键参数 |
|---|---|---|
get_sei_details | 职位、商业利益、收入、礼物、旅行、债权人、说客联系人 | sei_filer_id, report_year (可选) |
候选人申请(SC投票)
| 工具 | 描述 | 关键参数 |
|---|---|---|
list_elections | 按类型和年份浏览选举;关键字过滤器+默认限制50 | election_type, year, keyword?, limit? |
search_candidates | 在选举中搜索候选人(默认限制为50)-包括电话、电子邮件、地址 | election_id, limit?,加上可选过滤器 |
get_candidate_details | 通过文件下载链接提交详细信息(提交表格PDF,费用收据) | candidate_id, election_id |
ID如何连接
search_filers("name")
→ candidateFilerId, seiFilerId
get_filer_profile(candidateFilerId, seiFilerId)
→ campaignId (from openOffices / closedOffices)
Campaign tools use: campaignId + candidateFilerId
SEI tools use: seiFilerId
VREMS tools use: electionId → candidateId工作流
研究已知候选人(伦理优先)
1. search_filers("mcmaster")
→ Henry McMaster: candidateFilerId: 27353, seiFilerId: 6579
2. get_contributions(candidate_filer_id: 27353, office: "Governor", summary: true)
→ Auto-resolves campaignId, returns top 20 donors + totals
→ Metadata header confirms: "Henry McMaster — Governor"
3. get_campaign_reports(candidate_filer_id: 27353)
→ Auto-resolves to most recent campaign
4. get_sei_details(6579)
→ Positions, income sources, business interests对于有多个竞选活动的候选人,请使用 office 暗示或明确 campaign_id.
研究一场比赛(VREMS优先)
1. list_elections({ election_type: "Local", year: 2024, keyword: "Sumter" })
→ Only Sumter-area elections (not all 200+ local elections)
2. search_candidates({ election_id: "22152", status: "Elected" })
→ Who won each race — names, contact info, party
3. search_filers("winner name")
→ Bridge to Ethics: get candidateFilerId, seiFilerId
→ If no match, try last name only or spelling variations
4. get_campaign_summary(candidateFilerId)
→ Campaign finance overview对于交错任期(如县议会),检查多个选举周期以找到所有现任成员。
关注金钱(交叉搜索)
1. search_expenditures({ vendor_name: "printing", year: 2024 })
→ All candidates who paid printing vendors in 2024
2. search_contributions({ contributor_name: "smith", office: "Governor" })
→ All contributions from "smith" to Governor races
3. search_expenditures({ candidate: "haley" })
→ Everything Haley's campaigns spent money on注意事项
这两个数据源是独立的系统,没有共享的标识符:
- 使用
list_filers_by_office广泛的发现。 对于“谁申请了\[办公室\]”之类的问题,请使用list_filers_by_office随着recent_only: true--它按办公室名称扫描整个道德委员会数据库,并通过竞选平衡、状态和campaignId丰富结果。需要10-15秒,但可以找到基于姓名或交叉搜索工具不可见的候选人。对尚未提交申请的候选人进行网络搜索作为补充。 - 道德操守办公室的名称不一致。 候选人可以在端点之间拥有不同的办公室标签。使用
list_office_names以发现数据库使用的确切字符串(例如“District 50 House”而不是“State House District 50”)。在交叉搜索工具中,使用尽可能广泛的匹配或按候选人姓名搜索。 - 桥的名字,而不是ID。 VREMS和道德委员会使用不同的ID系统。要将VREMS候选人与其道德竞选财务数据联系起来,请使用按姓名搜索
search_filers.名称变化(昵称、后缀、娘家姓)可能需要仅使用姓氏重试。 - “公开竞选”≠“在职” 候选人可以为他们从未赢得或不再担任的职位开设一个公开的竞选账户。使用VREMS选举结果(
status: "Elected")确定现任官员。 - 初步报告是早期信号。 道德委员会要求候选人在开始筹集或支出资金时提交初步报告,通常是在VREMS申请期开始前几周或几个月。在新候选人出现在VREMS之前,查找最近的初步报告以发现他们。
- VREMS是对公职人员的权威。 道德委员会跟踪的是财务文件,而不是选举结果。只有VREMS显示谁报名,谁赢了,谁退了。
- 所有数据都是公开的。 不需要API密钥或身份验证。
- 归档数据存在处理滞后。 在下一个提交截止日期过去并处理报告之前,最近的活动可能不会出现。
发展
git clone https://github.com/asreynolds1000/sc-elections-mcp.git
cd sc-elections-mcp
npm install
npm run dev # Run with tsx (hot reload)
npm run build # Compile TypeScript to dist/
npm start # Run compiled version测试
所有工具都可以针对实时公共API进行测试,不需要mock或API密钥。
# Quick smoke test: start the server and verify it connects
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"0.1.0"}}}' | node dist/index.js数据覆盖
道德委员会 涵盖了在南卡罗来纳州提交竞选财务报告或经济利益声明的任何人,从全州办公室(州长、司法部长)到当地消防区和学校董事会。SEI报告包括收入来源、商业利益、礼物、旅行、债权人和说客联系人。
SC投票/VREMS 涵盖了大选、特别选举和地方选举的候选人申请。CSV导出提供了丰富的联系人数据(电话、电子邮件、地址、申请费),这些数据仅通过HTML搜索是无法获得的。
许可证
麻省理工学院
作者
亚历克斯·雷诺兹(@阿斯雷诺1000)
