关于 North Dakota Code
North Dakota Century Code 的 MCP 服务,供查询州法条文的法律从业者、研究人员和开发者使用。它按引文实时提取章节 PDF 正文,并按官方标题检索主题。
主要功能
- 01按引文获取法条全文
- 02按官方标题检索主题
- 03实时提取章节 PDF
- 04覆盖条目及章节上下文
适用场景
- 01核查特定州法条文
- 02按主题查找相关法条
- 03在 MCP 客户端中查询北达科他州法律
MCP 相关
提供 `nd_statute` 和 `nd_search` 两个工具,供 MCP 客户端按引文查阅条文或按官方标题搜索。可通过 Pipeworx 网关连接,也可作为本地 stdio MCP 服务运行。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://gateway.pipeworx.io/north-dakota-code/mcpclaude mcp add --transport http pipeworx-io-north-dakota-code https://gateway.pipeworx.io/north-dakota-code/mcp{"mcpServers":{"pipeworx-io-north-dakota-code":{"type":"http","url":"https://gateway.pipeworx.io/north-dakota-code/mcp"}}}在 Cursor 中打开{"servers":{"pipeworx-io-north-dakota-code":{"type":"http","url":"https://gateway.pipeworx.io/north-dakota-code/mcp"}}}在 VS Code 中打开{"mcpServers":{"pipeworx-io-north-dakota-code":{"type":"http","url":"https://gateway.pipeworx.io/north-dakota-code/mcp"}}}{"mcpServers":{"pipeworx-io-north-dakota-code":{"serverUrl":"https://gateway.pipeworx.io/north-dakota-code/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
@pipeworx/north-dakota-code
北达科他州法典——按引文检索州法律法规,并按官方标题(主题搜索)检索。无需密钥。
属于 Pipeworx——一个将 AI Agent 连接到 1819+ 个实时数据源的 MCP 网关。这是独立的非官方集成,与上游提供方无关联、未获其认可,也非由其发布。
工具
nd_statute(citation)— 获取北达科他州法典某条的全文 ,按引文检索(“12.1-16-01”是谋杀罪;“47-16-13.1”是房东维护出租单元的义务)。将引文解析为对应章节的 PDF,实时获取并提取文本。nd_search(query, limit?)— 在州议会官方条款和章节标题中按主题/关键词搜索(不搜索完整的法律法规正文——见下文),返回匹配的引文。
身份验证
无需密钥。
此处的调查陷阱并不完全适用
这个工具包系列记录的陷阱是“仅以 PDF 形式发布”——对于法律法规正文确实如此(ndlegis.gov 将每章作为小型 PDF 提供,cencode/t12-1c16.pdf),但州议会还发布了一个汇总 HTML 页面,列出每个标题、章节和条款及其官方标题:
https://ndlegis.gov/general-information/north-dakota-century-code/index.html
该页面约 9.5 MB,涵盖整个法典(约 29,000 条、1,740 章、74 个标题),全部集中在一个文档中——每次调用时获取过于庞大,而且没有更轻量的按标题划分的列表页面(与爱荷华州不同),法典也没有搜索 API(已实时确认,ndlegis.gov 的法案追踪部分有 JSON API;法典部分没有)。因此,脚本 scripts/bake-index.mjs 会将其获取并一次性烘焙到 src/nd-index-data.ts 中——包含引文、官方标题和章节/标题上下文,不包含法律法规正文——采用与 mcps/symmap 草药表相同的“烘焙表”形式。nd_search 完全在内存中读取该烘焙表;nd_statute 仅用它将引文解析为对应章节的 PDF,然后实时获取并提取该 PDF,因此法律法规正文从未被烘焙或重新分发。
刷新方式
每当北达科他州重新编纂法典时,都应重新运行烘焙脚本(新的会期法律持续颁布;索引页面按自身计划更新):
node mcps/north-dakota-code/scripts/bake-index.mjs > mcps/north-dakota-code/src/nd-index-data.ts
如果页面缩小到约 1 MB 以下,或解析出的行数少得可疑,脚本会明确报错,而不会静默失败——这两种情况都意味着 ndlegis.gov 更改了页面标记,而不是法典内容变少。
pdf-text.ts 为该州新增了两项实际扩展
shared/src/pdf-text.ts(最初为肯塔基州按条款划分的 PDF 构建)开箱即用时无法处理北达科他州的章节 PDF——已在单独的提交中修复,并添加了测试:
- 每个内容流都将
/Length写成间接引用(/Length 12 0 R),而不是直接写入整数。原有的检测正则表达式在处理多位数的引用对象编号时会陷入回溯陷阱(会静默地将其解析为字面整数 1,而不是跟进引用)——现已改写为显式可选组,不再发生回溯。 - 正文文本字体是简单的(非 Type0)TrueType 子集,完全没有
/Encoding——无法将其作为 WinAnsi 字节读取。其自身的/ToUnicodeCMap(以 1 字节代码为键,不同于 Type0 的 2 字节 CID)是记录真实字符的唯一位置,因此提取器现在会在简单字体未声明为 WinAnsi 时检查该 CMap。 /Font本身是Resources内的间接引用(/Font 18 0 R),肯塔基州的 PDF 从未使用过这种形式——现已像处理/Pages一样解析它。
不可靠空白分隔下的章节划分
提取后,章节文本的各个部分之间没有可靠的换行符,标题会直接连到正文(“12.1-16-01.
Murder.1.A person is guilty...”)。sliceNdSection 根据该章节自身经过核验的引文列表(已知于预先构建的索引,而非通用数字模式)确定标题边界,从而避免匹配到其他章节中的引文;通常的“优先选择文本最多者”平局处理规则,仍可防止罕见情况下同一章节内的交叉引用恰好以相同编号结束句子。
四项功能——两项可用,两项不可用
- 引文查询——可用(
nd_statute)。 - 主题/关键词搜索——可用(
nd_search),但搜索对象是官方 CATCHLINE,而不是完整的法规正文。北达科他州不提供《法典》条文全文搜索(已在线核实)。即使没有名为“Landlord and Tenant”的 CHAPTER,搜索“landlord”仍会找到 7 个真实条文(例如“房东义务——房屋维护”),因为这些条文分散在第 28、31、35 和 47 编中,只有条文级的标题索引才能全部找到。 - 修订/颁布历史——不可用(针对仍然有效的条文)。ndlegis.gov 当前在线《法典》不会显示仍然有效条文的“History:”(历史:)/“Amended by”(修订依据)行(已通过第 47-16 编《不动产租赁》完整章节核实:约 40 个在线有效条文均无此类行)。已废止或重新编号条文的一行处置说明(“Repealed by S.L. 1977, ch. 429, § 7.”)是《法典》页面中唯一包含的会期法引文;
nd_statute会将其原样作为text返回,而不会将其省略。要还原真实修订历史,就必须解析北达科他州单独存档的会期法资料(ndlegis.gov/research-and-archives/session-laws,每个立法会期对应一卷 PDF,且未按条文编索引),这超出了此处的范围。 - 历史版本(条文修订前的文本)——不可用。ndlegis.gov 自身的历史档案(
research-and-archives/historical-constitution-and-century-code)仅收录 1930 年以前的修订法典/汇编法(1877—1925 年),早于第 12.1 编(1973 年颁布的刑法典)以及大多数现代《法典》的形成;此外,也没有像 Iowa 或 Indiana 那样按年份发布现行《法典》的档案。当前在线版本是唯一版本。
引文
北达科他州按编-章-条文引用,例如“12.1-16-01”(第 12.1 编、第 16 章、第 01 条:谋杀)或“47-16-13.1”(第 47 编、第 16 章、第 13.1 条:房东维护义务)。章号和条文号都可以带小数后缀(“12.1-27.2-02”、“47-16-07.3”)——nd_statute 会直接在预先构建的索引中查找引文,而不会将其解析为各个部分,因此索引本身使用的任何后缀格式都能正确往返处理。
数据来源
https://ndlegis.gov/general-information/north-dakota-century-code/index.html——整部《法典》的编/章/条文/标题索引。该索引仅预先构建一次,保存在src/nd-index-data.ts中;每次调用时不会重新获取。https://ndlegis.gov/cencode/t12-1c16.pdf——一个章节的完整法规文本(此处为第 12.1 编第 16 章;替换文件名即可获取其他章节)。nd_statute每次调用时都会实时获取此 PDF,并从中提取目标条文。
两者都是纯 HTML/PDF,由服务器直接渲染,不需要登录或 JavaScript;开发期间未观察到速率限制。
快速开始
添加到你的 MCP 客户端(Claude Desktop、Cursor、Windsurf 等):
{
"mcpServers": {
"north-dakota-code": {
"url": "https://gateway.pipeworx.io/north-dakota-code/mcp"
}
}
}
此端点实际提供的内容
https://gateway.pipeworx.io/north-dakota-code/mcp 上的 tools/list 会返回上表中的工具,以及 Pipeworx 的共享元工具——ask_pipeworx、discover_tools、search_within、remember/recall 和其余网关范围内的工具。因此,你看到的工具数量会多于此表:目前,单个工具包端点除了列出该工具包自己的工具,还会列出约 30 个共享工具。连接的 initialize 响应会说明确切范围,也是当天情况的权威依据。
这是有意为之,并非意外的多路复用。元工具可以让限定范围的连接回答此工具包未涵盖的问题——通过 ask_pipeworx 跨整个目录路由——无需添加第二个 MCP 服务。目前无法挂载不含这些元工具的工具包端点;如果额外的架构定义带来的上下文开销大于路由的价值,请只连接一次完整网关,而不是连接多个工具包端点。
或者连接完整的 Pipeworx 网关,直接列出每个工具包的工具,而不只是此工具包的工具:
{
"mcpServers": {
"pipeworx": {
"url": "https://gateway.pipeworx.io/mcp"
}
}
}
两个 URL 都连接到同一个网关和相同的 1819+ 个数据源。唯一的区别是直接列出哪些工具包的工具;通过任一端点,ask_pipeworx 都能访问所有工具。
没有 MCP 客户端?通过 HTTP 调用
curl -X POST https://gateway.pipeworx.io/v1/tools/nd_statute \
-H 'Content-Type: application/json' \
-d '{"citation":"12.1-16-01"}'
首次调用无需账户。查看任意工具:GET https://gateway.pipeworx.io/v1/tools/nd_statute。查找工具包:使用 {"query":"..."} 向 https://gateway.pipeworx.io/v1/tools/search_packs 发送 POST 请求。
独立运行(无需网关账户)
此软件包也可作为本地 stdio MCP 服务运行——无需 Pipeworx 账户,也无需经由网关往返:
{
"mcpServers": {
"north-dakota-code": {
"command": "npx",
"args": ["-y", "@pipeworx/mcp-north-dakota-code"]
}
}
}
或者直接运行,确认它能够启动:
npx -y @pipeworx/mcp-north-dakota-code
它通过 stdin/stdout 使用 MCP,并且对 initialize/tools/list/tools/call 的响应仅包含此工具包的工具——不包含上方网关连接所添加的任何共享元工具。来源相同,工具相同,但没有 ask_pipeworx 路由。
使用 ask_pipeworx
你可以不直接调用工具,而是用通俗的英语提问——此功能在上方的工具包端点和完整网关上都可用:
ask_pipeworx({ question: "your question about North Dakota Code data" })
网关会选择合适的工具并自动填写参数。
更多信息
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。