关于 Wyoming Code
Wyoming Code 是面向开发者和研究者的 MCP 服务,可查询现行怀俄明州法条。它支持按引文查询,并搜索覆盖的 44 个法典标题;不提供历史版本。
主要功能
- 01按引文查询法条
- 02搜索 44 个标题的全文
- 03返回标题及可用的立法沿革
- 04使用预取数据,PDF 作为回退
适用场景
- 01查找指定法条的现行文本
- 02按主题搜索法条全文
- 03查看法条是否附有立法说明
MCP 相关
向 MCP 客户端提供 `wy_statute` 和 `wy_search`。可通过 Pipeworx 网关端点或独立 stdio 服务使用。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://gateway.pipeworx.io/wyoming-code/mcpclaude mcp add --transport http pipeworx-io-wyoming-code https://gateway.pipeworx.io/wyoming-code/mcp{"mcpServers":{"pipeworx-io-wyoming-code":{"type":"http","url":"https://gateway.pipeworx.io/wyoming-code/mcp"}}}在 Cursor 中打开{"servers":{"pipeworx-io-wyoming-code":{"type":"http","url":"https://gateway.pipeworx.io/wyoming-code/mcp"}}}在 VS Code 中打开{"mcpServers":{"pipeworx-io-wyoming-code":{"type":"http","url":"https://gateway.pipeworx.io/wyoming-code/mcp"}}}{"mcpServers":{"pipeworx-io-wyoming-code":{"serverUrl":"https://gateway.pipeworx.io/wyoming-code/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
怀俄明州法典(W.S.)
按引文检索怀俄明州法典,并支持全文主题搜索。无需密钥。
属于 Pipeworx 的一部分——一个将 AI Agent 连接到 1819+ 个实时数据源的 MCP 网关。这是一项独立的非官方集成,与上游提供方无关联、未获其认可,也未由其发布。
来源(舰队 #2744)
怀俄明州立法服务办公室(wyoleg.gov)的“怀俄明州法典与宪法”页面采用 Angular SPA。于 2026-10-06 通过下载该 SPA 自身的 JS bundle(main-*.js、其 StateStatutesModule 的延迟加载文件 chunk-_lXRwsur.js),并搜索 API 基础 URL 或任何 lsoservice.wyoleg.gov 引用,确认法典正文没有可用的 API。 “下载怀俄明州法典”页面只是一个包含各篇 PDF 链接的静态列表:
https://wyoleg.gov/statutes/compress/title06.pdf (Title 6, Crimes and Offenses)
同级的 .docx 文件(任务中提到的另一种可能)并不存在——探测过的每个 .docx 路径(多种大小写和位置)都会返回 SPA 自身的兜底页面(HTTP 200,并非真正的 404)。通过检查 content-type 和长度,而非状态码,确认了这一点。PDF 是唯一途径。
PDF 陷阱,以及为何需要扩展 shared/src/pdf-text.ts
怀俄明州各篇 PDF 使用 PDF 1.6 格式、经过线性化处理,并将 Catalog 和 Pages 根节点存储在压缩对象流(/Type/ObjStm)中——在此工具包加入之前,shared/src/pdf-text.ts 明确不支持这种结构(文件头中也有说明;此前唯一的使用方 Kentucky 的 PDF 并未遇到这种情况)。直接检查 Title 6 的 PDF 后确认:5205 0 obj(其 Pages 根节点)根本不会以字面形式出现在文件中;它只作为条目存在于解压后的 ObjStm 中。另一方面,Catalog 对象本身是直接存储的,但只要同一对象中的 /Type/Catalog 前出现嵌套字典(/MarkInfo<</Marked true>>),原有的发现正则就会失效——这里也确实如此,并非怀俄明州特有的偶然情况。
这两个问题现已直接在 shared/src/pdf-text.ts 中修复(机制见该文件头部),而非在此工具包中绕开;未来任何使用压缩型生成器的纯 PDF 州法典都会遇到同样的问题。已端到端验证:Title 6(441 KB,210 页)可提取为 387,932 个字符,且没有任何警告;W.S. 6-2-101(“一级谋杀”)返回的文本正确。
MB 级文件——每次调用绝不完整获取
本工具包涵盖的 44 篇 PDF,大小从约 300 KB(Title 97,即宪法——未涵盖,见下文)到约 2.9 MB(Title 35,即公共卫生与安全)不等。与 mcps/indiana-code 完全一样,每篇的一个 JSON bundle 会预先获取到共享的 pipeworx-datasets R2 bucket(statutes/wy/<title>.json,通过 scripts/ingest-wyoming-statutes.mjs),另有一个全文搜索分片(wy-statutes)。wy_statute 会直接从 bundle 读取预先切分的条文;实时获取 PDF 仅作为后备方案——当某篇尚未包含在 bundle 中,或独立(非托管)安装没有 R2 绑定时才会使用——即便如此,也只会获取所请求的那一篇 PDF,绝不会获取整个语料库。
工具
wy_statute(citation)— 按引文检索怀俄明州法典条文全文(“6-2-101”是 Title 6 中的一级谋杀;“20-1-105”是 Title 20 中的离婚理由)。接受“6-2-101”、“W.S. 6-2-101”、“§ 6-2-101”。返回现行文本、条文标题,以及仅在来源提供了清晰记录时才返回的制定history说明(见下文)。wy_search(query, limit?)— 通过共享的 FTS5 搜索分片,对涵盖的全部 44 篇法典正文进行全文搜索。返回匹配的引文和标题;如需全文,请调用wy_statute。
引文
怀俄明州的引文采用“篇-章-条”格式,以连字符分隔,例如“6-2-101”或“20-1-105”。少数篇使用小数编号(例如《统一商法典》中的“34.1-1-101”)。篇号与 PDF 文件名直接对应(title06.pdf、title34.1.pdf、title99.pdf——个位数篇号会补零,其余均原样使用)。
从完整标题中提取单个章节
Wyoming 提取的 PDF 文本没有类似 HTML 的结构标记(不像 Indiana 的 <div class="section" id="...">),而是每页一长串文本,因为内容流使用相对 Td/T* 文本定位,而不是本仓库的 PDF 提取器用来追踪换行的绝对 Tm。定位章节靠的是引文:每个真正的标题都排成“N-N-N. 标题文本。”(句号后有两个空格;已在原始内容流中确认,且全文始终如此)。不过,仅靠匹配引文还不够——交叉引用(如“……sentenced in accordance with the provisions of W.S. 6-2-102.”)在其自身句末句号后也使用完全相同的两个空格约定,因此简单匹配会同时找到真正的标题,以及所有指向同一编号的正文内交叉引用。
本数据包采用共享的 sliceSection“文本最多者胜出”启发式(shared/src/statute-html.ts,Colorado/Iowa/Nevada/Oregon 数据包系列已在使用),而不另行设计 Wyoming 专用方案:对于目标引文后跟两个空格的所有字面出现位置,真正的标题是下一个符合引文格式的边界之前文本最多的位置。此方法已针对 6-2-101 验证——它在 Title 6 中唯一的另一处出现是交叉引用,该引用位于紧邻的下一个真正章节(6-2-202)之前一个句子的位置,因此解析出的后续文本几乎为零,会明显落败。摄取脚本在整个标题中一次性应用相同的“最长者胜出”原则(按引文对所有边界分组),而不是逐个引文处理,因为完整爬取时没有可供搜索的单一“目标”。
四项能力——两项可用,两项不可用
- 引文查询——可用,
wy_statute。 - 主题/全文搜索——可用,
wy_search。 - 修正/制定历史——仅尽力提供。部分标题(例如 99,Noncodified Statutes——主要是较早的统一法内容)在每个章节末尾都附有格式规范的
(Laws 1985, ch. ...)括号内容;如有此类内容,wy_statute会将其提取到单独的history字段中。Title 6(当前重新编纂的刑法典)没有这类尾随内容——修正/废除说明以普通法律条文文本的形式内嵌于小节层级(“(E) Repealed by Laws 2020, ch. 90, § 3.”),没有结构标记将其分隔开来。大多数章节的history均为null;这不代表提取失败。 - 历史版本(某项修正前的章节文本,或往年版本)——不可用。wyoleg.gov 的法规页面仅提供当前版本(根据其下载页面所述,“截至 2026 年 7 月 1 日有效”),没有年份参数,也没有存档链接。通过 grep SPA bundle 搜索任何“historical”/“archive”相关引用已确认:均不存在。
wy_statute会在响应中明确说明这一点,而不是默默省略该字段。
不在范围内
Title 97(Wyoming 宪法)采用“Article N, Section N”而非“N-N-N”的引文格式——语法完全不同,因此不纳入本数据包的引文解析,也不纳入摄取脚本的标题列表。如果要构建 Wyoming 宪法数据包,应将其作为单独来源。Title 99(Noncodified Statutes)确实采用标准的“N-N-N”格式,因此已纳入。
覆盖范围
所有 44 个采用“标题-章-节”引文格式的标题:1-42、小数编号 34.1(Uniform Commercial Code),以及 99(Noncodified Statutes)。 已摄取 21,268 个章节。
刷新
node scripts/ingest-wyoming-statutes.mjs — 定期重新运行(州议会每年召开一次,无需每日更新)。目前未设置运行计划:请手动触发,遵循 scripts/ingest-indiana-statutes.mjs 的模式。PDF 提取逻辑以纯 JS 的形式在 scripts/lib/pdf-text.mjs 中重复实现(逐行移植自 shared/src/pdf-text.ts 的 extractPdfText,这是有意为之),因为在 pnpm 工作区自身的每个包的 node_modules 链接之外,scripts/ 无法解析裸 @pipeworx/shared 说明符——详见该文件的头部注释。
数据来源
州议会官方网站(wyoleg.gov)。怀俄明州法规属于公开记录;未发现此处使用的按标题划分的 PDF 路径有任何再利用限制。
快速开始
添加到你的 MCP 客户端(Claude Desktop、Cursor、Windsurf 等):
{
"mcpServers": {
"wyoming-code": {
"url": "https://gateway.pipeworx.io/wyoming-code/mcp"
}
}
}
此端点实际提供的内容
https://gateway.pipeworx.io/wyoming-code/mcp 上的 tools/list 会返回上表中的工具,以及 Pipeworx 共享元工具——ask_pipeworx、discover_tools、search_within、remember/recall 和网关全局工具集中的其他工具。因此,你看到的工具数量会多于此表:目前,单个工具包端点除了该工具包自身的工具外,还会列出大约 30 个共享工具。连接的 initialize 响应会说明其确切范围,是当天情况的权威答案。
这是有意设计的,并非意外的多路复用。元工具可以让限定范围的连接回答此工具包未涵盖的问题——通过 ask_pipeworx 路由到整个目录——而无需再添加第二个 MCP 服务。目前无法在不包含这些工具的情况下挂载工具包端点;如果额外的 schema 所占用的上下文超过了路由功能的价值,请改为连接一次完整网关,而不是连接多个工具包端点。
或者连接完整的 Pipeworx 网关,直接列出所有工具包的工具,而不仅是此工具包的工具:
{
"mcpServers": {
"pipeworx": {
"url": "https://gateway.pipeworx.io/mcp"
}
}
}
两个 URL 都会连接到同一个网关和相同的 1819+ 个数据源。唯一的区别是哪个工具包的工具会被直接列出;从任一端点都可以通过 ask_pipeworx 访问所有工具。
没有 MCP 客户端?通过 HTTP 调用
curl -X POST https://gateway.pipeworx.io/v1/tools/wy_statute \
-H 'Content-Type: application/json' \
-d '{"citation":"6-2-101"}'
首次调用无需账户。检查任意工具:GET https://gateway.pipeworx.io/v1/tools/wy_statute。查找工具:使用 {"query":"..."} 向 https://gateway.pipeworx.io/v1/tools/search_packs 发送 POST 请求。
独立运行(无需网关账户)
此工具包也可以作为本地 stdio MCP 服务运行——无需 Pipeworx 账户,也无需往返网关:
{
"mcpServers": {
"wyoming-code": {
"command": "npx",
"args": ["-y", "@pipeworx/mcp-wyoming-code"]
}
}
}
或者直接运行,确认服务能够启动:
npx -y @pipeworx/mcp-wyoming-code
它通过 stdin/stdout 进行 MCP 通信,并为仅此工具包的工具响应 initialize/tools/list/tools/call——不包含上述网关连接额外提供的任何共享元工具。数据来源相同,工具相同,但没有 ask_pipeworx 路由。
使用 ask_pipeworx
你也可以用通俗英语提问,而不直接调用工具——这既适用于上述工具包端点,也适用于完整网关:
ask_pipeworx({ question: "your question about Wyoming Code data" })
网关会选择合适的工具并自动填入参数。
更多信息
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。