关于 Puerto Rico Code
用于在政府发布的 OGP 馆藏中检索波多黎各法令的 MCP 服务,面向法律研究。它返回原文西班牙语文本,且仅为已核实的民法典和刑法典标题提供 LPRA 引文映射。
主要功能
- 01按引文或法案编号获取法条
- 02搜索法案标题和主题
- 03搜索两部已映射法典的条文
- 04提供来源 PDF 链接和修订日期
适用场景
- 01按 LPRA 引文查找波多黎各法令
- 02查找符合西班牙语法律主题的法案
- 03查阅法条的已发布文本
MCP 相关
通过 Pipeworx 或独立本地 stdio MCP 服务,向 MCP 客户端提供法令查询和搜索工具。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://gateway.pipeworx.io/puerto-rico-code/mcpclaude mcp add --transport http pipeworx-io-puerto-rico-code https://gateway.pipeworx.io/puerto-rico-code/mcp{"mcpServers":{"pipeworx-io-puerto-rico-code":{"type":"http","url":"https://gateway.pipeworx.io/puerto-rico-code/mcp"}}}在 Cursor 中打开{"servers":{"pipeworx-io-puerto-rico-code":{"type":"http","url":"https://gateway.pipeworx.io/puerto-rico-code/mcp"}}}在 VS Code 中打开{"mcpServers":{"pipeworx-io-puerto-rico-code":{"type":"http","url":"https://gateway.pipeworx.io/puerto-rico-code/mcp"}}}{"mcpServers":{"pipeworx-io-puerto-rico-code":{"serverUrl":"https://gateway.pipeworx.io/puerto-rico-code/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
43| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| q | string | 否 | question 的别名。 |
| ask | string | 否 | question 的别名。 |
| text | string | 否 | question 的别名。 |
| input | string | 否 | question 的别名。 |
| packs | array | 否 | 可选。将路由限制为这些包的 slug(例如 ["sec-form-d","sec-13f"]),路由器随后只会从这些包中的工具进行选择。省略则使用默认的完整目录路由。Slug 可从 list_packs / search_packs / https://pipeworx.io/directory 获取;未列出或未知的 slug 会被忽略,并在 _meta.pack_scope.ignored 中列出。如果没有任何 slug 能匹配问题,则会在整个目录中路由,并设置 _meta.pack_scope.full_catalog:true(绝不会返回空答案)。 |
| query | string | 否 | question 的别名。 |
| prompt | string | 否 | question 的别名。 |
| message | string | 否 | question 的别名。 |
| question | string | 是 | 用自然语言表达的问题或请求。支持 query、q、prompt、text、input、ask、message 作为别名。 |
详细介绍
@pipeworx/puerto-rico-code
波多黎各法规——波多黎各立法机关制定的「leyes」(法律),可按引文和主题查询;对于本工具包已核实能明确对应到单一法律的两部汇编法典,也支持类似「33 LPRA 5001」的 LPRA 引文。 文本为发布时的西班牙语原文,绝非机器翻译。无需密钥。
Pipeworx 的一部分 — Pipeworx 是一个 MCP 网关,可将 AI Agent 连接到 1819 多个实时数据源。这是一个独立的非官方集成,与上游提供方无关联,也未经其认可或发布。
工具
pr_statute(citation)— 按引文获取波多黎各法规条文/章节的全文。接受 LPRA 引文(「33 LPRA 5001」是《刑法典》第 1 条;「31 LPRA 5311」是《民法典》第 1 条),也接受单独的法律编号(「55-2020」),或带条文号的法律编号(「146-2012 Art. 92」、「146-2012 Art. 93」)。不带条文号的法律编号会返回法律级元数据(标题、年份、「tipo」、URL),而不是法规文本。返回标题、发布时的完整西班牙语原文,以及来源 PDF URL 和data_as_of。pr_search(query, limit?)— 按西班牙语主题/关键词搜索。分两层:对两部映射到 LPRA 的法典条文正文进行真正的全文搜索(result_type: "lpra_section"— 返回正文中实际匹配的结果及其 LPRA 引文);以及对 OGP 完整的约 15,500 部法律目录进行标题/条文标题搜索(result_type: "act"),用于其他所有内容。
身份验证
无需密钥。
本工具包涵盖的内容,以及明确不涵盖的内容
商业销售的汇编版 Leyes de Puerto Rico Anotadas (LPRA)(Westlaw/Lexis)并非免费,本工具包不会涉及。免费且由政府发布的内容是 Oficina de Gerencia y Presupuesto(OGP)的「Biblioteca Virtual — Leyes de Referencia」(bvirtualogp.pr.gov),这是一个无需登录即可访问的公开 SharePoint 2013 网站,提供约 15,500 部法律的 PDF;每部法律要么是「Ley según enmendada」(OGP 自行汇编、纳入所有修订并持续更新的文本),要么是「Ley original」(对于 OGP 尚未汇编的法律,提供颁布时的原文)。
LPRA 大约有 35 个「títulos」,其中大多数汇集了多部不同的法律。本工具包只有在逐一查阅某部法律自己的 PDF 并核实后,才会将 LPRA 引文映射到该条文的文本——OGP 发布的每部「según enmendada」法律都会在其各自条文中以内联形式标注 LPRA 引文(已实时确认,例如「Artículo 92. — Asesinato. (33 L.P.R.A. § 5141)」),因此映射直接取自来源,绝非猜测。目前已映射的内容(src/index.ts 中的 LPRA_CODES):
| LPRA 标题 | 法律 | 名称 |
|---|---|---|
| 31 | 55-2020 | Código Civil de Puerto Rico de 2020 |
| 33 | 146-2012 | Código Penal de Puerto Rico de 2012 |
对于所有其他标题,pr_statute 会返回 lpra_title_not_mapped,并列出已映射的标题,而不会猜测哪些法律涵盖该标题——如果知道具体法律编号,请改用该编号调用 pr_statute(许多法律,包括 Ley 54-1989「Ley para la Prevención e Intervención con la Violencia Doméstica」,都带有相同的内联 LPRA 注释,但未列入 LPRA_CODES,因为一个标题可能涵盖多部法律,且本工具包尚未核实该标题涵盖范围的全部内容——对于这些法律,仅提供单部法律查询)。
条文编号不一定是纯整数——「2.1-A」、「3.10-A」都是实际存在的编号(Ley 54-1989),也有「92」这样的普通编号(Ley 146-2012);pr_statute 接受 citation 参数中「Art.」格式的这两种形式。
两次 REST 请求,SharePoint 均允许匿名访问,无需身份验证令牌
_api/web/lists/getbytitle('PDF')/items?$filter=FileLeafRef eq '146-2012.pdf'可通过一个查询,将简单法案编号(例如「146-2012」)直接解析为其元数据(Title、Number、Years、Tipo)和 PDF 路径,无论 OGP 将其归档在哪个主题子文件夹中。已确认无法仅凭法案编号推导文件夹结构(146-2012位于PDF/Justicia/146-2012/146-2012.pdf,55-2020则位于顶层PDF/55-2020.pdf),因此这里使用平面列表筛选器进行解析,而非猜测路径。少数法案还附有英文译本,存放在PDF/2-ingles/或PDF/ingles/中;这些译本已排除,此工具包绝不会返回译本。- 对解析出的路径执行普通 GET 请求即可获取 PDF,再通过
shared/src/pdf-text.ts解码,并切分为各条条文。
此列表不接受对 FileSystemObjectType 使用 $filter,会返回 HTTP 500(「Column 'FileSystemObjectType' does not exist」——已于 2026-10-09 实时确认),尽管同一字段可用于 $select。OGP 自己的类别文件夹(其中一个的标题正是「Municipios」,否则会作为仅匹配标题子字符串的结果出现)改为在客户端筛除,方法是要求 Tipo 非空。
页脚噪声,以及它对长条文的影响
每份「según enmendada」PDF 都会在逐页文本流中插入重复页脚:引用法案标题的横幅后紧接着「Rev. <date> www.ogp.pr.gov ... Página N de M」。已实时确认:剥除前,《刑法典》的 125 页 PDF 中有 126 处此类内容,剥除后剩下 2 处(都不在任何条文正文中——一处是第 1 条之前的封面横幅,另一处是最后一条之后的「核验最新修订版」通知)。若保留这些噪声,文本跨页的条文中就会出现被插断的句子;src/index.ts 中的 stripPageFooters 会在切分前将其移除。带引号的标题及其「[Ley ..., según ...]」括号内容有时位于同一行,有时会被换行拆开(按颁布日期而非「N-YYYY」简写引用法案时,例如 Ley 54-1989 的「...Doméstica”\n[Ley 54 de 15 de agosto de 1989, según\n...」);剥除逻辑对这两种情况都能处理。
「Nota」注释
少数 LPRA 条文在源文件中包含两个标题:先是关于该条文的「nota」(注释,而非条文的实际内容),紧接着才是正文。例如,Ley 54-1989 中先有「Artículo 1.1 ... (8 L.P.R.A. § 601 nota)」,紧接着是「Artículo 1.2 ... (8 L.P.R.A. § 601)」。按 LPRA 条文编号解析时,如果同一编号有多个标题,解析器会优先选择非「nota」标题。
字符编码
SharePoint REST JSON 的响应类型为
application/json;odata=verbose;charset=utf-8(已实时确认),解码时会使用响应中声明的字符集,而非自行假定。此系列中的另一个工具包曾因经过的中继实际提供 ISO-8859-1,却假定使用 UTF-8,导致所有「§」都变成 U+FFFD。
数据源
https://bvirtualogp.pr.gov/ogp/Bvirtual/leyesreferencia/_api/web/lists/getbytitle('PDF')/items— 通过 SharePoint REST 访问 OGP「Leyes de Referencia」PDF 文档库(约 15,500 部法案)。$filter=FileLeafRef eq '<num>.pdf'用于解析简单法案编号;$filter=substringof('<query>',Title)用于按法案标题搜索。https://bvirtualogp.pr.gov/ogp/Bvirtual/leyesreferencia/PDF/...— 已解析出的 PDF,每部法案对应一份;提取文本后按条文切分。
已通过 prod Cloudflare 账户中的临时 wrangler dev --remote Worker 确认(2026-10-09):bvirtualogp.pr.gov 不会阻止 Worker 出站请求;REST API 和 PDF 获取的响应都与直接 curl 返回的字节完全一致。与此系列工具包中其他位置的 oscn.net/le.utah.gov 不同,这里无需使用出站中继。
快速开始
将此 MCP 服务添加到你的 MCP 客户端(Claude Desktop、Cursor、Windsurf 等):
{
"mcpServers": {
"puerto-rico-code": {
"url": "https://gateway.pipeworx.io/puerto-rico-code/mcp"
}
}
}
此端点实际提供的内容
https://gateway.pipeworx.io/puerto-rico-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/pr_statute \
-H 'Content-Type: application/json' \
-d '{"citation":"33 LPRA 5001"}'
首次调用无需账户。查看任意工具:GET https://gateway.pipeworx.io/v1/tools/pr_statute。查找工具:使用 {"query":"..."} 向 https://gateway.pipeworx.io/v1/tools/search_packs 发送 POST 请求。
独立运行(无需网关账户)
此软件包也可以作为本地 stdio MCP 服务运行,无需 Pipeworx 账户,也无需通过网关中转:
{
"mcpServers": {
"puerto-rico-code": {
"command": "npx",
"args": ["-y", "@pipeworx/mcp-puerto-rico-code"]
}
}
}
或者直接运行,以确认它能够启动:
npx -y @pipeworx/mcp-puerto-rico-code
它通过 stdin/stdout 使用 MCP 通信,并针对仅此工具包的工具响应 initialize/tools/list/tools/call——不包含上文网关连接所添加的共享元工具。来源相同,工具相同,但不支持 ask_pipeworx 路由。
使用 ask_pipeworx
你也可以用日常语言提问,而不是直接调用工具——此方式既适用于上面的工具包端点,也适用于完整网关:
ask_pipeworx({ question: "your question about Puerto Rico Code data" })
网关会自动选择合适的工具并填写参数。
更多信息
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。