A comprehensive Model Context Protocol (MCP) server for accessing and analyzing Polish legal acts from the Sejm API, enabling AI-powered legal research and document analysis.
Law Scrapper MCP 📜⚖️
A comprehensive Model Context Protocol (MCP) server for accessing and analyzing Polish legal acts from the Sejm API, enabling AI-powered legal research and document analysis.
✨ Features
- Comprehensive legal act access - Full access to Polish legal acts from Dziennik Ustaw and Monitor Polski
- Advanced search & filtering - Multi-criteria search by date, type, keywords, publisher, and status
- Detailed document analysis - Complete metadata, structure, references, and content retrieval
- Date & time utilities - Specialized date calculations for legal document analysis
- System metadata access - Keywords, statuses, document types, and institution data
- FastMCP integration - Built with FastMCP framework following best practices
- SSE transport - Server-Sent Events for reliable real-time communication
- Professional documentation - Extensive examples and clear parameter descriptions
- RESTful API integration - Direct connection to official Sejm API endpoints
📋 Requirements / prerequisites
- Python: 3.12 or higher
- Package manager: uv (recommended) or pip
- Internet connection: Required for accessing Sejm API endpoints
- MCP-compatible tool: Cursor IDE, Claude Code, or other MCP-supported applications
🚀 Installation
Using uv (recommended)
# Clone the repository
git clone https://github.com/numikel/law-scrapper-mcp.git
cd law-scrapper-mcp
# Install dependencies
uv sync
Using pip
# Clone the repository
git clone https://github.com/numikel/law-scrapper-mcp.git
cd law-scrapper-mcp
# Install dependencies
pip install -e .
Using uvx (no installation required)
For quick testing or development without cloning the repository:
# Run the server directly from GitHub
uvx --from git+https://github.com/numikel/law-scrapper-mcp law-scrapper
This will download and run the server with SSE transport on port 7683.
⚙️ Configuration
MCP server configuration
This server uses Server-Sent Events (SSE) transport for better performance and reliability. The server runs on http://localhost:7683/sse and provides real-time communication with MCP clients.
Important notes:
- Make sure port 7683 is available before starting the server
- The server must be running before connecting MCP clients
- SSE provides better error handling and connection management than STDIO
Add the following configuration to your MCP client's configuration file:
For Cursor IDE (.cursor/mcp.json):
{
"mcpServers": {
"law-scrapper-mcp": {
"url": "http://localhost:7683/sse",
"transport": "sse"
}
}
}
For Claude Code:
claude mcp add law-scrapper-mcp uvx '--from' 'git+https://github.com/numikel/law-scrapper-mcp' 'law-scrapper'
Note: Claude Code will run the server process automatically. The server uses SSE transport and runs on port 7683
For other MCP tools (.mcp.json or mcp_config.json):
{
"mcpServers": {
"law-scrapper-mcp": {
"url": "http://localhost:7683/sse",
"transport": "sse"
}
}
}
🎯 Quick start / usage
Once configured, you can start using the legal research tools:
Basic usage examples
Get current date for legal analysis:
"What is today's date?"
Search for specific legal acts:
"Find all regulations from 2020 containing 'environment'"
Analyze document structure:
"Show me the table of contents for act DU/2020/1"
Get comprehensive document details:
"Give me full information about legal act DU/2020/1280"
Available tool categories
The server provides 14 specialized tools organized in 4 categories:
🕒 Dates & time (2 tools)
get_current_date- Get current date for legal analysiscalculate_date_offset- Calculate date ranges for legal periods
📚 System metadata (6 tools)
get_legal_keywords- Access all available search keywordsget_legal_publishers- List all legal publishers (DU, MP)get_publisher_details- Detailed publisher informationget_legal_statuses- Document status typesget_legal_types- Legal document typesget_legal_institutions- Involved institutions
🔍 Acts browsing & search (2 tools)
search_legal_acts- Advanced multi-criteria searchget_publisher_year_acts- Browse acts by publisher and year
📋 Act details & analysis (4 tools)
get_act_comprehensive_details- Complete document metadataget_act_content- PDF/HTML content retrievalget_act_table_of_contents- Document structure analysisget_act_relationships- Legal references and amendments
📁 Project structure
law-scrapper-mcp/
├── app.py # Main MCP server implementation with 14 legal research tools
├── pyproject.toml # Project configuration, dependencies, and CLI scripts
├── uv.lock # Lock file ensuring reproducible builds
├── README.md # Project documentation
└── __pycache__/ # Python bytecode cache (generated)
🛠️ Development
Development setup
# Install in development mode
uv sync
# Run the server directly (SSE transport on port 7683)
uv run app.py
# Or use the installed script
law-scrapper
# Or run directly with uvx (from local directory)
uvx . --python python
Server information:
- Transport: Server-Sent Events (SSE)
- Host: 0.0.0.0 (accessible from any network interface)
- Port: 7683
- Endpoint:
http://localhost:7683/sse
Running tests
# Run basic functionality tests
uv run python -c "
import app
print('Server imports successfully')
funcs = [name for name in dir(app) if name.startswith('get_')]
print(f'Available tools: {len(funcs)}')
"
Code quality
The project follows FastMCP best practices:
- Tagged Tools: All tools have descriptive tags for filtering
- Annotated Parameters: Every parameter has clear descriptions
- Comprehensive Examples: Minimum 5 examples per tool
- Professional Documentation: Detailed docstrings and usage examples
🤝 Contributing
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes using Conventional Commits format
- Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Development guidelines
- Follow FastMCP best practices for tool definitions
- Include comprehensive examples and parameter descriptions
- Add appropriate tags for tool categorization
- Test all new functionality before submitting
- Use English for all code comments and documentation
📄 License
This project is licensed under the MIT License
👤 Author
Legal disclaimer: This tool provides access to Polish legal documents for research purposes. Always consult with qualified legal professionals for legal advice and interpretation of laws.