# 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
β
**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)
```bash
# Clone the repository
git clone https://github.com/numikel/law-scrapper-mcp.git
cd law-scrapper-mcp
# Install dependencies
uv sync
```
### Using pip
```bash
# Clone the repository
git clone https://github.com/numikel/law-scrapper-mcp.git
cd law-scrapper-mcp
# Install dependencies
pip install -e .
```
## βοΈ Configuration
### MCP server configuration
Add the following configuration to your MCP client's configuration file:
#### For Cursor IDE (`.cursor/mcp.json`):
```json
{
"mcpServers": {
"law-scrapper-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/numikel/law-scrapper-mcp",
"law-scrapper"
],
"transport": "stdio"
}
}
}
```
#### For Claude Code:
```bash
claude mcp add law-scrapper-mcp uvx '--from' 'git+https://github.com/numikel/law-scrapper-mcp' 'law-scrapper'
```
#### For other MCP tools (`.mcp.json` or `mcp_config.json`):
```json
{
"mcpServers": {
"law-scrapper-mcp": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/numikel/law-scrapper-mcp",
"law-scrapper"
],
"transport": "stdio"
}
}
}
```
## π― 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 analysis
- `calculate_date_offset` - Calculate date ranges for legal periods
#### π **System metadata** (6 tools)
- `get_legal_keywords` - Access all available search keywords
- `get_legal_publishers` - List all legal publishers (DU, MP)
- `get_publisher_details` - Detailed publisher information
- `get_legal_statuses` - Document status types
- `get_legal_types` - Legal document types
- `get_legal_institutions` - Involved institutions
#### π **Acts browsing & search** (2 tools)
- `search_legal_acts` - Advanced multi-criteria search
- `get_publisher_year_acts` - Browse acts by publisher and year
#### π **Act details & analysis** (4 tools)
- `get_act_comprehensive_details` - Complete document metadata
- `get_act_content` - PDF/HTML content retrieval
- `get_act_table_of_contents` - Document structure analysis
- `get_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
```bash
# Install in development mode
uv sync
# Run the server directly
uv run app.py
# Or use the installed script
law-scrapper
```
### Running tests
```bash
# 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
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes using Conventional Commits format
4. Push to the branch (`git push origin feature/amazing-feature`)
5. 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
**[@numikel](https://github.com/numikel)**
---
**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.