关于 us-lobbying-mcp-server
us-lobbying-mcp-server 是用于查询美国联邦游说披露和司法部 FARA 记录的 MCP 服务,提供申报搜索、记录分析及可选的本地 SQL 查询,并标明数据来源与覆盖限制。
主要功能
- 01搜索 LDA 申报与 FARA 登记
- 02查看客户、游说者和捐款记录
- 03分析议题相关申报金额
- 04使用只读 SQL 查询暂存数据
- 05通过分页继续获取结果
适用场景
- 01查找客户或登记人的游说申报
- 02审阅游说者活动及所披露职位
- 03查看某申报年度的捐款记录
- 04用暂存数据开展 SQL 分析
MCP 相关
向 MCP 客户端提供搜索和分析 LDA 与 FARA 记录的工具,支持 stdio 和 Streamable HTTP 传输。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://us-lobbying.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-us-lobbying https://us-lobbying.caseyjhand.com/mcp{"mcpServers":{"cyanheads-us-lobbying":{"type":"http","url":"https://us-lobbying.caseyjhand.com/mcp"}}}在 Cursor 中打开{"servers":{"cyanheads-us-lobbying":{"type":"http","url":"https://us-lobbying.caseyjhand.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"cyanheads-us-lobbying":{"type":"http","url":"https://us-lobbying.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-us-lobbying":{"serverUrl":"https://us-lobbying.caseyjhand.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
9| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| cursor | string | 否 | 继续使用原始范围;可省略其他查询字段。 |
| client_id | string | 否 | 来自 uslobbying_get_client_profile 的 resolve 模式下 candidates[].id 的客户关系记录 ID;candidates[].client_id 为次选。 |
| max_pages | number | 否 | 每次调用的源页面数;正整数上限为 5,发现模式默认 1,分析模式默认 5。 |
| page_size | number | 否 | 每页上游行数;正整数上限为 25,默认值为 25。 |
| amount_max | string | 否 | 原生申报金额上限,精确的十进制 USD,最多两位小数。 |
| amount_min | string | 否 | 原生申报金额下限,精确的十进制 USD,最多两位小数。 |
| issue_code | string | 否 | 来自主题 issue_codes 的本地活动成员资格代码。 |
| client_name | string | 否 | 上游搜索使用的字面客户名称。 |
| filing_type | string | 否 | 来自 uslobbying_list_reference 主题 filing_types 的官方代码。 |
| filing_uuid | string | 否 | 来自证据或分析筛选结果的精确申报 UUID;检索完整源记录。 |
| filing_year | integer | 否 | 申报年份,范围为 1999 至当前 UTC 年份。 |
| lobbyist_id | string | 否 | 游说者 ID。 |
| record_path | string | 否 | 指向存储值的 JSON Pointer;为空时选择根节点。 |
| client_state | string | 否 | 原生客户州代码,已规范为大写。 |
| posted_after | string | 否 | 原生申报发布日期的最早日历日期。 |
| record_limit | number | 否 | 对象条目或数组项的最大数量,上限为 25;文本片段使用响应字节预算。 |
| filing_period | enum | 否 | 源报告期。first_quarter | second_quarter | third_quarter | fourth_quarter | mid_year | year_end |
| lobbyist_name | string | 否 | 原生公开游说者姓名搜索。 |
| posted_before | string | 否 | 最新的原生申报发布日期。 |
| record_handle | string | 否 | 租户/工具绑定的延迟记录句柄。 |
| record_offset | integer | 否 | 键、项目或 Unicode 码点偏移量。 |
| registrant_id | string | 否 | 申报人 ID。 |
| client_country | string | 否 | 原生客户国家/地区代码,已规范为大写。 |
| registrant_name | string | 否 | 上游搜索中的申报人名称字面值。 |
| specific_issues | string | 否 | 搜索披露的具体议题文本,例如 H.R. 1 或电信。 |
| foreign_entity_name | string | 否 | 搜索原生披露的外国实体名称。 |
| foreign_entity_country | string | 否 | 原生外国实体国家/地区代码,已规范为大写。 |
详细介绍
@cyanheads/us-lobbying-mcp-server
通过 MCP 搜索美国游说披露信息和外国代理人注册记录。支持 STDIO 或 Streamable HTTP。
概述
获取美国参议院 LDA API 中的联邦游说披露信息,以及美国司法部 FARA 记录中的外国代理人注册信息。搜索申报文件、理清客户关系、查看游说人员及捐款披露信息,并分析申报金额;还可选择使用本地 SQL。无需 API 密钥。
工具
| 工具 | 描述 |
|---|---|
uslobbying_search_filings | 搜索注册记录和活动报告,同时保留原始申报及修订申报 |
uslobbying_get_client_profile | 理清客户关系,然后分析明确选定的 ID 和年份 |
uslobbying_get_issue_spending | 分析提及某项议题的季度申报中所报告的金额 |
uslobbying_search_lobbyists | 查找游说人员,并获取特定申报中的活动信息及其所涉职位依据 |
uslobbying_get_contributions | 获取 LD-203 报告,其中包含完整捐款清单、PAC 披露信息和认证 |
uslobbying_search_foreign_agents | 搜索 FARA 快照,或获取注册记录中选定的实时详情集合 |
uslobbying_list_reference | 查询官方代码、标识符、方法说明和来源限制 |
uslobbying_dataframe_query | 生成只读 SQL 查询结果,并分页查看全部行 |
uslobbying_dataframe_describe | 查看暂存表的架构、计数、生命周期和来源信息 |
uslobbying_dataframe_drop | 移除暂存表;可选启用 |
功能参考
uslobbying_search_filings 工具
- 至少提供一个上游筛选条件:
filing_year(1999 年至当前 UTC 年)、client_id、registrant_id、lobbyist_id、client_name、registrant_name、filing_type、filing_period或specific_issues。可选的issue_code在本地应用,不能缩小上游请求范围。 - 返回完整的
filings,其中amendment_policy: "all_versions",包含分别可空的 USD 十进制字符串income/expenses、文档链接和嵌套披露信息。通用的数据获取和记录窗口规则见 Features。
uslobbying_get_client_profile 工具
mode: "resolve"(默认)需要client_name;mode: "profile"需要明确提供client_ids和years(1999 年至当前 UTC 年)。ID 用于标识与注册人的关系;候选对象不会自动合并为同一企业身份。- 数据获取完成前,Profile 会返回
status: "collecting";完成后,则会跨输出窗口返回类型化的annual_ledgers、selections、firms、issue_codes、targeted_entities、selected_filings、activities和raw_filings。row_set_totals/row_set_offsets描述各列表的交付情况。 - 使用
CANVAS_PROVIDER_TYPE=duckdb时,分析完成后还会返回包含所有已获取申报、已选申报和已选活动的dataset。可选的canvas_id可复用现有 Canvas;令牌过期时会返回错误canvas_not_found。
uslobbying_get_issue_spending 工具
- 需要
issue_code和明确提供的years;可选的client_id/registrant_id用于缩小上游数据获取范围。会先获取所有版本,再筛选最新期间并在本地按议题过滤;大范围扫描可能需要数小时。 - 返回与 Profile 模式相同的 collecting / 最终分析列表和可选的
dataset,并带有attribution_basis: "whole_filing_mentions_issue"。整份申报的金额会在不同议题类别间重复,不代表分配到各议题的支出。
uslobbying_search_lobbyists 工具
mode: "search"(默认)需要name、registrant_name或registrant_id;mode: "activity"需要lobbyist_id和filing_year,并可选提供client_id和covered_positions_only。- 返回身份信息
lobbyists或申报范围内的evidence,其中包含匹配的参与者、完整活动、原始索引以及申报 UUID / 文档。披露的任职情况是文本内容,并非经核实的当前任职信息。
uslobbying_get_contributions 工具
- 需要
filing_year(2008 年至当前 UTC 年);可选的筛选条件包括filing_period(mid_year/year_end)、注册人 / 游说人士筛选项、contribution_type、contributor、payee、honoree,以及包含边界值的contribution_date_after/contribution_date_before。 - 返回完整的父级
reports、完整的contribution_items,以及matched_item_indexes;每项子条件都必须匹配同一条记录。原始申报和修订申报仍分别保留;report_count_in_batch和item_count_in_batch不代表捐款总额。
uslobbying_search_foreign_agents 工具
mode: "search"(默认)会搜索每日 XML 快照;选择entity: "registrants"(默认)或"foreign_principals",可选提供按字面词元进行 AND 匹配的name_contains,并且仅对外国委托人接受精确的国家标签。status可设为active(默认)、terminated或all;委托人的状态与注册人的状态相互独立。mode: "detail"需要数字字符串registration_number,并且只检索所选的当前集合:foreign_principals(默认)、short_forms或documents。检索文档时需要status: "all"(文档的有效默认值);集合为空并不能证明该注册从未存在。page_size为 1–25(默认值为 25),用于控制固定结果的本地窗口;请使用next_cursor获取后续内容。适用时,响应会保留来源字段、官方链接和快照检索元数据。
uslobbying_list_reference 工具
- 从
topic开始:issue_codes、filing_types、government_entities、contribution_types、countries、identifiers、methodology或fara_rules;可选的filter会按不区分大小写的字面词元执行 AND 匹配。 - 返回带有归属信息的
entries、total_entries和matched_entries;使用next_cursor获取最多包含 125 条目的固定窗口,或使用record_handles获取超大条目。国家会分别保留带有归属信息的 LDA 代码和 FARA 标签,不会猜测 ISO 映射。
uslobbying_dataframe_query 工具
- 需要
canvas_id,并且需要在sql中提供一条只读 SELECT(可选填写新的register_as),或提供一个已存储的result_table(可选填写offset)。row_limit范围为 1–100,默认值为 25;框架配置或响应字节预算可能会调低该值。 - 新 SQL 会物化完整结果。使用
result_table/next_offset继续获取;row_count是精确值,row_order: "canonical_values"表示交付顺序。写入、多条语句、外部读取以及禁止的计划运算符都会因指定原因而失败。 - 无法容纳的行会导致
query_row_too_large错误,同时保留物化结果:请减少所选列,或使用显式SUBSTR窗口。表缺失或已过期时会报错missing_table;未启用画布时无法使用 SQL。
uslobbying_dataframe_describe 工具
- 需要已返回的
canvas_id;可选的table_name用于选择单个表。执行 SQL 前,请检查权威列名和类型。 - 返回精确行数、粒度、创建时间/到期时间、来源工具、获取来源信息,以及适用时的物化 SQL。不会枚举其他画布。
uslobbying_dataframe_drop 工具
- 需要
canvas_id和table_name;此操作具备幂等性,表不存在时返回dropped: false。 - 除非设置
USLOBBYING_DATAFRAME_DROP_ENABLED=true,否则此功能处于关闭状态;禁用时不会出现在tools/list中。此操作只会删除本地暂存数据。
功能
基于 @cyanheads/mcp-ts-core:支持 stdio 和 Streamable HTTP 传输、可插拔身份验证(none / jwt / oauth)、可切换存储(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1),并提供结构化日志记录和可选的 OpenTelemetry 跟踪。
LDA/FARA 专属功能:
- 共享数据源请求频率控制:匿名 LDA 访问每个来源 IP 每分钟最多 15 次请求;可选的注册令牌每分钟最多 120 次。FARA 请求的间隔至少为 4.1 秒;不同进程必须协调共享的上游请求额度。
- 分析筛选使用每个注册人/客户端/年度/季度中的最新提交。同一最新时间的候选记录会标记为存在歧义,并从汇总中排除;这是一项分析规则,并非经核实的法律修订沿革。
- 收入和支出分别保留,缺失金额保持未知,支出方式保留独立账目。披露记录本身既不能证明存在不当行为,也不能证明政策结果或影响。
- FARA 搜索使用完整的官方每日 XML 快照,并缓存 24 小时;选定的注册详情则通过实时 API 获取。LDA 分页为实时查询,不保证提供不可变的历史快照。
便于 Agent 使用的输出:
- 明确的完成状态:LDA 的
page_size为 1–25(默认 25);max_pages为 1–5(发现时默认为 1,分析时默认为 5)。持续跟进next_cursor,直到获取状态coverage.complete,然后继续获取最终窗口,直到output_complete;仍可能需要通过record_handles获取记录。续传时可以省略筛选条件,也可以原样重复。 - 完整记录检索:两个接口返回的数据目标均为 24,000 UTF-8 字节。过大的父记录仍可通过同一工具访问,使用
record_handle、JSON Pointerrecord_path和record_offset/record_limit(对象条目或数组项为 1–25 个,默认 25 个)。字符串窗口使用按字节限制的片段和 Unicode 码点偏移量;跟进子路径和next_offset,即可重建值。 - 可恢复进度:续传状态和保留的父记录会在开始获取后 24 小时过期。紧接在前的游标会重放其响应;更早或已过期的游标会返回
cursor_invalid。内存存储在重启后会丢失进度;显式配置的文件系统存储会将公开记录/检查点保留至过期。大范围扫描可能耗尽默认的 128 MiB 获取预算或超出有效期;请有意缩小年度/客户端/注册人范围。 - 匹配的响应接口:
structuredContent和content[]中的 JSON 文本包含相同字段,并提供可点击的来源链接。可选的分析型dataset响应会列出确切的表,并指向描述/查询工具;SQL 不能替代完整的内联分析结果。
开始使用
将以下内容添加到 MCP 客户端配置文件中。
{
"mcpServers": {
"us-lobbying-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/us-lobbying-mcp-server@latest"],
"env": { "MCP_TRANSPORT_TYPE": "stdio" }
}
}
}
或使用 npx(无需 Bun):
{
"mcpServers": {
"us-lobbying-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/us-lobbying-mcp-server@latest"],
"env": { "MCP_TRANSPORT_TYPE": "stdio" }
}
}
}
或使用 Docker:
{
"mcpServers": {
"us-lobbying-mcp-server": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/us-lobbying-mcp-server:latest"]
}
}
}
对于 Streamable HTTP,请设置传输方式并启动服务:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4.0 或更高版本(或 Node.js v24+)。
- 匿名访问无需账户或密钥。可选的注册 LDA 令牌可配置为
USLOBBYING_LDA_API_KEY。
安装
- 克隆仓库:
git clone https://github.com/cyanheads/us-lobbying-mcp-server.git
- 进入目录:
cd us-lobbying-mcp-server
- 安装依赖:
bun install
- 配置环境:
cp .env.example .env
# edit .env for optional overrides
配置
| 变量 | 描述 | 默认值 |
|---|---|---|
USLOBBYING_LDA_API_KEY | 可选的已注册 LDA 令牌,用于增加已认证请求的额度。 | — |
USLOBBYING_DATAFRAME_DROP_ENABLED | 暴露 uslobbying_dataframe_drop,用于移除本地暂存表。 | false |
CANVAS_PROVIDER_TYPE | 可选 none 或 duckdb;npm/Docker 安装可启用本地 SQL。MCPB 将其固定为 none,并保留完整的内联交付。 | none |
STORAGE_PROVIDER_TYPE | 获取检查点存储;选择 filesystem 可选择持久保留公开记录。 | in-memory |
STORAGE_FILESYSTEM_PATH | 选择文件系统存储时使用的显式可写目录。检查点会在获取开始 24 小时后过期。 | — |
MCP_TRANSPORT_TYPE | 传输方式:stdio 或 http。 | stdio |
MCP_HTTP_HOST | HTTP 绑定地址;Docker 默认使用 0.0.0.0。 | 127.0.0.1 |
MCP_HTTP_PORT | HTTP 服务端口。 | 3010 |
MCP_HTTP_ENDPOINT_PATH | MCP 端点路径。 | /mcp |
MCP_AUTH_MODE | 身份验证方式:none、jwt 或 oauth。 | none |
MCP_LOG_LEVEL | 日志级别(debug、info、warning、error 等)。 | info |
LOG_TOOL_FAILURE_PAYLOADS | 记录失败的工具参数/结果,按键名脱敏,并限制在 LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES 字节以内(默认 16384)。自由格式的机密信息不会脱敏。 | false |
OTEL_ENABLED | 启用 OpenTelemetry 插桩。 | false |
OTEL_EXPORTER_OTLP_ENDPOINT | 用于追踪和指标的 OTLP 基础 URL。 | — |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT | 可选启用的 OTLP 日志导出端点。 | — |
完整的可选覆盖项列表请参阅 .env.example。
运行服务
本地开发
-
构建并运行生产版本:
bun run rebuild bun run start:http # or start:stdio -
运行检查和测试:
bun run devcheck # Lints, formats, type-checks bun run test # Runs test suite
Docker
docker build -t us-lobbying-mcp-server .
docker run -p 3010:3010 us-lobbying-mcp-server
镜像默认通过 HTTP 在端口 3010 上运行。使用 -e CANVAS_PROVIDER_TYPE=duckdb 启用 SQL;每个存储/上游额度使用一个服务进程,因为获取锁和请求节流都是进程级的。
项目结构
| 目录 | 用途 |
|---|---|
src/index.ts | createApp() 入口、直接注册工具、服务/Canvas 生命周期管理。 |
src/config | 服务环境验证和共享的工具截止时间。 |
src/domain | 经过验证的披露记录、来源信息、交付约定和无损格式化。 |
src/mcp-server/tools/definitions | LDA、FARA、参考资料和 dataframe 工具。 |
src/services/lda | 固定主机的 LDA 客户端,具备共享的请求节流和经过验证的分页。 |
src/services/fara | 每日 XML 快照和按注册项实时获取的详细信息集合。 |
src/services/acquisition | 可恢复的获取、重放、存储准入和保留记录时间窗口。 |
src/services/lobbying | 季度版本选择、精确核算和特定申报的证据。 |
src/services/canvas | 完整的分析表暂存和稳定的 SQL 结果交付。 |
scripts | 构建、开发检查、打包和发布工具。 |
tests | 与源代码结构对应的单元测试和集成测试。 |
开发指南
开发指南和架构规则请参阅 CLAUDE.md 和 AGENTS.md。简要说明:
- 处理程序抛出异常,框架负责捕获——工具逻辑中不要使用
try/catch - 使用
ctx.log记录日志,使用ctx.state存储数据 - 在
src/index.ts的createApp()数组中直接注册工具 - 验证完整的上游记录,保留稀疏字段和未知字段,并区分收入、支出、关系 ID 以及获取/输出完成状态
贡献
欢迎提交问题。提交前请运行检查和测试:
bun run devcheck
bun run test
许可证
本项目根据 Apache 2.0 许可证授权。详情请参阅 LICENSE 文件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。