README.mdā¢7.48 kB
# 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.



<a href="https://glama.ai/mcp/servers/@numikel/law-scrapper-mcp">
<img width="380" height="200" src="https://glama.ai/mcp/servers/@numikel/law-scrapper-mcp/badge" alt="Law Scrapper MCP server" />
</a>
## ⨠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)
```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 .
```
### Using uvx (no installation required)
For quick testing or development without cloning the repository:
```bash
# 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`):
```json
{
"mcpServers": {
"law-scrapper-mcp": {
"url": "http://localhost:7683/sse",
"transport": "sse"
}
}
}
```
#### For Claude Code:
```bash
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`):
```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 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 (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
```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.