使用说明
法律MCP
一个全面的法律研究知识库,作为MCP服务器,使用 FastMCP 和 mcp参考缓存为AI助手提供跨多个司法管辖区的法律文件的强大混合检索(语义搜索+结构化查询)。
主要特点
- 📦 Git跟踪法律语料库 --所有法律文件均采用git版本控制,以实现完全可追溯性
- 🔍 混合检索 --将语义搜索与结构化查询(过滤器、日期范围、布尔逻辑)相结合
- 📊 多级分块 --嵌入法律的文件→ Book → 部分→ 段落级别
- 📅 版本跟踪 --跟踪随时间推移的法律修订,查询“截至X日的法律”
- 💾 预播数据 --带有预处理语料库的船只,可立即离线工作
- 🔗 RefCache集成 --大型法律文本作为引用返回,减少了上下文窗口的使用
支持的司法管辖区
| 管辖权 | 来源 | 格式 | 状态 |
|---|---|---|---|
| 🇩🇪 德国联邦法律 | 法律-在-internet.de | XML | 🟡 发展中 |
| 🇩🇪 德国法院判决 | 法学-im-internet.de | XML | ⚪ 计划中 |
| 🇩🇪 德国国家法律(柏林) | 法律.berlin.de (门户: bsbe) |
离线目录(SQLite)+按需检索 | 🟡 发展中 |
| 🇩🇪 德国国家法律(其他) | Landesrecht门户网站 | XML | ⚪ 计划中 |
| 🇪🇺 欧盟法律 | 欧元莱克斯 | API/XML | ⚪ 计划中 |
| 🇺🇸 美国联邦法律 | Congress.gov API⚪ 计划中 | ||
| 🇺🇸 美国判例法 | 法庭听众 API⚪ 计划中 |
建筑
┌─────────────────────────────────────────────────────────────────┐
│ Legal-MCP Server (FastMCP) │
├─────────────────────────────────────────────────────────────────┤
│ MCP Tools │
│ • search_laws() - Semantic search (embeddings) │
│ • query_laws() - Structured queries (SQL-like filters) │
│ • get_law() - Direct citation lookup │
│ • hybrid_search() - Combined semantic + structured │
│ • find_related() - Similar documents │
│ • law_history() - Version tracking │
├─────────────────────────────────────────────────────────────────┤
│ Hybrid Retrieval Layer │
│ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ Semantic Search │ │ Structured Queries │ │
│ │ (Vector/Cosine) │ │ (SQL/Filters/BM25) │ │
│ └─────────────────────┘ └─────────────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ Storage Layer │
│ • SQLite (metadata, structured queries, FTS) │
│ • ChromaDB (vector embeddings) │
│ • RefCache (full document text) │
├─────────────────────────────────────────────────────────────────┤
│ Git-Tracked Data (data/) │
│ • raw/ - Original XML downloads │
│ • processed/ - Parsed & chunked documents │
│ • embeddings/ - Pre-computed vectors │
└─────────────────────────────────────────────────────────────────┘
快速开始
先决条件
- Python 3.12+
- 紫外线 (推荐)或pip
安装
# Clone the repository (includes pre-seeded legal corpus)
git clone https://github.com/l4b4r4b4b4/legal-mcp
cd legal-mcp
# Install dependencies
uv sync
# Run the server (stdio mode for Claude Desktop)
uv run legal-mcp
# Run the server (SSE mode for deployment)
uv run legal-mcp --transport sse --port 8000
与Claude Desktop一起使用
添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"legal-mcp": {
"command": "uv",
"args": ["run", "legal-mcp"],
"cwd": "/path/to/legal-mcp"
}
}
}
MCP工具
可用文档目录(脱机)
列表 可用的 来自捆绑的离线目录的文档(无网络IO)。这是用于发现(ID+规范URL),而不是内容检索。
工具:
list_available_documents(source, prefix=None, offset=0, limit=50)berlin_list_available_documents(...)(兼容性别名)
示例:
# List first 25 Berlin documents (IDs + canonical URLs)
list_available_documents(
source="de-state-berlin-bsbe",
offset=0,
limit=25,
)
# Filter Berlin norms ("jlr") vs decisions ("NJRE")
list_available_documents(
source="de-state-berlin-bsbe",
prefix="jlr",
offset=0,
limit=25,
)
list_available_documents(
source="de-state-berlin-bsbe",
prefix="NJRE",
offset=0,
limit=25,
)
# Compatibility alias (delegates to list_available_documents with Berlin source)
berlin_list_available_documents(prefix="jlr", offset=0, limit=25)
语义搜索
跨法律语料库的自然语言查询:
search_laws(
query="employee protection against unfair dismissal",
jurisdiction=["DE-Federal"],
chunk_level="section", # law, book, title, section, paragraph
limit=10
)
结构化查询
用于精确查找的类似SQL的过滤:
query_laws(
filters={
"law_id": "bgb",
"contains": "Schadensersatz",
"effective_after": "2020-01-01",
"status": "active"
}
)
引文查询
通过法律引用直接查找:
get_law(
citation="BGB § 823 Abs. 1",
date="2023-06-15" # Law as of this date
)
混合搜索
将语义搜索与结构化过滤器相结合:
hybrid_search(
semantic_query="consumer protection in online purchases",
filters={"jurisdiction": "EU", "law_type": "Richtlinie"},
full_text="Widerruf OR Rücktritt"
)
相关文件
查找类似或引用的法律:
find_related(
document_id="bgb-823",
relation_type="similar" # similar, cites, cited_by, amends
)
版本历史
跟踪随时间的变化:
law_history(law_id="bgb", section_ref="§ 823")
compare_versions(
law_id="bgb",
section_ref="§ 823",
version_a="2020-01-01",
version_b="2024-01-01"
)
离线目录构建(柏林)
Berlin的可用性目录基于站点地图构建,并作为SQLite数据库提交,因此服务器可以离线列出可用的文档ID。
构建/更新工作流:
- 生成发现快照(手动网络IO;有界/礼貌):
uv run python scripts/berlin_portal_discovery.py
- 转换快照→ 捆绑的SQLite目录(离线):
uv run python scripts/catalog/build_catalog_sqlite.py --replace
生成的文件是:
app/catalog_data/de_state_berlin_bsbe.sqlite
笔记:
- 目录仅存储元数据(文档ID、规范URL、派生前缀)。
- 文档内容检索仍然是按需进行的,并且是单独处理的。
- 如果您在工具中看到“未找到目录”错误,请确保SQLite文件存在于上述路径中(并且不是Git LFS指针文件)。
数据架构
Git跟踪法律语料库
所有法律文件都以git进行版本控制:
data/
├── raw/ # Original XML downloads
│ └── de-federal/
│ ├── bgb.xml # Bürgerliches Gesetzbuch
│ ├── stgb.xml # Strafgesetzbuch
│ ├── gg.xml # Grundgesetz
│ └── ...
├── processed/ # Parsed & chunked (JSON/Parquet)
│ └── de-federal/
│ ├── documents.parquet # All chunks with metadata
│ └── index.json # Law index
└── embeddings/ # Pre-computed embeddings
└── de-federal/
└── embeddings.parquet
git跟踪的好处:
- 📜 完全可追溯性 --每一项法律变更都是一次git承诺
- 🔍 差异化 —
git diff确切地显示了修正案中的变化 - 🔄 可复现的 --克隆并获得完全相同的语料库
- 📦 预播种 --安装后立即脱机工作
- 📋 审计跟踪 --每个法律版本是什么时候被摄入的?
多级分块
文档以多个粒度级别嵌入,以实现最佳检索:
| 级别 | 用例 | 示例 |
|---|---|---|
| 法律 | “什么是合同法?” | 返回BGB概述 |
| 图书 | “什么是义务规则?” | 返回BGB图书2 |
| 标题 | “什么是租赁终止规则?” | 返回BGB§542-580a |
| 章节 | “什么是BGB第823条?” | 返回特定章节 |
| 段落 | “定义Vorsatz” | 返回特定段落 |
配置
from legal_mcp import Config
config = Config(
# Pre-seeded data (shipped with package)
use_bundled_data=True,
bundled_data_path="data/",
# Custom data directory (override bundled)
custom_data_path=None,
# Live updates (download new laws)
enable_live_updates=False,
update_check_interval_days=7,
# Embedding model
embedding_model="paraphrase-multilingual-mpnet-base-v2",
# Or use API: "openai:text-embedding-3-large"
)
项目结构
legal-mcp/
├── app/
│ ├── __init__.py
│ ├── __main__.py # CLI entry point
│ ├── server.py # Main MCP server
│ ├── config.py # Configuration
│ ├── ingestion/ # Data ingestion pipeline
│ │ ├── download.py # Bulk XML download
│ │ ├── parse.py # XML parsing
│ │ ├── chunk.py # Multi-level chunking
│ │ └── embed.py # Embedding generation
│ ├── retrieval/ # Search & query layer
│ │ ├── semantic.py # Vector search
│ │ ├── structured.py # SQL/filter queries
│ │ └── hybrid.py # Combined retrieval
│ ├── storage/ # Storage backends
│ │ ├── documents.py # SQLite document store
│ │ └── vectors.py # ChromaDB vectors
│ └── tools/ # MCP tool definitions
│ ├── search.py
│ ├── query.py
│ └── history.py
├── data/ # Git-tracked legal corpus
│ ├── raw/
│ ├── processed/
│ └── embeddings/
├── tests/
├── pyproject.toml
└── README.md
发展
设置
uv sync
uv run pre-commit install --install-hooks
运行测试
uv run pytest
uv run pytest --cov
代码检查
uv run ruff check . --fix --unsafe-fixes
uv run ruff format .
更新法律语料库
# Download latest laws from gesetze-im-internet.de
uv run legal-mcp ingest download --jurisdiction de-federal
# Process and embed
uv run legal-mcp ingest process
uv run legal-mcp ingest embed
# Commit changes
git add data/
git commit -m "Update: BGBl. I Nr. 123/2026"
数据源
官方消息来源(禁止网络抄袭!)
| 来源 | 数据 | 许可证 |
|---|---|---|
| 法律-在-internet.de | 德国联邦法律(XML) | 公共领域 |
| 法学-im-internet.de | 法院判决(XML) | 公共领域 |
| 欧元莱克斯 | 欧盟法规(API) | CC BY 4.0 |
| Congress.gov | 美国立法(API) | 公共领域 |
| 法庭听众 | 美国判例法(API) | CC0 |
所有数据均以结构化格式(XML/API)从政府官方来源下载。不需要网络抓取。
路线图
- [x] 阶段0:建筑设计和规划
- [ ] 第一阶段德国联邦法律(gesetze-im-internet.de XML)
- [ ] 第2阶段:版本跟踪和增量更新
- [ ] 第三期:欧盟法律(EUR-Lex API)
- [ ] 阶段4:美国法律(Congress.gov,CourtListener)
- [ ] 阶段5:德国州法律、法院判决
许可证
MIT许可证-请参阅 许可证 了解详情。
相关项目
致谢
- 法律-在-internet.de --联邦司法部
- 欧元莱克斯 --欧盟出版办公室
- 免费法律项目 --CourtListener和开放法律数据