关于 uk-legislation-mcp-server
面向法律研究者和政策分析人员的 UK 法律资料 MCP 服务,可按日期检索和阅读 legislation.gov.uk 法规,并解析引文、查看修订及追踪发布记录。
主要功能
- 01按文本、标题和年份检索法规
- 02按现行、制定时或指定日期阅读
- 03解析法规引文及条款位置
- 04查询法规修订与影响记录
- 05追踪法规发布变更
适用场景
- 01核对法规在历史日期的文本
- 02从引文快速定位法规条款
- 03分析法规的修订及未生效影响
- 04监测指定时间段内的法规发布
MCP 相关
通过 MCP 提供法规检索、阅读、引文解析、修订查询和变更追踪工具,并提供资源查询词汇表的工具。支持 STDIO 和 Streamable HTTP。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://uk-legislation.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-uk-legislation https://uk-legislation.caseyjhand.com/mcp{"mcpServers":{"cyanheads-uk-legislation":{"type":"http","url":"https://uk-legislation.caseyjhand.com/mcp"}}}在 Cursor 中打开{"servers":{"cyanheads-uk-legislation":{"type":"http","url":"https://uk-legislation.caseyjhand.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"cyanheads-uk-legislation":{"type":"http","url":"https://uk-legislation.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-uk-legislation":{"serverUrl":"https://uk-legislation.caseyjhand.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
6| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| page | integer | 否 | 页码(1–10,000)。 |
| text | string | 否 | 全文查询。支持 AND/OR、"quoted phrases" 和词干提取。省略则执行标题搜索或列表查询。 |
| year | integer | 否 | 日历年份(也适用于按王室纪年编号的 1963 年以前法案)。不能与 year_from/year_to 组合。 |
| as_of | string | 否 | 时间点 YYYY-MM-DD:仅返回该日期有效的法律(排除尚未颁布或制定的条目)。省略则查询现行法律。不能与 extent 组合。legislation.gov.uk 尚未记录许多近期条款的条款级适用范围,因此结果为空并不能证明没有条款适用于该地区。 |
| limit | integer | 否 | 每页结果数(1–50)。 |
| title | string | 否 | 必须全部出现在标题中的词语。对于已知简称或引文,uklaw_lookup_citation 可精确查找。 |
| types | array | 否 | 类型代码(ukpga、uksi、asp、eur、…)和/或分组(all、primary、secondary、eu-origin、draft)。"all" 涵盖英国及源自 EU 的法律,但不包括草案,并会覆盖其他任何值。uklaw_list_reference topic types 可列出代码。 |
| extent | array | 否 | 地域适用范围:england、wales、scotland、ni。如果某条法律的任一条款适用于该地区,则该法律匹配。不能与 as_of 组合。legislation.gov.uk 尚未记录许多近期条款的条款级适用范围,因此结果为空并不能证明没有条款适用于该地区。 |
| year_to | integer | 否 | 范围的最晚日历年份;另一端可省略。 |
| year_from | integer | 否 | 范围的最早日历年份;另一端可省略。 |
| extent_match | enum | 否 | 仅与 extent 搭配使用。applicable:条款适用于指定范围内的任何部分;exact:条款仅适用于该范围。applicable | exact |
详细介绍
@cyanheads/uk-legislation-mcp-server
通过 MCP 搜索和阅读任意日期的英国法律,解析引文、列出修订,并追踪变更。支持 STDIO 或 Streamable HTTP。
概览
legislation.gov.uk 收录的英国成文法:适用于英国、英格兰、苏格兰、威尔士和北爱尔兰的主要立法、次级立法及源自欧盟的立法。解析引文,按文本或标题搜索;阅读当前生效、颁布时或过去某个日期的条文,并追踪修订。无需 API 密钥。
工具
| 工具 | 描述 |
|---|---|
uklaw_search_legislation | 按全文或标题搜索,或按类型和年份列出,并按适用范围和时间点筛选 |
uklaw_get_document | 阅读项目或条文的修订版、颁布或制定时的版本,或指定日期的版本,并查看其编辑状态和未应用的效力 |
uklaw_get_amendments | 列出针对某项目记录的效力(修订、废止、生效、修改),或由该项目产生的效力 |
uklaw_track_changes | 阅读 legislation.gov.uk 的发布日志,查询最长 31 天的时间段 |
uklaw_lookup_citation | 将引文、简称或 legislation.gov.uk URI 解析为规范项目和条文 |
uklaw_list_reference | 离线解读类型代码、适用范围、版本关键词、注释字母、引文格式及其他词汇 |
功能参考
uklaw_search_legislation 工具
text(全文搜索:AND/OR、“带引号的短语”、词干匹配)和/或title(每个词都必须出现),也可不提供以上参数,按类型和年份列出;limit为 1–50(默认 20),并可使用page- 筛选条件:
types(代码,如ukpga、uksi、eur,或分组all、primary、secondary、eu-origin、draft;默认all,不包含草案)、year或year_from/year_to(1267–2100)、extent(england、wales、scotland、ni)及extent_match(applicable或exact),以及as_of(YYYY-MM-DD);extent和as_of不能同时使用 - 每条结果都包含可传给
uklaw_get_document的item路径;has_more表示还有下一页;标题搜索和列表还会提供facets(类型计数和最新的 25 个年份)
uklaw_get_document 工具
item为完整路径(ukpga/2018/12、uksi/2019/419、eur/2016/679、王朝纪年ukpga/Eliz2/3-4/19)或 legislation.gov.uk URI;provision为路径(section/45/2/f、schedule/2/paragraph/3)或简写形式(s. 45(2)(f)、Sch. 2 para. 3);version为current(默认)、enacted(或made、adopted、created),或YYYY-MM-DD日期;language为en或cykind为full(包含其annotations的 Markdowntext)、outline(供后续读取的条款路径,每次调用 100 条,由outline_offset指定偏移量),或pdf_only(links.pdf);超过 20,000 个字符的文本,或包含超过 25 个末级条款的项目,会以大纲形式返回(没有更小条款可列出的条款将完整返回,最多 40,000 个字符,超出部分会截断,并附有指向全文的提示);match_text会列出包含指定词语的项目条款editorial(document_status、outstanding_effects、caveat)和unapplied_effects(前 20 项,可在项目或条款级别查看)展示修订文本的可依赖程度;version.available列出可作为version传入的版本
uklaw_get_amendments 工具
item可为完整或部分路径(uksi、ukpga/2018);direction为affected(默认:对该项目作出的修改)或affecting(该项目作出的修改);筛选条件包括counterpart(另一项目的完整或部分路径)、status(all、unapplied、applied;默认all)和provision(需要完整项目;每次调用最多扫描 1,500 项效力记录)limit为 1–100(默认 20),使用next_cursor继续查询;每项效力记录都会列出双方及其条款、in_force日期、applied/outstanding状态和notes;total统计条款筛选前的效力记录数,scan报告扫描范围- 1963 年以前的法案按公历年份查询(
ukpga/1925/20),草案未编入索引:两者都会返回regnal_item/draft_item错误,需改用其他查询方式
uklaw_track_changes 工具
start_date(必填)和end_date(默认为start_date),时间范围最多 31 天;筛选条件包括content_type(legislation、changes、draft、associated-documents)、direction(仅适用于changes)、category(primary、secondary、eu-origin;仅适用于legislation或associated-documents)、item、new_only和event(published、withdrawn)limit为 1–80(默认 40),使用next_cursor继续查询;mode为day_walk(按日期从新到旧,每次调用最多发送 4 个上游请求)或item_log(完整的item路径会读取该项目自身的日志,并报告read_back_to)changes事件不包含效力详情:可对其item调用uklaw_get_amendments获取详情
uklaw_lookup_citation 工具
- 一个最长为 300 个字符的
citation:编号引文、简短标题或 legislation.gov.uk URI,可选择附带条文(格式如下) - 返回规范的
item路径;如果引用了条文,还会返回provision_found,并根据当前版本进行核验。如果未找到或标题存在歧义,则返回found: false,并提供guidance或最多 20 个candidates,而非报错
| 格式 | 示例 | 解析为 |
|---|---|---|
| 按章编号的英国法律 | 2018 c. 12 | ukpga/2018/12;1963 年以前的法律会按公历年份搜索,并返回王朝纪年候选项 |
| 北爱尔兰议会法律 | 2016 c. 5 (N.I.) | nia/2016/5 |
| 英国法定文书 | S.I. 2019/419、SI 2019 No. 419、S.I. 2002/808 (W. 89) | uksi/2019/419;忽略其他系列编号,威尔士和北爱尔兰的法定文书规范化为 wsi / nisi |
| 苏格兰法定文书 | S.S.I. 2020/123 | ssi/2020/123 |
| 北爱尔兰法定规则 | S.R. 2020/12、S.R. 2020 No. 12 | nisr/2020/12 |
| 苏格兰和威尔士的法律与措施 | 2020 asp 13、asp 2020/13、2016 anaw 1、2021 asc 1、2010 nawm 1 | asp/2020/13、anaw/2016/1、asc/2021/1、mwa/2010/1 |
| 欧盟来源的法律 | Regulation (EU) 2016/679、Regulation (EC) No 1535/2003、Directive 95/46/EC、Decision (EU) 2019/419;也可以在开头注明发布机构(Council Regulation (EC) No 1/2003) | eur/2016/679、eur/2003/1535(2015 年以前的编号格式为编号/年份)、eudr/1995/46、eudn/2019/419 |
| 定义名称 | UK GDPR | eur/2016/679 |
| legislation.gov.uk URI | https://www.legislation.gov.uk/ukpga/2018/12/section/45 | 拆分为 item、条文和版本 |
| 简称 | Data Protection Act 2018、Human Rights Act 1998 (c. 42) | 按标题和年份解析;如果标题无法解析,末尾的章编号可用于按编号解析法律 |
任何格式都可以在末尾附上条文(s. 45(2)(f)、section 45、reg. 5、art. 28(3)、r. 7、r. 3.4、Sch. 2 para. 3、Pt 3),也可以先写条文,再接 "of" 或 "of the":section 45 of the Data Protection Act 2018。uklaw_list_reference 的 citation_formats 主题会返回相同列表。
uklaw_list_reference 工具
topic:types、type_groups、extents、versions、document_status、annotation_types、effects、provision_paths、citation_formats、publication_log、coverage或attribution- 离线运行,不会向 legislation.gov.uk 发送请求;每个条目包含
key、label、description,以及可选的details
功能
基于 @cyanheads/mcp-ts-core:支持 stdio 和 Streamable HTTP 传输、可插拔身份验证(none / jwt / oauth)、可切换存储(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1),以及结构化日志记录和可选的 OpenTelemetry 跟踪。
legislation.gov.uk 专属功能:
- 无需密钥即可调用 legislation.gov.uk API 的客户端:文档使用 CLML XML,搜索、效力信息和 Publication Log 使用 Atom 源
- 遵循 legislation.gov.uk 的合理使用政策:每个请求都附带可识别客户端的 User-Agent;全进程共用一个队列,以固定间隔发起请求(默认间隔为 1 秒),并采用适用于此服务的 robots.txt 中更长的爬取延迟(最长 60 秒);每次工具调用最多向上游发出 4 个请求,并设有 45 秒的截止时间
- 全进程共用响应缓存,缓存时长取自上游的
max-age(最长 1 小时),并通过If-Modified-Since重新验证 - 将引证简写(
s. 45(2)(f)、reg. 5、Sch. 2 para. 3)规范化为条款路径;支持 1963 年以前的君主纪年路径以及威尔士语文本(language: "cy") - 仅提供 PDF 条目的链接,绝不获取其内容,因为 legislation.gov.uk 的 robots.txt 有此要求
便于 Agent 使用的输出:
- 每次读取文档时,都会在文本中返回其编辑状态(
editorial.document_status、caveat、outstanding_effects)以及影响该文档的unapplied_effects,以便调用方判断修订文本是否尚未反映最新修正 uklaw_lookup_citation未找到匹配项时,会返回found: false,并附带guidance或candidates,而非报错- 每个工具的类型化错误原因(
provision_not_found、version_not_found、regnal_item,……)都附有恢复提示,指出下一步应调用什么 - 每个返回立法内容的响应都包含
attribution,其中列出内容所需的许可信息(参见许可证) - 将上游文本视为数据:立法文本、注释和效力说明在
content[]中以引用块形式呈现,内嵌值会转义,URI 会进行百分号编码
快速开始
公共托管实例
公共实例位于 https://uk-legislation.caseyjhand.com/mcp,无需安装即可使用。该实例提供 Streamable HTTP;每个客户端的配置格式各不相同。
Claude Code 配置:
claude mcp add --transport http uk-legislation-mcp-server https://uk-legislation.caseyjhand.com/mcp
Cline 配置(cline_mcp_settings.json):
{
"mcpServers": {
"uk-legislation-mcp-server": {
"type": "streamableHttp",
"url": "https://uk-legislation.caseyjhand.com/mcp"
}
}
}
Cursor 配置(mcp.json):
{
"mcpServers": {
"uk-legislation-mcp-server": {
"url": "https://uk-legislation.caseyjhand.com/mcp"
}
}
}
Claude Desktop 可在 Settings → Connectors 下添加远程服务。
托管实例的所有调用方共用一个请求队列,并按照合理使用政策,将 legislation.gov.uk 请求的发送频率限制为每秒 1 个。如需持续使用,请运行自己的实例。
自托管 / 本地运行
将以下内容添加到 MCP 客户端配置文件中。
{
"mcpServers": {
"uk-legislation-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/uk-legislation-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
或者使用 npx(无需 Bun):
{
"mcpServers": {
"uk-legislation-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/uk-legislation-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
或者使用 Docker:
{
"mcpServers": {
"uk-legislation-mcp-server": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/uk-legislation-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+)。
- 无需 API 密钥或账户。legislation.gov.uk 的合理使用政策要求非浏览器客户端标明身份,因此运行共享部署时,请将
UK_LEGISLATION_CONTACT设置为电子邮箱或 URL。
安装
- 克隆代码库:
git clone https://github.com/cyanheads/uk-legislation-mcp-server.git
- 进入目录:
cd uk-legislation-mcp-server
- 安装依赖项:
bun install
- 配置环境:
cp .env.example .env
# edit .env and set UK_LEGISLATION_CONTACT as needed
配置
| 变量 | 说明 | 默认值 |
|---|---|---|
UK_LEGISLATION_CONTACT | 附加到 User-Agent 的电子邮件地址或 URL,以便 legislation.gov.uk 联系运营方。在共享部署中设置此项。 | 无 |
UK_LEGISLATION_MIN_REQUEST_GAP_MS | 进程内上游请求开始之间的最小间隔,单位为毫秒;至少为 250。如果此服务器的 User-Agent 对应的 robots.txt 爬取延迟更长,则会提高此值。使用同一 User-Agent 的多个副本会分摊公平使用限额,因此至少应设置为 250 毫秒 × 副本数。 | 1000 |
UK_LEGISLATION_CACHE_MAX_MB | 响应缓存大小上限,单位为 MB(8–1024)。 | 64 |
MCP_TRANSPORT_TYPE | 传输方式:stdio 或 http。 | stdio |
MCP_HTTP_PORT | HTTP 服务端口。 | 3010 |
MCP_HTTP_HOST | HTTP 服务主机。 | 127.0.0.1 |
MCP_SESSION_MODE | HTTP 会话模式:stateless、stateful 或 auto。.env.example 和 Docker 镜像设置为 stateless。 | auto |
MCP_AUTH_MODE | 身份验证方式:none、jwt 或 oauth。 | none |
MCP_LOG_LEVEL | 日志级别(debug、info、warning、error 等)。 | info |
LOGS_DIR | 日志文件目录(仅限 Node.js)。 | <app-root>/logs |
OTEL_ENABLED | 启用 OpenTelemetry。 | false |
完整的可选覆盖项列表,请参阅 .env.example。
运行服务
本地开发
-
构建并运行生产版本:
# One-time build bun run rebuild # Run the built server bun run start:http # or bun run start:stdio -
运行检查和测试:
bun run devcheck # Lints, formats, type-checks, and more bun run test # Runs the test suite
项目结构
| 目录 | 用途 |
|---|---|
src/index.ts | createApp() 入口:注册六个工具;setup() 读取 robots.txt,并构建节流器、响应缓存、客户端和服务。 |
src/config | 使用 Zod 解析和验证服务专用的环境变量。 |
src/mcp-server/tools/definitions | 工具定义(*.tool.ts),以及共用的输入/输出架构和 Markdown 渲染辅助工具。 |
src/services/legislation | legislation.gov.uk 服务层:HTTP 客户端、响应缓存、引文和条款路径解析、CLML 和 Atom 解析器、参考数据、署名信息。 |
tests/ | 与 src/ 结构对应的单元测试,使用录制的 CLML 和 Atom 样例运行。 |
开发指南
开发指南和架构规则请参阅 CLAUDE.md。简要说明:
- 处理程序抛出异常,框架负责捕获——工具逻辑中不要使用
try/catch - 使用
ctx.log记录日志;对于预期失败,使用ctx.fail并声明原因 - 在
src/mcp-server/tools/definitions/index.ts的allToolDefinitions中注册新工具 - 封装外部 API 调用:验证原始数据 → 规范化为领域类型 → 返回输出架构;绝不伪造缺失字段
贡献
欢迎提交问题。提交前请运行检查和测试:
bun run devcheck
bun run test
许可证
本项目采用 Apache 2.0 许可证。详情请参阅 LICENSE 文件。
legislation.gov.uk 上的立法内容 © Crown,享有数据库权利,并根据 Open Government Licence v3.0 授权。源自欧盟的条目还注明 European Union(© European Union,1998-2020;根据 Commission Decision 2011/833/EU 重新使用);由 Westlaw UK 提供给 legislation.gov.uk 的 1987 年以前的法定文书则注明 Westlaw。每个返回立法内容的工具都会在 attribution 中列出适用于其内容的行。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。