法律检索知识库

一个基于FastMCP和mcp-refcache构建的综合性法律研究知识库,提供混合检索(语义搜索+结构化查询)功能,支持多法域法律文档检索。

  • by l4b4r4b4b4
  • HTML
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 l4b4r4b4b4/legal-mcp

使用说明

法律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                         │
└─────────────────────────────────────────────────────────────────┘

快速开始

先决条件

安装

# 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。

构建/更新工作流:

  1. 生成发现快照(手动网络IO;有界/礼貌):
uv run python scripts/berlin_portal_discovery.py
  1. 转换快照→ 捆绑的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许可证-请参阅 许可证 了解详情。

相关项目

致谢