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
Related MCP server: mcp-brasil
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
Available Tools
26 toolsget_boe_summaryB
Get the daily BOE (Official Gazette) summary for a specific date. Supports filtering by section (1, 2A, 2B, 3, 4, 5, T) and department.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date to fetch BOE summary for (YYYY-MM-DD). Defaults to today. | |
| max_items | No | Maximum number of items to return (default: all items) | |
| section_filter | No | Filter by section (e.g., '1', '2A', '2B', '3', '4', '5', 'T') | |
| department_filter | No | Filter by department name (partial match, case-insensitive) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only mentions getting a summary and filtering, but does not disclose pagination behavior (max_items parameter), rate limits, auth requirements, or output format. The description adds minimal behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that front-loads the main purpose. It is appropriately concise, though it could be slightly more structured with separate sentences for usage and behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters, no output schema, and no annotations, the description is insufficiently complete. It does not explain the meaning of sections, what the return data looks like, or how max_items affects results. A more comprehensive description would improve usability.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description mentions filtering by section and department, which is already clear from the schema. It adds no additional semantic value beyond what the parameter descriptions provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get', the resource 'daily BOE summary', and specifies filtering by section and department. It distinguishes from sibling tools like get_borme_summary (different gazette) and search_recent_boe (search vs. get).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving a daily summary for a specific date with optional filters, but it does not provide explicit guidance on when to use this tool versus alternatives like search_recent_boe or get_borme_summary. No when-not-to-use or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_borme_summaryA
Get the daily BORME (Company Registry) summary with company acts for a specific date. Supports filtering by province. Defaults to most recent weekday.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date to fetch BORME summary for (YYYY-MM-DD). Defaults to most recent weekday. | |
| max_items | No | Maximum number of items to return (default: all items) | |
| province_filter | No | Filter by province name (partial match, case-insensitive) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the burden. It discloses that filtering by province is supported and that the date defaults to the most recent weekday, which covers basic behavior. However, it does not address pagination, error handling, or whether the tool is read-only (likely safe). This is adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the core purpose, and every word adds value. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers input sufficiently but lacks any indication of the output structure (e.g., format, contents of 'company acts'). Given the absence of an output schema, a brief note on return format would improve completeness. The current description is adequate for a simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter already has a description. The description adds little beyond what the schema provides (e.g., reiterates province filtering and date default). It does not introduce new semantic nuance, meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the daily BORME summary with company acts for a specific date, specifying the resource and action. It does not explicitly differentiate from sibling tools like get_boe_summary, but the name and context are distinctive enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for BORME data by naming the resource, but offers no explicit guidance on when to use this tool versus alternatives (e.g., get_boe_summary) or when not to use it. No prerequisites or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_departments_tableA
Get the list of government departments with their codes. Use these codes with search_legislation's department_code filter.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior. It effectively communicates that this tool is a read-only retrieval of department codes. No additional behavioral details (e.g., data freshness) are needed for such a simple, stateless lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero wasted words. Every sentence adds unique value: first states the output, second explains usage context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and no output schema, the description fully covers what the tool does and its relationship to sibling tools. No additional context is necessary for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters (100% coverage trivially), so the baseline is 3. The description adds value beyond the schema by specifying the output (list of departments with codes) and its purpose, justifying a higher score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns 'the list of government departments with their codes', which is a specific verb+resource. It also distinguishes from sibling tools by explicitly linking to search_legislation's filter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool: 'Use these codes with search_legislation's department_code filter.' This provides clear usage context and directs to an alternative tool for filtering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_grant_detailsB
Get detailed information about a specific grant call by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| grant_id | Yes | Grant call ID from BDNS |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only says 'get detailed information', implying a read operation, but does not state whether it has side effects, requires authentication, or has rate limits. Even simple read tools benefit from explicit safety cues.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 12-word sentence that is front-loaded and contains no fluff. Every word serves the purpose of explaining what the tool does. Ideal length for a simple retrieval tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter retrieval tool, the description is minimally adequate. However, it lacks any information about the return value (no output schema), error cases, or data freshness. Given the list of sibling tools, additional context about when this is preferred over search_grants would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter grant_id, and the description adds only 'by ID', which is already implied by the schema's description 'Grant call ID from BDNS'. The description does not enhance understanding of the parameter's format, source, or constraints beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'get' and resource 'detailed information about a specific grant call', limited by 'by ID'. This distinguishes it from sibling search and list tools, which return collections rather than a single entity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. It does not specify prerequisites, when not to use it, or any context about the grant_id format or availability. The agent receives no help in deciding between this and similar tools like search_grants.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ine_operationA
Get details of a specific INE statistical operation by ID or code.
| Name | Required | Description | Default |
|---|---|---|---|
| operation_id | Yes | Operation ID or code (e.g., 'IPC', 'EPA', '25') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description indicates a read operation, which is consistent with tool name. Does not disclose authentication, rate limits, or behavior for non-existent IDs, but given simplicity, adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words, front-loaded with action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Minimal but sufficient for a simple tool. Lacks details on return format or error handling, but with no output schema, more context would be helpful. Still adequate given simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a well-described parameter. Description adds no new meaning; 'by ID or code' is already in schema. Baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Get', resource 'details of a specific INE statistical operation', and method 'by ID or code'. Distinguishes from sibling 'get_ine_operations' which lists multiple operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implicitly clear that this tool is for retrieving details of a single operation, not for listing (use get_ine_operations). No explicit when-not or exclusions, but context with siblings provides sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ine_operationsA
Get list of all available INE statistical operations (IPC, EPA, PIB, etc.).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description implies read-only via 'Get list' but does not explicitly state safety, idempotency, or auth requirements. For a simple list tool, this is adequate but not extra helpful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence conveying complete purpose with examples. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description sufficiently conveys the tool's purpose. Could optionally hint at output format (e.g., list of codes/names), but current version is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters with 100% schema coverage. Description adds no parameter info, which is acceptable as none exist. Baseline score of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Get list' and specific resource 'all available INE statistical operations' with examples (IPC, EPA, PIB), effectively distinguishing from siblings like get_ine_operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implicitly suggests usage as a starting point to discover available operations before using get_ine_operation or get_ine_series_data. No explicit when-not or alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ine_series_dataC
Get time series data from INE by series code.
| Name | Required | Description | Default |
|---|---|---|---|
| nult | No | Number of last periods to return (default: 12) | |
| series_code | Yes | Series code from INE |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description offers no behavioral insights beyond the basic action. It does not disclose return format, pagination, authentication requirements, rate limits, or any side effects. For a data retrieval tool, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of few words, no redundancy. It is front-loaded with the main action. However, it could benefit from a more structured format to list key parameters or usage notes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameter set and no output schema, the description is too sparse. It does not explain what a 'series code' is, what 'time series data' looks like, or the source (INE). A more complete description would help the agent understand the tool's purpose and usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'series_code' and 'nult' having clear descriptions. The tool description adds no extra meaning beyond repeating 'by series code'. With full schema coverage, baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get time series data from INE by series code.' It uses a specific verb ('Get') and resource ('time series data from INE'), and the primary parameter 'series_code' is immediately understood. However, it does not explicitly differentiate from siblings like 'get_ine_table_data' or 'get_ine_operation', but the focus on 'series' makes it distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, typical use cases, or exclusion criteria. The description is a simple functional statement without context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ine_table_dataC
Get statistical data from a specific INE table.
| Name | Required | Description | Default |
|---|---|---|---|
| nult | No | Number of last periods to return (default: 12) | |
| table_id | Yes | Table ID from INE |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as authentication requirements, rate limits, or whether the operation is read-only. The description carries the full burden but fails to add transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no fluff. It is concise but sacrifices completeness for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and simple inputs, the description could still provide more context about return format or typical usage. It feels incomplete compared to sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds no extra meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it gets statistical data from a specific INE table, which is clear but vague. It doesn't specify the nature of the data (e.g., raw table, time series) or distinguish from siblings like get_ine_series_data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like search_ine_tables or get_ine_series_data. The description lacks context for selecting this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ine_variablesC
Get available variables, optionally filtered by operation.
| Name | Required | Description | Default |
|---|---|---|---|
| operation_id | No | Optional operation ID to filter variables. If not provided, returns all variables. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavior. It states the tool retrieves variables with optional filter, but does not indicate whether it is read-only, what the response format is, or any side effects. For a read operation, this is minimally transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with purpose. No unnecessary words. However, it could be slightly more informative without harming conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description provides the essential purpose. However, it lacks context about what 'variables' means in the INE domain or what the output looks like, which is needed for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema describes operation_id as 'Optional operation ID to filter variables. If not provided, returns all variables.' The description adds 'available' which is not in the schema, but otherwise adds no new meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves available variables with optional filtering by operation. It uses specific verb and resource, and is distinct from siblings like get_ine_operations (which returns operations) and get_ine_series_data (which returns data series). However, it does not explicitly differentiate from all similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as get_ine_table_data or search_ine_tables. The description only mentions optional filtering but provides no context about prerequisites or when to choose this over other INE tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_legal_ranges_tableA
Get the list of legal norm types (Ley, Real Decreto, Orden, etc.) with their codes. Use these codes with search_legislation's legal_range_code filter.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the output (list of norm types with codes) but does not mention any behavioral traits like authentication, update frequency, or caching. For a simple read operation, it is adequate but could be more transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences with no extraneous words. It front-loads the main purpose and immediately provides usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 0 parameters, no output schema, and a simple lookup function, the description is complete. It explains what the tool returns and how to use that output, fulfilling all necessary context for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and the input schema coverage is 100%. The description does not need to add parameter information. Baseline score of 4 applies as there are no parameters to describe.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool retrieves a list of legal norm types with their codes, using specific examples (Ley, Real Decreto, Orden). It also connects to the sibling tool search_legislation, distinguishing its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly guides the agent to use the returned codes with search_legislation's legal_range_code filter. No alternatives or exclusions are given, but for a lookup table, this is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_legislation_blockA
Get a specific block (article, disposition, annex) from a law. Use get_legislation_structure first to discover available block IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| block_id | Yes | Block identifier (e.g., 'a1' for article 1, 'a2' for article 2, 'dd' for derogation disposition) | |
| legislation_id | Yes | Legislation ID from BOE (e.g., BOE-A-2015-10566) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It states the tool retrieves a block, implying a read operation, but does not mention any potential side effects, permissions, rate limits, or output format. This is minimal but adequate for a simple retrieval tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundant words. The description is front-loaded with the core purpose and immediately provides usage guidance. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (2 required params, no output schema, no annotations), the description is mostly complete. It explains what the tool does and how to use it. However, it could mention what the output looks like (e.g., returns block content) since there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with clear parameter descriptions. The description adds context by specifying block types (article, disposition, annex), which enhances understanding beyond the schema alone. However, the schema already does a good job, so the added value is moderate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'specific block (article, disposition, annex) from a law'. It also references the sibling tool get_legislation_structure, which helps distinguish it, but fails to explicitly differentiate from other sibling tools like get_legislation_details or get_legislation_text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance to use get_legislation_structure first to discover block IDs. However, it does not mention when not to use the tool or suggest alternative tools besides the one referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_legislation_detailsB
Get metadata and details of a specific law or regulation.
| Name | Required | Description | Default |
|---|---|---|---|
| legislation_id | Yes | Legislation ID from BOE | |
| include_analysis | No | Include legal analysis (references, modifications, related laws) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It states 'Get metadata and details' but does not disclose any behavioral traits such as whether the operation is read-only, any authentication requirements, rate limits, or what happens if the legislation ID is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, but it is overly minimal. It front-loads the purpose but omits important context; it is not verbose, but it could be more informative without sacrificing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and no annotations. The description does not explain what 'metadata and details' includes, how the response is structured, or any edge cases. For a tool with two parameters and moderate complexity, the description is insufficient for complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for both parameters. The description adds no additional meaning beyond the schema, but since coverage is high, the baseline score of 3 is appropriate. The tool name implies details, and the schema already describes parameters adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves metadata and details of a specific law or regulation, using a specific verb ('Get') and resource ('metadata and details'). It distinguishes from sibling tools like 'get_legislation_text' or 'get_legislation_block' which likely return different content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like 'search_legislation' or 'get_legislation_text'. The description does not mention when not to use it or provide comparisons to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_legislation_structureA
Get the structure/index of a law showing all its blocks (articles, dispositions, annexes). Use this to discover block IDs before fetching specific blocks.
| Name | Required | Description | Default |
|---|---|---|---|
| legislation_id | Yes | Legislation ID from BOE (e.g., BOE-A-2015-10566) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose any behavioral details such as read-only nature, authorization needs, rate limits, or side effects. Although the purpose implies a read operation, the tool's behavior is not described beyond its function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise with two sentences: the first defines the purpose, the second provides usage guidance. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter, no annotations, and no output schema, the description adequately explains the output (blocks) and use case (discover block IDs). It could be slightly improved by specifying the return format (e.g., hierarchical list), but overall it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the single parameter (legislation_id) with an example (BOE-A-2015-10566). The tool description adds no further meaning beyond what the schema provides, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the structure/index of a law, listing specific block types (articles, dispositions, annexes). It distinguishes itself from siblings like get_legislation_block which fetches specific blocks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using this tool to discover block IDs before fetching specific blocks, providing clear use context. However, it does not explicitly mention alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_legislation_textB
Get the full consolidated text of a law or regulation.
| Name | Required | Description | Default |
|---|---|---|---|
| legislation_id | Yes | Legislation ID from BOE |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It does not specify return format (e.g., plain text vs. structured), potential size constraints, or error conditions. Minimal information provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no unnecessary words, front-loaded. Appropriate conciseness for a simple function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 param, no output schema), the description is somewhat complete but lacks details on return value and error handling. Context around when to use vs. siblings is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (the parameter is described as 'Legislation ID from BOE'). The description adds no additional meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the full consolidated text of a law or regulation, distinguishing it from sibling tools like search_legislation (for searching) or get_legislation_details (likely metadata). Verb and resource are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like get_legislation_block or get_legislation_structure. The description does not mention prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_matters_tableA
Get the list of subject matters/topics with their codes. Use these codes with search_legislation's matter_code filter.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns codes in a list format and that they are intended for a specific filter. However, it does not describe if the data is static or dynamic, or any side effects. Given the simplicity (0 parameters), a 4 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. It front-loads the purpose and then provides cross-tool context. Every sentence serves a clear function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple: no parameters, no output schema. The description effectively communicates what it returns and how to use the result with a sibling tool. This provides complete guidance for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema contains no parameters, and schema description coverage is 100%. Per the rules, 0 parameters gives a baseline of 4, and the description adds no parameter info because none exist. The description is fully adequate without needing to explain parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a list of subject matters/topics with their codes, using specific verbs and resource. It distinguishes itself from sibling tools by explicitly referencing its use with search_legislation's matter_code filter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: it tells the agent when to use this tool (to get codes for search_legislation) and implies when not to use it (for other filters). No alternative tools are mentioned but the connection to search_legislation is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_open_data_detailsA
Get detailed information about a specific dataset from datos.gob.es including distributions (download formats).
| Name | Required | Description | Default |
|---|---|---|---|
| dataset_id | Yes | Dataset identifier (e.g., 'e05068001-mapas-estrategicos-de-ruido') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the tool returns detailed info and distributions, but does not disclose any behavioral traits such as error handling, pagination, or limitations. For a simple retrieval tool, this is minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no unnecessary words. It is front-loaded with the main action and is as concise as possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and no output schema. The description explains the tool's purpose and mentions what is included (distributions). It could be slightly more complete by hinting at the output structure, but it is adequate for the low complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter 'dataset_id', which already includes a description and example. The tool description adds context about the source ('datos.gob.es') and mentions distributions, but does not significantly enhance parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get detailed information about a specific dataset from datos.gob.es', including specific content ('distributions (download formats)'). This verb+resource specification is precise and differentiates it from sibling tools like 'search_open_data', which is for searching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (when you have a dataset ID and want details), but does not provide explicit guidance on alternatives or when not to use it. No when-to-use or when-not-to-use conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_infoA
Get overview of available data sources and tools. Call this first to understand what data is available.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states it provides an overview but does not explicitly disclose that it is a safe, read-only operation. An explicit note about being non-destructive would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, front-loaded with the action. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and no output schema, the description adequately informs the agent to call it first for orientation. Could briefly mention the type of overview returned, but sufficient for a discovery tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters and schema coverage is 100%, so the baseline is 4. No additional parameter description is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get overview of available data sources and tools' with a specific verb and resource. It distinguishes itself from sibling tools by advising to call it first.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Call this first to understand what data is available', providing clear usage context. It doesn't specify when not to use it, but the advice is strong enough for guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_open_data_publishersB
List publishers/organizations in datos.gob.es (government agencies that publish datasets).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full responsibility for behavioral disclosure. It does not mention pagination, ordering, or the structure of the response (e.g., whether it returns full objects or just names). The limit parameter suggests pagination but is not clarified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single 12-word sentence with no extraneous information. It is highly efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema, no annotations), the description is minimalist but adequate. However, it could be improved by noting the return format or sorting behavior. It meets the minimum but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'limit' is already well-documented in the schema with a description, default, and constraints. Schema coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the verb 'List', the resource 'publishers/organizations', and the context 'datos.gob.es (government agencies that publish datasets)'. It clearly distinguishes this tool from sibling tools like list_open_data_themes or search_open_data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as search_open_data. There is no mention of when not to use it or of any prerequisites. The description only implies usage for retrieving all publishers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_open_data_themesA
List available themes/categories in datos.gob.es (e.g., medio-ambiente, economia, salud, educacion).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It does not state that the tool is read-only, idempotent, or any potential side effects. The lack of safety cues leaves agents guessing about impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence that immediately conveys the action, resource, and examples. Every word earns its place; no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless tool with no output schema, the description covers the essential purpose and provides illustrative examples. It could be improved by noting whether the list is flat or hierarchical, but it is sufficiently complete for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema description coverage, the baseline is 4. The description adds value by listing example themes, which helps agents understand the output format. No further parameter explanation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the verb 'List', the resource 'available themes/categories in datos.gob.es', and provides concrete examples (e.g., medio-ambiente, economia), clearly distinguishing it from sibling tools like list_open_data_publishers or search_open_data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage as a catalog of themes but does not explicitly state when to use it versus alternatives. For a simple list tool with no parameters, the context is clear enough, but explicit guidance on when it's a prerequisite for other tools is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_grant_awardsA
Search awarded grants (concesiones) from BDNS. Filter by date range and beneficiary NIF.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return | |
| date_to | No | End date for filtering (YYYY-MM-DD format) | |
| date_from | No | Start date for filtering (YYYY-MM-DD format) | |
| beneficiary_nif | No | Filter by beneficiary NIF/CIF (Spanish tax ID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose behavioral traits such as pagination, rate limits, or if results are complete or partial. Only basic filter capabilities are mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with about 15 words, concise and front-loaded with the verb and resource. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with no output schema, the description is moderately complete but lacks mention of return structure or pagination behavior. Given the high schema coverage and simple parameters, it is adequate but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description summarizes filtering options (date range, beneficiary NIF) but adds little beyond what the schema already provides with exact formats and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches awarded grants from BDNS with filters by date range and beneficiary NIF. It distinguishes from sibling 'search_grants' which likely searches for open grant calls.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use (searching awarded grants) and mentions filtering options. However, it does not explicitly state when not to use or direct to alternatives like search_grants for open calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_grantsB
Search grant calls (convocatorias) from BDNS. Filter by date range and granting body.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return | |
| date_to | No | End date for filtering (YYYY-MM-DD format) | |
| date_from | No | Start date for filtering (YYYY-MM-DD format) | |
| granting_body | No | Filter by granting body/organization code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. However, it only states 'search' and 'filter', without disclosing side effects, read-only nature, rate limits, or pagination behavior. The limit parameter implies pagination but is not explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no superfluous words, delivering core purpose and key filters upfront. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four parameters, no output schema, and no annotations, the description lacks detail about the data source (BDNS), the nature of grant calls, expected results format, or any constraints. It is minimal and leaves the agent without sufficient context for robust usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter already has an individual description. The tool's description adds contextual grouping ('filter by date range and granting body'), but this does not significantly enhance understanding beyond the schema's own descriptions. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool searches grant calls from BDNS and specifies filtering capabilities (date range, granting body). It distinguishes from sibling tools like search_grant_awards or search_legislation, which target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
While the description notes filtering options, it does not provide explicit guidance on when to use this tool versus alternatives such as search_grant_awards. There is no mention of exclusions or contexts where other tools would be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ine_tablesB
Search for tables within a specific INE operation.
| Name | Required | Description | Default |
|---|---|---|---|
| operation_id | Yes | Operation ID or code to search tables for (e.g., 'IPC', 'EPA') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description lacks behavioral details such as whether the tool is read-only, required permissions, rate limits, or what the response contains. With no annotations provided, the description carries the full burden and fails to disclose important behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that is appropriately front-loaded. It earns its place by being concise, though it could benefit from slightly more detail about what 'tables' means in this context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and annotations, the description is incomplete. It does not explain what information about the tables is returned (e.g., IDs, names, metadata), nor does it clarify the scope or limitations of the search. This leaves an agent without enough context to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides a description for 'operation_id' with examples. The tool description does not add significant meaning beyond the schema. With 100% schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for tables within a specific INE operation, using a specific verb and resource. It effectively differentiates from sibling tools like 'get_ine_table_data' (which retrieves data from a table) and 'get_ine_operation' (which gets operation metadata).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not indicate prerequisites, typical use cases, or scenarios where this tool is preferred over similar tools like 'get_ine_table_data' or 'get_ine_operation'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_legislationA
Search consolidated Spanish legislation. Filter by query, dates, title, department, legal range (Ley, Real Decreto, etc.), matter, and include/exclude repealed laws.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return | |
| query | Yes | Search query text | |
| title | No | Filter by title (partial match) | |
| offset | No | Number of results to skip (for pagination) | |
| date_to | No | End date for filtering (YYYY-MM-DD format) | |
| date_from | No | Start date for filtering (YYYY-MM-DD format) | |
| matter_code | No | Filter by matter/subject code (use get_matters_table to get codes) | |
| department_code | No | Filter by department code (use get_departments_table to get codes) | |
| legal_range_code | No | Filter by legal range code: Ley, Real Decreto, etc. (use get_legal_ranges_table to get codes) | |
| include_derogated | No | Include repealed/derogated legislation in results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fails to disclose behavioral traits such as whether the operation is read-only, requires authentication, or has rate limits. It only notes the source is 'consolidated', which offers minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero wasted words. It front-loads the core purpose and efficiently lists filter options without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers high-level filtering but omits details about pagination (limit/offset), response format, or the behavior of the 'include_derogated' parameter. For a tool with 10 parameters and no output schema, additional context would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description summarizes filters (e.g., 'dates, title, department') that correspond to schema parameters but adds no new semantic detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with the clear verb 'Search' and specifies the resource 'consolidated Spanish legislation'. It lists key filtering dimensions, making its purpose distinct from sibling tools like search_grants or search_ine_tables.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for legislation search but does not explicitly state when to use it versus alternatives like get_legislation_details or search_recent_boe. No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_open_dataB
Search datasets in the Spanish national open data catalog (datos.gob.es). Filter by theme (medio-ambiente, economia, salud, etc.) or publisher.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results to return | |
| query | No | Search query text (searches title, description, keywords) | |
| theme | No | Filter by theme code (e.g., 'medio-ambiente', 'economia', 'salud') | |
| publisher | No | Filter by publisher/organization ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the full burden of behavioral disclosure. It only mentions the basic function and filtering, but lacks details on rate limits, authentication requirements, pagination behavior, or any other operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with 18 words, front-loading the key action and resource. Every word is essential; there is no redundant or extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and full schema coverage, the description is minimally adequate. However, it omits details about pagination (the limit parameter) and does not hint at the response format or structure, which could be problematic without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all 4 parameters, so the baseline is 3. The description does not add meaningful information beyond the schema—it merely restates that filtering by theme or publisher is possible, which is already documented in the schema's property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches datasets in the Spanish national open data catalog and specifies filtering by theme or publisher. It uses a specific verb ('Search') and resource ('datasets in the Spanish national open data catalog'), and distinguishes from siblings like search_grants or search_legislation which target different data sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description only states what it does, without any context about when not to use it or which sibling tools might be more appropriate for related but distinct queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_recent_boeB
Search BOE publications from the last N days. Useful for finding recent legislative activity. Supports filtering by section and search terms.
| Name | Required | Description | Default |
|---|---|---|---|
| days_back | No | Number of days to search back from today (1-30) | |
| max_items | No | Maximum total items to return across all days | |
| search_terms | No | Search terms to filter items by title (case-insensitive, partial match) | |
| section_filter | No | Filter by section (e.g., '1', '2A', '2B', '3', '4', '5', 'T') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, description carries full burden. It does not disclose that tool is read-only, nor does it explain return format or pagination behavior. Merely restates filtering without additional behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. First sentence states core functionality, second adds context and filtering. Efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and many siblings, description lacks details on output format, ordering, or how results are structured. Leaves agent guessing about return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are well-documented. Description adds no new semantics beyond restating that filtering is supported.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it searches BOE publications from last N days, with specific verb 'Search' and resource 'BOE publications'. It distinguishes from siblings like search_legislation by focusing on recent activity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies usage for recent legislative activity but does not explicitly state when not to use or provide alternatives such as get_boe_summary or search_legislation for different scopes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
26 tool updates
v0.1.0- First observed
find_related_laws - First observed
get_boe_summary - First observed
get_borme_summary - First observed
get_departments_table - First observed
get_grant_details - First observed
get_ine_operation - First observed
get_ine_operations - First observed
get_ine_series_data - First observed
get_ine_table_data - First observed
get_ine_variables - First observed
get_legal_ranges_table - First observed
get_legislation_block - First observed
get_legislation_details - First observed
get_legislation_structure - First observed
get_legislation_text - First observed
get_matters_table - First observed
get_open_data_details - First observed
get_system_info - First observed
list_open_data_publishers - First observed
list_open_data_themes - First observed
search_grant_awards - First observed
search_grants - First observed
search_ine_tables - First observed
search_legislation - First observed
search_open_data - First observed
search_recent_boe
TDQS
Each tool targets a distinct data source or operation: legislation, BOE, BORME, INE statistics, grants, open data, and reference tables. No two tools have overlapping purposes, and descriptions clearly differentiate them.
All tool names follow a consistent verb_noun pattern using snake_case (e.g., search_legislation, get_boe_summary, list_open_data_publishers). No mixing of conventions or vague verbs.
With 26 tools, the count is slightly high but justified by the broad scope covering multiple public data domains. Each tool serves a clear purpose within its domain, so the number is reasonable.
The tool surface covers the full lifecycle for each domain: search, retrieve details, and access structured data. For legislation, it includes search, metadata, structure, text, and related laws. INE, grants, and open data are similarly comprehensive.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
BOE, Spanish public tenders and INE statistics behind one MCP server.
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
CompanyLens is a remote MCP server giving AI agents instant access to official company registry data across 19 jurisdictions in Europe, the Americas, and Asia-Pacific. Eighteen read-only tools let you search companies and people, look up officers and beneficial owners, map corporate networks through shared directors, screen names against the UK disqualified directors register, find every company at a registered address, and pull filing history — all from a single connector. Visit our website: https://companylens.io
Related MCP Servers
AlicenseAqualityDmaintenanceMCP server for Portuguese Parliament open data, enabling AI agents to access legislative initiatives, deputies, plenary votes, petitions, and parliamentary committees.126MIT- AlicenseNot gradedqualityDmaintenanceMCP Server for accessing 36 Brazilian public data sources and 1 agent, enabling AI agents to query government data on economy, legislation, transparency, judiciary, elections, environment, health, and more.MIT
- AlicenseNot gradedqualityDmaintenanceA collection of MCP servers that connect AI assistants to Spanish open government data, including statistics, legislation, land registry, and weather forecasts.7MIT
- AlicenseNot gradedqualityDmaintenanceMCP server that exposes French public APIs (Data Inclusion, Légifrance, La Bonne Alternance) as tools for LLMs, enabling social, legal, and employment assistance.4MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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