关于 federal-regulations-mcp-server
federal-regulations-mcp-server 面向政策研究人员、法律团队和规则制定参与者,整合搜索 Federal Register、eCFR 和 Regulations.gov。它通过跨来源标识符,帮助追踪规则从提案、公众意见到编入法规文本的过程。
主要功能
- 01搜索规则、公告和文件
- 02读取当前或历史 CFR 文本
- 03浏览并搜索 CFR 结构
- 04获取案卷及公众意见
- 05列出开放征求意见的文件
适用场景
- 01追踪提案到正式编入法规的过程
- 02查找案卷中的公众意见
- 03读取指定历史日期的 CFR 条文
- 04筛选仍在征求意见期内的规则文件
MCP 相关
通过 STDIO 或 Streamable HTTP 向 MCP 客户端提供七个工具和两个资源。五个 Federal Register 与 eCFR 工具无需密钥;案卷和意见工具需要 Regulations.gov API 密钥。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://federal-regulations.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-federal-regulations https://federal-regulations.caseyjhand.com/mcp{"mcpServers":{"cyanheads-federal-regulations":{"type":"http","url":"https://federal-regulations.caseyjhand.com/mcp"}}}在 Cursor 中打开{"servers":{"cyanheads-federal-regulations":{"type":"http","url":"https://federal-regulations.caseyjhand.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"cyanheads-federal-regulations":{"type":"http","url":"https://federal-regulations.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-federal-regulations":{"serverUrl":"https://federal-regulations.caseyjhand.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
7| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| rin | string | 否 | 仅包含带有此 Regulation Identifier Number 的文件——例如 "2040-AG18" 这样的 regulationIdNumbers 条目,它用于跟踪一项规则制定从提案到最终规则的全过程。请传入完整 RIN:片段("2040")会匹配所有包含该片段的 RIN。 |
| page | integer | 否 | 页码(1–50,默认 1)。Federal Register 最多提供 50 页,因此查询最多可达 50 × per_page 条匹配项(per_page 为 100 时最多 5,000 条);响应中的 totalPages 和 nextPage 表明本次查询可到达的范围。若要继续获取更多结果,请使用 published_after/published_before 缩小范围,而不要继续翻页。 |
| type | array | 否 | 要包含的文件类型。PRORULE=拟议规则,RULE=最终规则,NOTICE=公告,PRESDOCU=总统文件。省略则包含所有类型。 |
| order | enum | 否 | 结果排序。有查询时默认为相关性排序,无查询时默认为最新优先。无查询时的 relevance 会回退为最新优先;oldest 则按发布时间从早到晚排列。使用 citation 时忽略此项,匹配结果按页面顺序排列。relevance | newest | oldest |
| query | string | 否 | 对文件标题和正文进行全文搜索。省略则仅按筛选条件浏览(例如,在日期范围内查找所有 EPA 拟议规则)。 |
| agencies | array | 否 | 按一个或多个机构的 Federal Register agency slug 筛选(例如 "environmental-protection-agency"、"securities-and-exchange-commission")——使用小写 kebab-case,而不是名称或缩写。每条结果都会列出机构及其 slug;不确定时,可按 query 搜索并从结果的 agencies[].slug 中读取。任何一个无法识别的 slug 都会导致整个请求失败。 |
| cfr_part | string | 否 | 仅包含 cfrReferences 列出此 cfr_title 部分的文件:可指定部分编号("141")或范围("140-143"),例如 regulations_get_cfr_section 刚读取的部分;会去掉 "Part" 或 "pt." 前缀。需要提供 cfr_title。带字母的部分编号("1203a")无法用于筛选。与查询 "40 CFR 141"(匹配提及该部分的文件)不同,此筛选只匹配 CFR 引用列表中列有该部分的文件。 |
| citation | any | 否 | Federal Register 页面引文,格式为 "89 FR 49102"(卷号 FR 页码),例如 regulations_get_cfr_section 的 bodyText 末尾来源说明中的引文。返回刊载于该页的文件,通常为一份,有时为共享该页的多份文件,并按起始页排序。需要 citation_date,且会替代 published_after/published_before。适用于第 59 卷(1994 年)及之后。 |
| per_page | integer | 否 | 每页结果数(2–100,默认 20)。Federal Register API 会将恰好为 1 的值视为默认页大小,而不是返回一条结果。 |
| cfr_title | integer | 否 | 仅包含受影响的 CFR 部分(cfrReferences)属于此标题(1–50)的文件,例如 regulations_get_cfr_section 刚读取的标题。单独使用时按标题筛选;与 cfr_part 一起使用时按该部分筛选。 |
| docket_id | string | 否 | 仅包含联邦公报印载此案卷编号的文档——该编号来自此处结果或 regulations_get_document 返回的 docketIds 条目,可带或不带“Docket No.”等前缀。无需 REGULATIONS_GOV_API_KEY 即可列出某案卷的联邦公报文档。只有在联邦公报印载 Regulations.gov 案卷 ID 时才匹配。请传入完整编号:片段(“FAA-2026”)会匹配所有包含该片段的案卷。 |
| citation_date | any | 否 | 来源注释中引文旁标注的发布日期(YYYY-MM-DD)——“89 FR 49102, June 11, 2024”对应 2024-06-11。与 citation 一起使用时必填;其年份等于卷号 + 1935。 |
| published_after | any | 否 | 最早发布日期,采用 ISO 8601 格式(YYYY-MM-DD),且必须是有效日历日期。与 published_before 配合使用可限定大型结果集的日期范围——FR 的导航上限为 50 页。 |
| published_before | any | 否 | 最晚发布日期,采用 ISO 8601 格式(YYYY-MM-DD),且必须是有效日历日期。 |
详细介绍
@cyanheads/federal-regulations-mcp-server
通过 MCP 搜索并追溯美国联邦规则,涵盖 Federal Register(拟议规则/最终规则和公告)、eCFR(编纂后的 CFR 全文,支持按历史时点查询并在本地镜像)和 Regulations.gov(规则制定案卷和公众意见)。支持 STDIO 或 Streamable HTTP。
概述
来自 Federal Register、eCFR 和 Regulations.gov 的美国联邦法规。搜索拟议规则和最终规则,追溯规则从提案、公众意见到编纂文本的全过程,并阅读任意 CFR 条文的现行版本或过去某个日期的版本。
工具
| 工具 | 描述 |
|---|---|
regulations_search_rules | 按查询词、类型、机构、日期范围、CFR 部分、案卷编号和 RIN 搜索 Federal Register 中的拟议规则、最终规则、公告和总统文件,或通过页码引文查找对应文件 |
regulations_get_document | 按编号获取一份 Federal Register 文件,其中包含案卷 ID、CFR 部分、引文、意见数量和意见 URL,可据此串联使用其他工具 |
regulations_browse_cfr | 列出 CFR 篇目、某篇目的章节、某部分中的所有条文和附录;也可对编纂后的 CFR 进行全文搜索 |
regulations_get_cfr_section | 阅读某条文、整部分或附录的编纂后 CFR 文本,可获取现行版本或过去某个日期的版本 |
regulations_get_docket | 从 Regulations.gov 获取规则制定案卷及其归档文件(需要密钥) |
regulations_find_comments | 获取针对某份文件或案卷的公众意见,或获取一条意见的完整正文和附件(需要密钥) |
regulations_list_open_comments | 列出当前仍开放征求公众意见的文件,并按截止日期从近到远排序 |
资源
| 资源 | 描述 |
|---|---|
regulations://document/{documentNumber} | 一份《联邦公报》文件的元数据和跨来源标识 |
regulations://cfr/{title}/{part}/{section} | 当前 CFR 条文的编纂文本 |
这两种资源都对应一个工具(regulations_get_document、regulations_get_cfr_section),因此仅支持工具的客户端不会缺少任何功能。
能力参考
regulations_search_rules 工具
- 可选的全文
query,可按type(PRORULE/RULE/NOTICE/PRESDOCU)、agencies(《联邦公报》的 slug,例如environmental-protection-agency,而非名称或缩写)、published_after/published_before、cfr_title+cfr_part(单个部分编号或范围,例如140-143;cfr_part需要cfr_title,否则会返回title_required_for_part)、docket_id(《联邦公报》所列的案卷编号)和rin筛选;所有筛选条件会组合使用;per_page为 2–100(默认 20),page为 1–50 citation("89 FR 49102")搭配citation_date(来源注释中标注的日期),会按页面顺序返回该页刊载的文件,适用范围为第 59 卷(1994 年)及之后。引文缺少日期,或与日期范围同时使用时,会返回citation_incomplete;卷号早于 59 或日期属于其他年份时,会返回citation_out_of_range。如果没有文件跨越该页,通知会提供当天的页码范围- 每个结果都包含
documentNumber、citation/startPage/endPage、agencies[].slug、印刷版所列的docketIds、regulationsGovDocketId和regulationsGovDocumentId、commentCount、commentUrl、commentsCloseOn及commentPeriodOpen(评论期在截止日期当天美国东部时间晚上 11:59 前开放)、regulationIdNumbers,以及供后续工具使用的cfrReferences。totalPages和nextPage用于翻页。《联邦公报》最多提供 50 页,因此当结果集超过 50 ×per_page(默认值下为 1,000 条,设为 100 时为 5,000 条)时,truncated会标记结果已截断;请缩小日期范围,而不要继续翻页。totalCount的上限为 10,000,表示结果至少有这么多条。起始日期晚于结束日期时,会返回date_range_inverted;invalid_filter会指出被拒绝的参数
regulations_get_document 工具
document_number可使用《联邦公报》采用的任何格式:2010 年起的2024-07773,以及更早的编号和更正编号,例如98-1572、E9-25990或C1-2009-30484;include_full_text会将纯文本正文作为一个长度不超过max_chars的片段返回(默认 64,000,最大 200,000),从offset开始;传入其中任一参数都会启用全文- 返回元数据,以及其他工具所需的标识:Regulations.gov 的
docketId和regulationsGovDocumentId、印刷版所列的docketIds、citation/startPage/endPage、commentCount、commentUrl、commentPeriodOpen和cfrReferences。返回文本时,fullTextLength和fullTextNextOffset(仍有文本时存在)用于翻阅正文;重要的最终规则正文可能超过一百万个字符
regulations_browse_cfr 工具
mode: "structure"会列出 50 个标题、某个标题的顶层分区,或在提供title+part时列出该部分的所有条文和附录,并附上其subpart和subjectGroup;mode: "search"会对编纂后的 CFR 进行全文搜索,并且必须提供query。title、part(需要title)和指定时间点的date可限定两种模式的范围;per_page为 1–50(默认 20),用于翻阅搜索结果和部分清单- 搜索结果每个条文一行,包含
cfrCite、heading、hierarchyPath和excerpt。source(mirror/live)和sourceScope会说明所用语料及其覆盖范围;countBasis会说明totalCount统计的是sections还是section_versions;实时搜索仅覆盖 eCFR 的前 10,000 条结果(超过范围后翻页会返回page_out_of_window)
regulations_get_cfr_section 工具
- 单个章节(
title+part+section)、整个部分(省略section),或一个附录(appendix,原样使用regulations_browse_cfr返回的形式,例如Appendix A-1 to Part 50)。section也接受人们常用的引文格式("61"、"§ 141.61"、"141.61(c)")以及服务返回的cfrCite("40 CFR 141.61"、"14 CFR 241 § 25";若引文指定了其他标题,则会报错conflicting_title);part接受"Part 141";date可读取从 2017-01-01 到该标题最新日期的文本 - 文本以单个
bodyText窗口返回(max_chars默认为 64,000,最大 200,000,从offset开始),并通过bodyTextLength和bodyTextNextOffset分页。读取整个部分时,还会返回包含各章节offset的sections[]索引,并列出附录名称,但不含附录文本;source(mirror/live)指明来源 - 读取整个部分时,还会返回该部分的
heading、authority、sourceNote和notes;每个sections[]条目都包含其子部分或主题组为该章节注明的 Authority 或 Source - 上标显示为
^x,下标显示为_x(3 × 10^−8、CO_{2}e);脚注标记为[n];变音符号和上划线用组合标记表示(x̄)
regulations_get_docket 工具 · 需要密钥
docket_id,Regulations.gov 的案卷 ID(例如EPA-HQ-OAR-2025-0194)——可使用搜索结果或开放评论条目中的regulationsGovDocketId,或regulations_get_document返回的docketId,而非印出的docketIds条目;document_types可筛选Proposed Rule、Rule、Notice、Supporting & Related Material或Other;per_page为 5–250(默认 25),page为 1–40- 返回案卷的元数据、
documentCount和documents[]。每个文档都包含供regulations_find_comments使用的objectId、可传给regulations_get_document的frDocNum,以及 Regulations.gov 报告的commentPeriodOpen。文档可通过totalPages和nextPage分页;Regulations.gov 提供 40 页,因此当案卷超过 40 ×per_page(per_page为 250 时为 10,000)时,truncated会标记结果被截断
regulations_find_comments 工具 · 需要密钥
docket_id、document_object_id、fr_document_number或comment_id中必须且只能指定一个;列表查询的per_page为 5–250(默认 25),page为 1–40document_object_id可接受对象 ID(0900006485883ec6)或文档 ID(EPA-HQ-OW-2022-0114-0027)。fr_document_number会解析为带有该确切编号的 Regulations.gov 文档;如果没有匹配项,则返回not_found- 列表可通过
search_term按评论文本缩小范围,每条匹配结果都会包含highlightedContent,即匹配的段落。posted_after/posted_before可设置包含边界的发布日期范围。若日期范围前后颠倒,则会报错date_range_inverted;在comment_id模式下传入筛选条件,则会报错filter_requires_list_mode mode为list或detail。列表返回评论摘要,不含正文。comment_id会返回正文、提交者、receivedDate、postmarkDate、duplicateComments(大于 1 表示这是群发活动记录)和attachments;若评论实质内容位于 PDF/DOCX 文件中,则attachmentOnly: true。列表包含totalPages和nextPage;当结果集超过 Regulations.gov 可提供的 40 页(40 ×per_page,per_page为 250 时为 10,000)时,truncated会标记结果被截断;发布日期范围每次只获取其中一个片段
regulations_list_open_comments 工具
- 可选参数
query、type(PRORULE、RULE、NOTICE;默认值为["PRORULE", "RULE"])、agencies(Federal Register 标识符)和closing_before;per_page范围为 1–100(默认值为 20) - 条目按截止日期排序,最早的排在前面,并包含
commentsCloseOn、daysRemaining、documentNumber、印刷版docketIds、regulationsGovDocketId和regulationsGovDocumentId、commentCount及commentUrl。asOf是美国东部时间的当天日期,因此文件在截止当天仍会列出。totalPages和nextPage用于翻阅此时间范围;truncated表示已达到 Federal Register 的 10,000 个文件上限 - 无需密钥。
keyed表示是否已设置REGULATIONS_GOV_API_KEY,调用regulations_get_docket和regulations_find_comments跟进某个条目时需要此密钥
regulations://document/{documentNumber} 资源
documentNumber可采用任意 Federal Register 格式(2024-07773、98-1572、E9-25990);返回内容与regulations_get_document相同,但不含正文docketId、regulationsGovDocumentId、印刷版docketIds、cfrReferences、citation、commentCount和commentUrl可串联搜索、评论和 CFR 工具
regulations://cfr/{title}/{part}/{section} 资源
- 仅限条文;使用当前日期和工具默认的 64,000 字符窗口;
part和section字段按工具的解析方式解析("Part 141";"61"、"§ 141.61"、"40 CFR 141.61") source(mirror/live)表示数据来源。bodyTextNextOffset标记超出窗口的条文;可通过带有offset的regulations_get_cfr_section读取剩余内容
功能特性
基于 @cyanheads/mcp-ts-core 构建:支持 stdio 和 Streamable HTTP 传输、可插拔身份验证(none / jwt / oauth)、可替换存储(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、结构化日志记录和可选的 OpenTelemetry 跟踪。
Federal Register / eCFR / Regulations.gov 专属功能:
- 通过三个官方数据源实现统一工作流:Agent 调用监管领域的动词(
search_rules、get_cfr_section、find_comments),而不是使用三个 API 客户端 - 跨数据源关联:每份 Federal Register 文件都会提供其 docket ID 和 CFR 部分句柄,用于串联提案 → 评论 → 最终规则 → 编纂文本的追踪流程
- 核心功能无需密钥:五个 Federal Register 和 eCFR 工具无需密钥。
regulations_get_docket和regulations_find_comments需要REGULATIONS_GOV_API_KEY(可在 api.data.gov/signup 免费获取,每小时 1,000 次请求);如果缺少密钥或密钥遭拒,会返回auth_required,并指出变量名和注册 URL - 本地镜像的编纂版 CFR:eCFR 会同步到内嵌 SQLite + FTS5,以支持精确引文读取和全文搜索;对于历史日期、完整部分、附录、镜像之外的篇章,以及 eCFR 自上次镜像同步后重新发布过的篇章,则会回退到实时 API
- 每个请求的预算为 45 秒,由所有上游调用、重试和退避共享;如果数据源停滞,会在客户端超时前返回
upstream_unavailable
面向 Agent 的输出:
- 来源信息:每次 CFR 读取都会包含
source: "mirror" | "live",搜索结果还会附带一行sourceScope,说明语料库覆盖范围 - 如实分页:
totalPages和nextPage会说明列表可翻阅到哪里;超出末页时,响应会指出最后一页,而不是显示为“无匹配结果”;超过 Federal Register 的 50 页或 Regulations.gov 的 40 页的匹配项会通过truncated和notice提示,绝不会静默丢弃条目 - 考虑附件的评论:
attachmentOnly会标记内容实质为文件的评论,并提供下载 URL
入门指南
公共托管实例
公共实例可通过 https://federal-regulations.caseyjhand.com/mcp 访问,无需安装。该实例使用 Streamable HTTP;各客户端的配置格式各不相同。
对于 Claude Code:
claude mcp add --transport http federal-regulations-mcp-server https://federal-regulations.caseyjhand.com/mcp
对于 Cline(cline_mcp_settings.json):
{
"mcpServers": {
"federal-regulations-mcp-server": {
"type": "streamableHttp",
"url": "https://federal-regulations.caseyjhand.com/mcp"
}
}
}
对于 Cursor(mcp.json):
{
"mcpServers": {
"federal-regulations-mcp-server": {
"url": "https://federal-regulations.caseyjhand.com/mcp"
}
}
}
Claude Desktop 可在 Settings → Connectors 下添加远程服务。
自托管 / 本地部署
将以下内容添加到 MCP 客户端配置文件中。REGULATIONS_GOV_API_KEY 用于启用 docket 和 comment 工具;省略该项即可仅运行无需密钥的 Federal Register 和 eCFR 工具。
{
"mcpServers": {
"federal-regulations-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/federal-regulations-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"REGULATIONS_GOV_API_KEY": "your-key-here"
}
}
}
}
或者使用 npx(无需 Bun):
{
"mcpServers": {
"federal-regulations-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/federal-regulations-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"REGULATIONS_GOV_API_KEY": "your-key-here"
}
}
}
}
或者使用 Docker:
{
"mcpServers": {
"federal-regulations-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"-e", "REGULATIONS_GOV_API_KEY=your-key-here",
"ghcr.io/cyanheads/federal-regulations-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+)。
- 可选:用于 Regulations.gov 工具的免费 api.data.gov 密钥。
安装
- 克隆代码库:
git clone https://github.com/cyanheads/federal-regulations-mcp-server.git
- 进入目录:
cd federal-regulations-mcp-server
- 安装依赖项:
bun install
- 配置环境:
cp .env.example .env
# optionally set REGULATIONS_GOV_API_KEY
配置
| 变量 | 说明 | 默认值 |
|---|---|---|
REGULATIONS_GOV_API_KEY | 用于 regulations_get_docket 和 regulations_find_comments 的 api.data.gov 密钥。 | none |
FEDERAL_REGISTER_BASE_URL | Federal Register API v1 基础 URL。 | https://www.federalregister.gov/api/v1 |
ECFR_BASE_URL | eCFR API 基础 URL。 | https://www.ecfr.gov/api |
REGULATIONS_GOV_BASE_URL | Regulations.gov API v4 基础 URL。 | https://api.regulations.gov/v4 |
ECFR_MIRROR_PATH | eCFR SQLite 镜像数据库的路径。 | ./data/ecfr-mirror.sqlite |
ECFR_MIRROR_REFRESH_CRON | 进程内镜像刷新的 Cron 表达式(仅限 HTTP 传输),例如 0 4 * * 0。每次运行都会重新完整采集所有已配置的标题。 | none(无任务) |
ECFR_MIRROR_TITLES | 要镜像的 CFR 标题,以逗号分隔(例如 21,40)。对集合以外内容的读取和搜索,以及所有标题搜索,都会调用实时 eCFR API。 | 全部 50 个标题 |
MCP_TRANSPORT_TYPE | 传输方式:stdio 或 http。 | stdio |
MCP_HTTP_PORT | HTTP 服务端口。 | 3010 |
MCP_AUTH_MODE | 身份验证方式:none、jwt 或 oauth。 | none |
MCP_LOG_LEVEL | 日志级别(debug、info、warning、error 等)。 | info |
STORAGE_PROVIDER_TYPE | 存储后端:in-memory、filesystem、supabase、cloudflare-kv/r2/d1。 | in-memory |
OTEL_ENABLED | 启用 OpenTelemetry。 | false |
完整的可选覆盖项列表请参阅 .env.example。
运行服务
本地开发
-
构建并运行:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http -
构建或刷新 eCFR 镜像(在进程外执行且可幂等;首次构建完成前,CFR 工具会使用实时 eCFR API):
bun run mirror:init # full build, resumable (scope with ECFR_MIRROR_TITLES) bun run mirror:refresh # re-harvest every configured title against the latest eCFR issues bun run mirror:verify # report row counts and the last-synced issue date -
运行检查和测试:
bun run devcheck # Lint, format, typecheck, security, changelog sync bun run test # Vitest test suite
Docker
docker build -t federal-regulations-mcp-server .
docker run --rm -e REGULATIONS_GOV_API_KEY=your-key -p 3010:3010 federal-regulations-mcp-server
Dockerfile 默认使用 HTTP 传输、无状态会话模式,并将日志写入 /var/log/federal-regulations-mcp-server。在运行中的容器内使用 docker exec <container> bun run mirror:init 构建镜像,并在 /usr/src/app/data 上挂载卷,以便容器重建后保留数据。默认会安装 OpenTelemetry 对等依赖;构建时添加 --build-arg OTEL_ENABLED=false 可省略这些依赖。
项目结构
| 目录 | 用途 |
|---|---|
src/index.ts | createApp() 入口:注册工具和资源,初始化三项服务,并在设置了 ECFR_MIRROR_REFRESH_CRON 时安排镜像刷新。 |
src/config | 使用 Zod 解析并验证服务器专用环境变量。 |
src/mcp-server/tools | 工具定义(*.tool.ts),包含七个 regulations_* 工具。 |
src/mcp-server/resources | 资源定义(*.resource.ts),包含文档和 CFR 条款资源。 |
src/services/federal-register | Federal Register API v1 客户端(无需密钥)。 |
src/services/ecfr | eCFR API 客户端(无需密钥):版本管理、结构、搜索、条款 XML 解析和引文解析。 |
src/services/ecfr-mirror | eCFR 编纂文本镜像(SQLite + FTS5)及可选的刷新任务。 |
src/services/regulations-gov | Regulations.gov v4 客户端(X-Api-Key):案卷和评论。 |
src/services | 共享请求预算、文本分段、字符引用解码和上游故障处理。 |
scripts/ecfr-mirror-*.ts | 带外镜像生命周期管理:init、refresh、verify。 |
tests/ | 与 src/ 对应的单元测试和集成测试。 |
开发指南
开发指南和架构规则请参阅 CLAUDE.md。简要概述:
- 处理程序抛出异常,框架捕获异常——工具逻辑中不要使用
try/catch - 使用
ctx.log记录请求级日志,使用ctx.state存储租户级数据 - 通过
src/mcp-server/*/definitions/index.ts中的汇总导出注册新工具和资源 - 封装外部 API 调用:验证原始数据 → 规范化为领域类型 → 返回输出架构;绝不伪造缺失的上游字段
数据免责声明
根据 Office of the Federal Register 的说法,eCFR 内容“具有权威性,但并非官方版本”,并非《联邦法规汇编》的官方法律版本;法律研究请对照 govinfo.gov 核实。本服务与 Office of the Federal Register、Government Publishing Office 或 General Services Administration 均无关联,也未获得其认可。
贡献
欢迎提交问题。提交前请运行检查和测试:
bun run devcheck
bun run test
许可证
Apache-2.0——详情请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。