Token导航 LogoToken导航TokenDH.com
Law Scrapper MCP logo
文档知识stdio官方级别未说明来源级核验

Law Scrapper MCP

MCP Server

一个用于访问和分析波兰法律文档的MCP服务器,支持AI驱动的法律研究和文档分析。

工具数

13

提示词数

0

GitHub Stars

13

资源数

0
PythonClaude文档处理ClaudeCursor

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

numikel

提供方

numikel

最后核验

2026/5/17 20:21

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

pip install -e .

详细介绍

法律刮刀MCP

一个全面的模型上下文协议(MCP)服务器,用于访问和分析API众议院的波兰法律行为,实现AI驱动的法律研究和文件分析。

License

特性

  • 全面的法律行为访问 -从Dziennik Ustaw(DU)和Monitor Polski(MP)全面获取波兰法律行为
  • 高级搜索和过滤 -按日期、类型、关键字、发布者和状态进行多条件搜索
  • 带有链式过滤的结果存储 -存储搜索结果并使用正则表达式、类型/状态/年份匹配、日期范围、排序进行筛选
  • 文档存储模式 -加载操作到内存中,以实现高效的节级导航和搜索
  • 详细的文档分析 -元数据、结构、引用和内容检索
  • 内容处理 -自动将PDF转换为文本和HTML转换为Markdown
  • 日期计算 -用于法律文件分析的专用数据工具
  • 系统元数据 -关键字、状态、文档类型和机构数据
  • FastMCP集成 -采用FastMCP框架构建,提供灵活的传输选项
  • 异步HTTP客户端 -具有重试逻辑和连接池的高效httpx客户端
  • TTL缓存 -具有可配置TTL的智能响应缓存
  • 结构化日志记录 -JSON和文本日志格式,便于调试
  • Docker支持 -使用docker compose进行容器化部署
  • 全面的文件 -示例和清晰的参数描述

需求

  • python:3.13或更高
  • 包管理器:uv(推荐)或pip
  • Internet连接:访问Sejm API终结点时必需
  • MCP兼容工具:游标IDE、Claude Code或其他MCP客户端

安装

使用紫外线(推荐)

# Clone the repository
git clone https://github.com/numikel/law-scrapper-mcp.git
cd law-scrapper-mcp

# Install dependencies
uv sync

# Install with dev dependencies
uv sync --extra dev

使用pip

# Clone the repository
git clone https://github.com/numikel/law-scrapper-mcp.git
cd law-scrapper-mcp

# Install dependencies
pip install -e .

使用uvx(无需安装)

为了在不克隆存储库的情况下进行快速测试:

# Run the server directly from GitHub
uvx --from git+https://github.com/numikel/law-scrapper-mcp law-scrapper

快速开始

STDIO传输(默认)

STDIO是MCP通信的默认传输方式。启动服务器并从MCP客户端连接:

# Run the server
uv run python -m law_scrapper_mcp

# Or use the installed script
law-scrapper

在MCP客户端中配置(例如,Cursor .cursor/mcp.json):

{
  "mcpServers": {
    "law-scrapper-mcp": {
      "command": "law-scrapper"
    }
  }
}

克劳德代码:

claude mcp add law-scrapper "uvx --from git+https://github.com/numikel/law-scrapper-mcp law-scrapper"

HTTP传输(可流式传输HTTP)

使用可流式传输的HTTP在HTTP上运行服务器:

# Run with HTTP transport on port 7683
LAW_MCP_TRANSPORT=streamable-http uv run python -m law_scrapper_mcp

# Or specify custom host and port
LAW_MCP_TRANSPORT=streamable-http LAW_MCP_HOST=0.0.0.0 LAW_MCP_PORT=8080 uv run python -m law_scrapper_mcp

在MCP客户端中配置:

{
  "mcpServers": {
    "law-scrapper-mcp": {
      "url": "http://localhost:7683/mcp",
      "transport": "streamable-http"
    }
  }
}

注: URL必须包含 /mcp 路径。FastMCP在以下位置公开了可流式传输的http端点 /mcp不是在根上。使用 http://localhost:7683 没有 /mcp 结果为404(未找到)。

码头工人

使用Docker构建和运行:

# Build the image
docker build -t law-scrapper-mcp .

# Run with STDIO transport (default)
docker run -it law-scrapper-mcp

# Run with HTTP transport on port 7683
docker run -it -p 7683:7683 -e LAW_MCP_TRANSPORT=streamable-http law-scrapper-mcp

或者使用docker compose:

# Run with STDIO transport
docker compose up

# Run with HTTP transport (set TRANSPORT=streamable-http in docker-compose.yml)
docker compose -f docker-compose.yml up

配置

所有设置都是通过环境变量配置的 LAW_MCP_ 前缀:

变量默认值描述
LAW_MCP_TRANSPORTstdio运输: stdiostreamable-http
LAW_MCP_HOST0.0.0.0HTTP服务器主机(使用流式HTTP时)
LAW_MCP_PORT7683HTTP服务器端口(使用流式HTTP时)
LAW_MCP_API_TIMEOUT30.0HTTP请求超时(秒)
LAW_MCP_API_MAX_CONCURRENT10最大并发API请求数
LAW_MCP_API_MAX_RETRIES3最大API请求重试次数
LAW_MCP_CACHE_METADATA_TTL86400元数据缓存TTL(24小时)
LAW_MCP_CACHE_SEARCH_TTL600搜索结果缓存TTL(10分钟)
LAW_MCP_CACHE_BROWSE_TTL3600浏览结果缓存TTL(1小时)
LAW_MCP_CACHE_DETAILS_TTL3600动作细节缓存TTL(1小时)
LAW_MCP_CACHE_CHANGES_TTL300更改跟踪缓存TTL(5分钟)
LAW_MCP_CACHE_MAX_ENTRIES1000最大缓存条目数
LAW_MCP_DOC_STORE_MAX_DOCUMENTS10文档存储中的最大文档数
LAW_MCP_DOC_STORE_MAX_SIZE_BYTES5242880最大文档存储大小(5 MB)
LAW_MCP_DOC_STORE_TTL7200文档存储TTL(2小时)
LAW_MCP_CIRCUIT_BREAKER_THRESHOLD5断路器打开前的故障
LAW_MCP_CIRCUIT_BREAKER_RECOVERY_TIMEOUT60.0尝试恢复前的几秒钟
LAW_MCP_CIRCUIT_BREAKER_HALF_OPEN_MAX_CALLS3半开状态下的测试呼叫
LAW_MCP_LOG_LEVELINFO日志级别:调试、信息、警告、错误
LAW_MCP_LOG_FORMATtext日志格式: textjson

环境配置示例:

export LAW_MCP_TRANSPORT=streamable-http
export LAW_MCP_PORT=7683
export LAW_MCP_LOG_LEVEL=DEBUG
export LAW_MCP_CACHE_METADATA_TTL=86400

工具参考

Law Scraper MCP提供13种法律研究和分析工具:

1.get_system_metadata(类别)

检索系统元数据以过滤和搜索法律行为。

参数:

  • category (字符串,默认值:“all”)-元数据类别:“关键字”、“发布者”、“状态”、“类型”、“机构”或“全部”

退货: 系统中可用的关键字、出版商、文档类型、状态和机构

示例:

- Get all available search keywords
- Retrieve all legal document types
- List all publishers (DU, MP)
- Get all document statuses
- Get complete system metadata

2.search_legal_ats(发布者、年份、关键字、详细级别、状态、类型)

使用高级筛选选项搜索法律行为。

参数:

  • publisher (字符串)-出版商代码:“DU”(Dziennik Ustaw)或“MP”(Monitor Polski)
  • year (整数)-出版年份(例如2024年)
  • keywords (string)-搜索关键字(AND逻辑-使用多次搜索OR)
  • detail_level (字符串,默认值:“标准”)-响应详细信息:“最小”、“标准”或“完整”
  • status (字符串,可选)-文档状态筛选器
  • type (字符串,可选)-文档类型筛选器

退货: 与元数据匹配的法律行为列表

搜索备注: 多个关键字使用AND逻辑。一次搜索一个关键字以查找OR行为。

示例:

- Search DU 2024 for "environment protection" acts
- Find all MP 2023 acts with status "active"
- Search for COVID-19 related legislation
- Find acts by specific type (e.g., "regulation")
- Get minimal detail results for quick scanning

3.browse_ats(发布者、年份、详细级别)

浏览出版商在特定年份发布的所有法律行为。

参数:

  • publisher (string)-发布商代码:“DU”或“MP”
  • year (整数)-出版年份
  • detail_level (字符串,默认值:“标准”)-响应详细信息:“最小”、“标准”或“完整”

退货: 指定年份公布的完整法案清单

示例:

- Browse all DU acts from 2024
- Get minimal details of all MP acts from 2023
- Browse full details of DU 2022 legislation
- Get an overview of acts by publisher and year
- Track legislation published in a specific year

4.过滤结果(result_set_id、模式、字段、type_equals等)

过滤并缩小以前检索到的搜索/浏览/更改结果。

参数:

  • result_set_id (string)-之前搜索/浏览/更改调用的结果集ID(例如“rs_1”)
  • pattern (字符串,可选)-用于文本搜索的正则表达式模式(支持OR:“podatek|VAT|akcyza”)
  • field (字符串,默认值:“title”)-要搜索的字段:“标题”、“eli”、“状态”、“类型”、“发布者”
  • type_equals (string, optional) - 文件类型的确切匹配(例如,“法律”,“条例”)
  • status_equals (string, optional) - 精确匹配状态(例如,“有效行为”,“已撤销行为”)
  • year_equals (整数,可选)-与出版年份完全匹配
  • date_field (字符串,可选)-范围筛选器的日期字段:“publication_Date”或“effective_Date”
  • date_from / date_to (字符串,可选)-日期范围(YYYY-MM-DD)
  • sort_by (字符串,可选)-排序字段:“标题”、“年份”、“位置”、“发布日期”等。
  • sort_desc (boolean,默认值:false)-降序排序
  • limit (整数,可选)-返回的最大结果

退货: 使用新的筛选结果 result_set_id 用于链式过滤

示例:

- Filter search results to only "Rozporządzenie" type
- Search titles with regex "zdrow|apteka|lekar"
- Filter by date range and sort by promulgation date
- Chain filters: first by type, then by regex pattern
- Get top 10 most recent results

5.获取_细节(eli、load_content、detail_level)

检索特定法律行为的详细信息,并可选择加载其内容。

参数:

  • eli (字符串)-格式为“出版商/年份/编号”的行为标识符(例如,“DU/2024/1”)
  • load_content (boolean,默认值:false)-将动作内容加载到文档存储中以进行节读取
  • detail_level (字符串,默认值:“标准”)-响应详细信息:“最小”、“标准”或“完整”

退货: 如果load_content=true,则执行元数据(标题、发布日期、状态、类型等)、目录

示例:

- Get metadata for act DU/2024/1
- Load act content for section-level reading
- Get full details including table of contents
- Retrieve act status and publication information
- Load multiple acts for comparison

6.read_act_content(eli,section)

阅读加载的法律行为的特定部分的内容。

参数:

  • eli (string)-动作标识符(必须首先通过get_acct_details加载,load_content=true)
  • section (string)-应改为(例如,“第1条”、“第2章”、“序言”)

退货: 所请求章节的内容

工作流程说明: 必须先调用get_act_details(eli=“…”,load_content=true),然后使用此工具。

示例:

- Read Article 1 from loaded act
- Get Chapter 2 content
- Read the Preamble section
- Access specific numbered articles
- Navigate act by chapters

7.search_in_act(eli,query)

在加载的法律行为中搜索特定术语。

参数:

  • eli (string)-动作标识符(必须首先通过get_acct_details加载,load_content=true)
  • query (string)-搜索词或短语

退货: 将部分与上下文和位置相匹配

示例:

- Find all mentions of "penalty" in loaded act
- Search for specific legal terms
- Locate articles containing "fine" or "punishment"
- Find definitional sections
- Search for specific references

8.分析_关系(eli,relationship_type)

分析法案的法律关系和参考文献(修正案、参考文献等)。

参数:

  • eli (string)-动作标识符
  • relationship_type (字符串,默认值:“all”)-类型:“修订”、“amended_by”、“引用”、“referenced_by”或“all”

退货: 相关行为及其关系清单

示例:

- Find which acts amend this legislation
- See what acts this legislation amends
- Get all legal references in the act
- Find acts that reference this legislation
- Analyze complete act relationship network

9.track_legal_changes(date_from、date_to、publisher、关键字)

跟踪日期范围内的法律变更和新行为。

参数:

  • date_from (字符串)-开始日期(YYYY-MM-DD格式)
  • date_to (字符串)-结束日期(YYYY-MM-DD格式)
  • publisher (字符串,可选)-按发布者筛选:“DU”或“MP”
  • keywords (字符串,可选)-按关键字筛选

退货: 在日期范围内公布的法律行为

示例:

- Track changes from 2024-01-01 to 2024-12-31
- Find new DU acts from last month
- Get changes published in past 7 days
- Track legislation on specific topics over time
- Monitor legal changes by publisher and date range

10.calculate_legal_date(天、月、年、基准日)

使用直观的符号约定计算法定日期。

参数:

  • days (整数,默认值:0)-天数偏移(+未来,-过去)
  • months (整数,默认值:0)-月偏移量(+未来,-过去)
  • years (整数,默认值:0)-年份偏移(+未来,-过去)
  • base_date (字符串,可选)-基准日期(YYYY、YYYY-MM或YYYY-MM-DD格式,默认为今天)

退货: 计算日期和相关描述

签署约定: 积极=未来,消极=过去

示例:

- Get current date (call with no parameters)
- Calculate date 30 days in the future (+30)
- Calculate date 6 months in the past (-6 months)
- Calculate date 1 year from a specific date
- Calculate legal deadlines and periods

11.比较行为(eli_a,eli_b)

比较两项法律行为的元数据。

参数:

  • eli_a (string)-第一个动作的ELI标识符(例如“DU/2024/1692”)
  • eli_b (string)-第二幕的ELI标识符(例如“DU/2024/1716”)

退货: 标题、类型、状态、日期、关键字重叠和差异的比较

示例:

- Compare two acts from the same year
- Compare old and new versions of legislation
- Identify metadata differences between related acts

12.list_result_sets()

显示存储在内存中的活动结果集。

退货: 包含ID、查询摘要、计数和创建时间的结果集列表

13.list_loaded_documents()

显示加载到文档存储中的文档。

退货: 加载的文档列表,包括ELI、大小、节数和时间戳

文档存储工作流

文档存储模式可在法律行为中实现高效的内容导航和搜索:

工作流程步骤

  1. 加载一个动作 -呼叫 get_act_details(eli="DU/2024/1", load_content=true) 将该行为加载到文档存储中
  2. 阅读章节 -使用 read_act_content(eli="DU/2024/1", section="Art. 1") 阅读特定章节
  3. 在行动中搜索 -使用 search_in_act(eli="DU/2024/1", query="penalty") 查找术语

好处

  • 高效的内存使用(可配置的最大文档数和TTL)
  • 快速分段级导航,无需重新绘制
  • 在没有API调用的加载动作中搜索
  • 自动内容处理(PDF→文本,HTML→Markdown)

配置

  • LAW_MCP_DOC_STORE_MAX_DOCUMENTS -要在内存中保留多少个动作(默认值:10)
  • LAW_MCP_DOC_STORE_MAX_SIZE_BYTES -最大内存使用量(默认值:5 MB)
  • LAW_MCP_DOC_STORE_TTL -行为在内存中保留多长时间(默认值:2小时)

项目结构

law-scrapper-mcp/
├── src/law_scrapper_mcp/
│   ├── __init__.py
│   ├── __main__.py              # Entry point for python -m
│   ├── server.py                # FastMCP app, lifespan, transport config
│   ├── config.py                # Pydantic settings (env vars)
│   ├── logging_config.py        # Structured logging setup
│   ├── models/                  # Pydantic models
│   │   ├── enums.py            # Enumerations
│   │   ├── api_responses.py    # Sejm API response models
│   │   ├── tool_inputs.py      # Tool input models
│   │   └── tool_outputs.py     # Tool output models
│   ├── client/                  # HTTP client
│   │   ├── sejm_client.py      # AsyncClient with retry and circuit breaker
│   │   ├── cache.py            # Async TTL cache implementation
│   │   ├── circuit_breaker.py  # Circuit breaker for API protection
│   │   └── exceptions.py       # Custom exceptions (Polish messages)
│   ├── services/                # Business logic
│   │   ├── metadata_service.py    # Metadata retrieval
│   │   ├── search_service.py      # Search and browse
│   │   ├── act_service.py         # Act details and content
│   │   ├── changes_service.py     # Change tracking
│   │   ├── document_store.py      # In-memory act storage
│   │   ├── result_store.py        # Search result persistence and filtering
│   │   ├── content_processor.py   # PDF/HTML processing
│   │   └── response_enrichment.py # Response hints
│   └── tools/                   # MCP tool definitions
│       ├── metadata.py          # get_system_metadata
│       ├── search.py            # search_legal_acts
│       ├── browse.py            # browse_acts
│       ├── act_details.py       # get_act_details
│       ├── act_content.py       # read_act_content
│       ├── act_search.py        # search_in_act
│       ├── relationships.py     # analyze_act_relationships
│       ├── filter_results.py    # filter_results, list_result_sets
│       ├── changes.py           # track_legal_changes
│       ├── compare.py           # compare_acts
│       ├── dates.py             # calculate_legal_date
│       └── error_handling.py    # Centralized @handle_tool_errors decorator
├── tests/
│   ├── unit/                    # Unit tests
│   └── integration/             # Integration tests with Sejm API
├── Dockerfile                   # Container image definition
├── docker-compose.yml           # Multi-service setup
├── pyproject.toml              # Project metadata and dependencies
├── uv.lock                      # Reproducible dependency lock
└── README.md                    # This file

码头工人

Dockerfile

包括 Dockerfile 构建一个容器化的Law Scraper MCP服务器:

FROM python:3.13-slim
WORKDIR /app
COPY . .
RUN pip install -e .
EXPOSE 7683
CMD ["law-scrapper"]

构建并运行:

# Build the image
docker build -t law-scrapper-mcp .

# Run with STDIO transport
docker run -it law-scrapper-mcp

# Run with HTTP transport
docker run -it -p 7683:7683 -e LAW_MCP_TRANSPORT=streamable-http law-scrapper-mcp

# With custom settings
docker run -it -p 7683:7683 \
  -e LAW_MCP_TRANSPORT=streamable-http \
  -e LAW_MCP_LOG_LEVEL=DEBUG \
  law-scrapper-mcp

docker-compose.yml

使用docker compose进行部署:

# Start service
docker compose up -d

# View logs
docker compose logs -f

# Stop service
docker compose down

迁移指南(v1到v2)

如果从v1.0.2升级,请注意这些突破性的变化:

v1.0.2(旧)v2.0.0(新)注意事项
get_current_datecalculate_legal_date()当前日期无参数调用
calculate_date_offsetcalculate_legal_date(days/months/years)使用直观+未来/-过去符号约定
get_legal_keywordsget_system_metadata(category="keywords")整合到一个工具中
get_legal_publishersget_system_metadata(category="publishers")整合到一个工具中
get_legal_statusesget_system_metadata(category="statuses")整合到一个工具中
get_legal_typesget_system_metadata(category="types")整合到一个工具中
get_legal_institutionsget_system_metadata(category="institutions")整合到一个工具中
get_publisher_detailsN/A使用 get_system_metadata(category="publishers")
search_legal_actssearch_legal_acts增强与 detail_level 参数
get_publisher_year_actsbrowse_acts为清楚起见,已重命名
get_act_comprehensive_detailsget_act_details已添加 load_contentdetail_level
get_act_contentread_act_content需要预加载 get_act_details
get_act_table_of_contentsget_act_detailsTOC包含在详细回复中
get_act_relationshipsanalyze_act_relationships为清楚起见,已重命名
ELI格式单个字符串“DU/2024/1”从单独的参数更改而来
SSE传输STDIO(默认)STDIO为默认值,通过可流式传输HTTP
端口7683端口7683相同的默认HTTP端口

v2.3.1的新增功能

  • uvx/FastMCP修复 --已修复 NameError: name 'Annotated' is not defined 当通过时 uvx --from "git+https://github.com/numikel/law-scrapper-mcp" law-scrapper.已删除 from __future__ import annotationscompare.py 因此,在工具注册过程中,参数类型提示会正确解析。

v2.3.0的新增功能

  • 3个新工具compare_acts, list_result_sets, list_loaded_documents (共13个工具)
  • 断路器 -在Sejm API不可用时防止级联故障
  • 集中错误处理@handle_tool_errors 具有错误分类和完整回溯的装饰器
  • 异步。锁迁移 --所有商店使用 asyncio.Lock 为了实现适当的异步兼容性
  • 默认搜索限制 --默认情况下,搜索/浏览最多返回20个结果,以限制令牌使用
  • 健康终点/health 适用于具有流式http传输的Docker部署
  • 波兰语错误消息 --所有异常消息均以波兰语显示,以获得一致的用户体验
  • 决策树文档字符串 --所有工具的“何时使用”/“何时不使用”

发展

设置

# Install dependencies
uv sync

# Install with dev dependencies
uv sync --extra dev

运行测试

# Run unit tests
uv run pytest tests/unit/ -v

# Run integration tests (requires internet)
uv run pytest tests/integration/ -v -m integration

# Run all tests with coverage
uv run pytest --cov=law_scrapper_mcp --cov-report=term-missing

# Run with timeout for slow tests
uv run pytest --timeout=10 -v

代码质量

该项目遵循FastMCP最佳实践:

  • 模块化架构 -独立关注点(模型、客户、服务、工具)
  • 键入提示 -Pydantic模型的完整类型注释
  • 异步贯穿始终 -异步/等待所有I/O操作
  • 综合示例 -每个工具至少5个示例
  • 标记工具 -按类别组织,便于发现
  • 带注释的参数 -所有输入的清晰描述
  • 结构化日志记录 -可配置的JSON/文本格式

运行服务器

# STDIO transport (default)
uv run python -m law_scrapper_mcp

# HTTP transport
LAW_MCP_TRANSPORT=streamable-http uv run python -m law_scrapper_mcp

# With debug logging
LAW_MCP_LOG_LEVEL=DEBUG uv run python -m law_scrapper_mcp

贡献

  1. 分叉存储库
  2. 创建功能分支(git checkout -b feature/amazing-feature)
  3. 使用常规提交格式提交更改
  4. 添加新功能的测试
  5. 确保所有测试通过并保持覆盖率
  6. 推到分支(git push origin feature/amazing-feature)
  7. 打开拉取请求

开发指南

  • 遵循FastMCP最佳实践进行工具定义
  • 包括全面的示例和参数描述
  • 为工具分类添加适当的标签
  • 全程编写异步代码
  • 为所有新功能添加测试
  • 用您的更改更新CHANGELOG.md
  • 所有代码注释和文档均使用英语

许可证

该项目根据MIT许可证获得许可。有关详细信息,请参阅LICENSE文件。

作者

@努米克尔

在以下人员的帮助下开发:

Cursor Claude Code

对于模型:

Claude Opus 4.6 Claude Opus 4.5 Claude Sonnet 4.5 Claude Haiku 4.5

______________________________________________________________________

法律免责声明:该工具为研究目的提供了波兰法律文件的访问权限。始终咨询合格的法律专业人士,以获得法律建议和法律解释。

目录标签

目录标签

PythonClaude文档处理法律研究本地部署文档分析波兰法律AI驱动MCP服务器

支持客户端

ClaudeCursor

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

none

部署方式(deploymentType,部署类型)

remote-capable

工具数量(toolCount,工具数)

13

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiononeremote-capable

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP