Spanish Public Data MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Spanish Public Data MCPSearch for recent legislation on data protection"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Spanish Public Data MCP
MCP server for querying Spanish government open data APIs.
Overview
Spanish Public Data MCP provides LLM-friendly tools for querying Spanish government data on-the-fly:
BDNS - National Grants Database (grants and subsidies)
BOE - Official Gazette (consolidated legislation)
BORME - Company Registry Gazette (company acts)
INE - National Statistics Institute (official statistics)
datos.gob.es - National Open Data Catalog (40,000+ datasets)
Architecture: On-the-fly queries to official APIs. No database required.
Total: 26 MCP tools | 211 tests | 53%+ coverage
Installation
# Clone repository
git clone https://github.com/mjgmario/spanish-public-info-radar-mcp.git
cd spanish-public-data-mcp
# Install with uv (recommended)
uv sync
# For development
uv sync --extra devQuick Start
Option 1: Run directly (development/testing)
# Install dependencies
uv sync
# Run MCP server (HTTP/SSE mode)
uv run python -m public_radar
# Or on a specific port
uv run python -m public_radar --port 9000
# Or in stdio mode (for Claude Desktop)
uv run python -m public_radar --stdioOption 2: With Docker
# Build and run
docker-compose up -d
# View logs
docker-compose logs -f
# Stop
docker-compose downVerify it works
# Health check (HTTP mode)
curl http://localhost:8080/health
# Should return: {"status":"healthy","service":"spanish-public-data-mcp"}Claude Desktop Integration
Step 1: Locate your config file
The Claude Desktop configuration file is located at:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Step 2: Add the MCP server configuration
Open the config file and add the following:
{
"mcpServers": {
"spanish-public-data": {
"command": "uv",
"args": ["run", "python", "-m", "public_radar", "--stdio"],
"cwd": "C:\\Users\\YOUR_USER\\path\\to\\spanish-public-data-mcp"
}
}
}Note: Replace YOUR_USER and the path with your actual installation path.
Step 3: Restart Claude Desktop
Close and reopen Claude Desktop to load the new MCP server.
Step 4: Verify the connection
Ask Claude: "What Spanish public data tools do you have available?"
Claude should respond with information about the 26 available tools.
Available MCP Tools
BDNS (Grants) - 3 tools
Tool | Description |
| Search grant calls by date range and granting body |
| Search awarded grants by date range and beneficiary NIF |
| Get detailed information about a specific grant call |
BOE (Legislation) - 11 tools
Tool | Description |
| Search consolidated laws with filters (query, dates, department, legal range, matter) |
| Get metadata of a specific law or regulation (optionally with legal analysis) |
| Get full consolidated text of a law |
| Get the structure/index of a law (articles, dispositions, annexes) |
| Get a specific block (article, disposition) from a law |
| Get list of government departments with codes |
| Get list of legal norm types (Ley, Real Decreto, etc.) |
| Get list of subject matters/topics with codes |
| Find laws related to a given legislation (modifications, repeals, references) |
| Search BOE publications from the last N days with filters |
| Get the daily BOE summary for a specific date (with filters) |
BORME (Company Registry) - 1 tool
Tool | Description |
| Get daily company registry acts for a specific date |
INE (Statistics) - 6 tools
Tool | Description |
| List all available statistical operations (IPC, EPA, PIB, etc.) |
| Get details of a specific statistical operation |
| Get data from a specific statistical table |
| Get time series data by series code |
| Search for tables within a statistical operation |
| List available variables, optionally filtered by operation |
datos.gob.es (Open Data) - 4 tools
Tool | Description |
| Search datasets in the national open data catalog |
| Get detailed information about a specific dataset |
| List available themes/categories |
| List publishing organizations |
General - 1 tool
Tool | Description |
| Get overview of available data sources and tools |
Example Queries for Claude
Here are practical examples of what you can ask Claude once the MCP is connected:
Grants & Subsidies (BDNS)
"Find grants published in the last month"
"Search for grants related to innovation or R&D"
"What grants has the company with NIF B12345678 received?"
"Show me details of grant BDNS 123456"Legislation (BOE)
"Search for laws about renewable energy"
"What was published in the BOE today?"
"Find legislation about public subsidies from 2023"
"Show me the full text of the data protection law"Company Registry (BORME)
"What companies were registered in Madrid today?"
"Show me the BORME summary for January 15, 2024"
"Find recent company dissolutions"Statistics (INE)
"What statistical operations are available from INE?"
"Show me the latest CPI (IPC) data"
"Get unemployment statistics from the EPA survey"
"What is the current inflation rate in Spain?"
"Show me GDP growth data for the last 12 quarters"
"Find tables about population in the Census operation"Combined Research
"I want to investigate company XYZ. Check:
1. What grants have they received?
2. Any recent BORME entries about them?"
"Find all funding opportunities for renewable energy projects:
1. Current open grants
2. Relevant legislation"
"Give me an economic overview of Spain:
1. Latest unemployment rate (EPA)
2. Current inflation (IPC)
3. Recent GDP growth"Open Data (datos.gob.es)
"Search for datasets about air quality"
"Find open data from the Madrid city council"
"What data categories are available in datos.gob.es?"
"Show me details of dataset e05068001-mapas-estrategicos-de-ruido"Tool Parameters Reference
search_grants
{
"date_from": "2024-01-01", // Optional: Start date (YYYY-MM-DD)
"date_to": "2024-12-31", // Optional: End date (YYYY-MM-DD)
"granting_body": "E00003901", // Optional: Granting body code
"limit": 20 // Optional: Max results (1-100, default 20)
}search_grant_awards
{
"date_from": "2024-01-01", // Optional: Start date
"date_to": "2024-12-31", // Optional: End date
"beneficiary_nif": "B12345678", // Optional: Beneficiary NIF/CIF
"limit": 20 // Optional: Max results
}get_grant_details
{
"grant_id": "123456" // Required: BDNS grant ID
}search_legislation
{
"query": "energias renovables", // Required: Search text
"date_from": "2020-01-01", // Optional: Start date
"date_to": "2024-12-31", // Optional: End date
"title": "ley energia", // Optional: Filter by title
"department_code": "4225", // Optional: Department code (use get_departments_table)
"legal_range_code": "ley", // Optional: Legal range (use get_legal_ranges_table)
"matter_code": "170", // Optional: Matter code (use get_matters_table)
"include_derogated": false, // Optional: Include repealed laws (default false)
"offset": 0, // Optional: Skip results (pagination)
"limit": 20 // Optional: Max results (1-100)
}get_legislation_details
{
"legislation_id": "BOE-A-2015-10566" // Required: BOE legislation ID
}get_legislation_text
{
"legislation_id": "BOE-A-2015-10566" // Required: BOE legislation ID
}get_legislation_structure
{
"legislation_id": "BOE-A-2015-10566" // Required: BOE legislation ID
}get_legislation_block
{
"legislation_id": "BOE-A-2015-10566", // Required: BOE legislation ID
"block_id": "a1" // Required: Block ID (e.g., "a1" for article 1)
}get_departments_table
{} // No parameters requiredget_legal_ranges_table
{} // No parameters requiredget_matters_table
{} // No parameters requiredget_boe_summary
{
"date": "2024-01-15" // Optional: Date (YYYY-MM-DD), defaults to today
}get_borme_summary
{
"date": "2024-01-15" // Optional: Date (YYYY-MM-DD), defaults to today
}get_ine_operations
{} // No parameters requiredget_ine_operation
{
"operation_id": "IPC" // Required: Operation ID or code (e.g., 'IPC', 'EPA', '25')
}get_ine_table_data
{
"table_id": "50902", // Required: Table ID from INE
"nult": 12 // Optional: Number of last periods (1-100, default 12)
}get_ine_series_data
{
"series_code": "IPC251856", // Required: Series code from INE
"nult": 12 // Optional: Number of last periods (1-100, default 12)
}search_ine_tables
{
"operation_id": "IPC" // Required: Operation ID to search tables for
}get_ine_variables
{
"operation_id": "IPC" // Optional: Filter variables by operation
}search_open_data
{
"query": "air quality", // Optional: Search text
"theme": "medio-ambiente", // Optional: Theme code
"publisher": "L01280796", // Optional: Publisher ID
"limit": 20 // Optional: Max results (1-100)
}get_open_data_details
{
"dataset_id": "e05068001-mapas-estrategicos-de-ruido" // Required: Dataset ID
}list_open_data_themes
{} // No parameters requiredlist_open_data_publishers
{
"limit": 50 // Optional: Max results (default 50)
}Project Structure
src/public_radar/
├── common/ # HTTP client, dates, logging
├── sources/ # API clients (BDNS, BOE, INE, datos.gob.es)
│ ├── bdns.py # BDNS client (grants)
│ ├── boe.py # BOE client (legislation, BORME)
│ ├── ine.py # INE client (statistics)
│ └── datos_gob.py # datos.gob.es client (open data)
├── mcp/ # MCP server and tools
│ ├── server.py # MCP server + 26 tool handlers
│ └── logging.py # Tool call logging (JSONL)
├── __init__.py
└── __main__.py # CLI entry point
tests/
├── unit/ # Unit tests with mocks (168 tests)
├── integration/ # Real API tests (43 tests)
└── fixtures/ # Sample API responsesConfiguration
Environment Variables
Variable | Description | Default |
| Host to bind SSE server |
|
| Port for SSE server |
|
| Directory for tool call logs |
|
| Logging level |
|
Tool Call Logging
All MCP tool calls are logged to logs/mcp_calls_YYYY-MM-DD.jsonl:
{
"timestamp": "2024-01-15T10:30:00Z",
"tool": "search_grants",
"input": {"date_from": "2024-01-01", "limit": 10},
"output_summary": {"count": 10, "first_title": "..."},
"duration_ms": 450,
"success": true,
"error": null
}Logs are automatically rotated (deleted after 7 days).
Docker Deployment
# Start MCP server
docker-compose up -d
# Check health
curl http://localhost:8080/health
# View logs
docker-compose logs -f mcp
# Stop server
docker-compose downDevelopment
# Install dev dependencies
uv sync --extra dev
# Run tests
uv run pytest
# Run with coverage
uv run pytest --cov
# Run linting
uv run pre-commit run --all-files
# Type checking
uv run mypy src/Current Test Coverage
211 tests passing (168 unit + 43 integration)
53%+ code coverage (unit tests only)
Unit tests for all parsers and tool handlers
Integration tests for real API calls (BDNS, BOE, INE, datos.gob.es)
Data Sources
Source | API | Description |
BDNS | National Grants Database | |
BOE | Official Gazette & Legislation | |
INE | National Statistics Institute | |
datos.gob.es | National Open Data Catalog |
Troubleshooting
Claude Desktop doesn't see the MCP
Check the config file path is correct
Ensure
uvis in your PATHVerify the
cwdpath points to the project directoryRestart Claude Desktop completely
API returns empty results
BOE/BORME don't publish on weekends or holidays
BDNS may have rate limits
INE data is updated periodically (monthly, quarterly)
Tool call errors
Check the logs at logs/mcp_calls_YYYY-MM-DD.jsonl for detailed error information.
License
MIT
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mjgmario/spanish-public-info-radar-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server