APIEmpresas: Spanish company data
Server Details
Spanish company data: CIF lookup, BORME, directors, KYB, sanctions and open public tenders.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- abasmartinc/apiempresas-mcp
- GitHub Stars
- 0
- Server Listing
- APIEmpresas MCP
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 12 tools
Most tools target clearly distinct resources (sanctions, BORME acts, risk, subsidies, awarded contracts, open tenders, usage), and descriptions explicitly cross-reference neighbours ('for a single name use search_companies', 'for data only use get_company'). However, four adjacent pairs (search_companies/find_cif_by_name, get_company/verify_company, verify_company/verify_invoice_recipients, get_public_contracts/search_tenders) can be confused at a glance, relying on description text to separate them.
Every name is snake_case with a clear verb_noun pattern (get_*, search_*, verify_*, find_*, check_*), with no camelCase or bare-noun outliers. The verb choice also signals the operation type consistently across the set.
12 tools sits squarely in the well-scoped range, and each one maps to a distinct compliance or prospecting task (lookup, bulk resolution, risk, sanctions, tenders, KYB, invoicing, quota). Nothing appears redundant enough to remove.
The surface covers the full KYB/compliance lifecycle: identify (search/find_cif), inspect (get_company, BORME, risk, subsidies, contracts), decide (verify_company, check_sanctions, verify_invoice_recipients) and monitor quota. Minor gaps remain: no annual accounts/financial statements tool, no beneficial-ownership or shareholder-structure lookup beyond socio único/matriz, and no activity/CNAE-based company search.
Available Tools
12 toolscheck_sanctionsListas de sancionesARead-onlyIdempotentInspect
Comprueba si una empresa española (por cif, junto con sus administradores vigentes) o un nombre suelto (name) aparece en las listas de sanciones de la UE, la ONU y OFAC (EE. UU.). Devuelve cada coincidencia con su grado (strong o possible), la lista, el programa, la fecha, el país y la fecha de nacimiento para confirmarla o descartarla: un nombre parecido no es una coincidencia confirmada. Úsala en altas de clientes o proveedores (KYB, prevención de blanqueo). Plan Business; gasta 1 consulta. Sanctions screening (EU, UN, OFAC).
| Name | Required | Description | Default |
|---|---|---|---|
| cif | No | CIF de la empresa (se comprueban la razón social y los administradores) | |
| name | No | Nombre de una persona o entidad, en lugar de cif | |
| type | No | Con name: person, entity o any |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered; the description adds genuinely new context: it costs one query against a Business plan allowance, returns a match grade, and warns that a similar name is not a confirmed match. It does not discuss rate limits or what an empty/failed response looks like beyond that caveat.
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?
Front-loaded with the core check, then inputs, return shape, use case and cost — a logical order with little waste. The trailing bilingual keyword tag 'Sanctions screening (EU, UN, OFAC).' is redundant with the opening sentence and slightly dilutes the ending.
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?
With no output schema, the description carries the return burden and does so: matches with grade, list, program, date, country and date of birth. Cost and plan gating are disclosed. The only residual gap — all three params are optional, so it never says at least one of cif/name is required — is minor.
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 baseline is 3; the description earns the extra point by clarifying that cif triggers checks on both the legal name and the current directors, and by framing cif and name as alternative input modes rather than combinable filters. It says nothing extra about the type enum (person/entity/any) that the schema doesn't already cover.
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?
States a specific verb and resource: checks whether a Spanish company (by CIF, including its current directors) or a bare name appears on EU, UN and OFAC sanctions lists. The scope detail (three named lists, two input modes, director expansion) makes it unmistakable against siblings like verify_company or get_risk_profile.
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?
Explicitly names the moment to use it — client/supplier onboarding, KYB, anti-money-laundering — and separates the CIF path from the name path. It also flags the commercial precondition (Plan Business) and cost (1 query), which shapes invocation decisions. It stops short of naming a sibling alternative or stating 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.
find_cif_by_nameDe nombre a CIF (lista)ARead-onlyIdempotentInspect
Convierte una LISTA de nombres de empresa (hasta 100) en sus CIF, con resultado match, ambiguous o no_match para cada uno. Úsala para completar hojas de clientes o proveedores que solo tienen el nombre. Solo los match gastan consulta. Para un solo nombre, search_companies. Plan Pro.
| Name | Required | Description | Default |
|---|---|---|---|
| names | Yes | Nombres de empresas | |
| province | No | Provincia (p. ej. VALENCIA) para desempatar; se aplica a todos los nombres |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered; the description adds genuinely non-structural behavior: only matches consume a query ('Solo los match gastan consulta') and the Pro plan requirement. It stops short of explaining how to act on an 'ambiguous' result beyond the province parameter's own schema note.
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?
Four short sentences, front-loaded with the core transformation, then result states, use case, cost, alternative and plan. Every sentence carries distinct information with no 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?
There is no output schema, and the description compensates by enumerating the three possible per-item outcomes plus the billing rule. Minor gaps remain: result ordering/alignment with the input array and behavior at the 100-item boundary are not addressed, but nothing critical to invoking it 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%, so both parameters (names, province) are already documented in structured form and the description need not compensate. The description restates the 100-item cap already encoded in maxItems but adds no new meaning about the province disambiguation semantics. Baseline 3 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?
States a specific verb and resource — converting a LIST of company names (up to 100) into CIFs — and defines the per-item outcome vocabulary (match, ambiguous, no_match). It also explicitly contrasts itself with the single-name sibling search_companies, so the tool is distinguishable without opening any schema.
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?
Gives a concrete use case (filling in client/supplier sheets that only have a name) and an explicit alternative with its selecting condition: 'Para un solo nombre, search_companies.' It also states a prerequisite, 'Plan Pro', which an agent needs before committing to the call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_borme_historyHistorial del BORMEARead-onlyIdempotentInspect
Todos los actos publicados en el BORME de una empresa, con fecha y PDF oficial: constitución, nombramientos y ceses, ampliaciones de capital, cambios de domicilio o de nombre, disolución, concurso... Úsala para la historia y los cambios recientes; para el estado actual basta get_company. Plan Pro.
| Name | Required | Description | Default |
|---|---|---|---|
| cif | Yes | CIF/NIF de la sociedad española, p. ej. A46103834 (se aceptan espacios y guiones) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered; the description adds that each act carries a date and an official PDF link, plus the 'Plan Pro' access restriction. It does not cover pagination or how far back the history reaches, which would matter for a potentially large historical dataset.
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, front-loaded with the resource definition, followed by routing advice and the plan requirement. The act-type enumeration is somewhat long but each item conveys concrete coverage, so it earns most of its space.
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?
There is no output schema, so the description carries the return-shape burden and does so: acts with date and official PDF. Access tier, routing versus the sibling tool, and scope of act types are all covered for a single-parameter read 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% and the single cif parameter is fully documented in the schema (formato CIF/NIF, se aceptan espacios y guiones). The description adds nothing about the identifier beyond what the schema already says, so the baseline 3 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?
Names a specific resource (todos los actos publicados en el BORME) and enumerates the concrete act types returned (constituciones, nombramientos y ceses, ampliaciones de capital, disolución, concurso...). It clearly separates itself from get_company by scoping to corporate-act history rather than current status.
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?
Explicitly states when to use it (historia y cambios recientes) and names the alternative with the condition that selects it (para el estado actual basta get_company). It also flags the Pro plan requirement, which affects whether the agent can call it at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_companyEmpresa por CIFARead-onlyIdempotentInspect
Ficha de UNA empresa española cuando ya tienes su CIF/NIF. Úsala para saber si existe y está activa, su razón social, forma jurídica (con código ISO 20275), código LEI, CNAE, provincia y fecha de constitución; con plan Pro, también domicilio, tramo de facturación, socio único, matriz del grupo y, con include_directors, los administradores vigentes, el tramo de empleados y cuántas sociedades comparten su domicilio (domicilio masivo). Si no tienes el CIF, usa search_companies; para decidir un alta (KYB), verify_company. Gasta 1 consulta; sin API key funciona con los datos básicos y un límite diario. Spanish company lookup by tax ID.
| Name | Required | Description | Default |
|---|---|---|---|
| cif | Yes | CIF/NIF de la sociedad española, p. ej. A46103834 (se aceptan espacios y guiones) | |
| include_directors | No | true para incluir administradores y cargos vigentes (Pro y Business) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations by disclosing cost ('Gasta 1 consulta'), degraded no-API-key behavior with a daily limit, and Pro-tier gating of address/revenue/group fields plus the include_directors requirement (Pro y Business). It doesn't say what happens on an invalid CIF or a non-existent company, which is the remaining behavioral gap.
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 precondition and core purpose come first, followed by return fields, then alternatives and cost — a sensible front-load. The trailing English restatement 'Spanish company lookup by tax ID' is redundant against the opening sentence and the title.
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?
With no output schema, the description correctly enumerates the returned fields (razón social, forma jurídica, LEI, CNAE, provincia, fecha de constitución) and what conditional extras unlock. An agent has enough to call it and interpret results; only failure/nonexistence semantics are unstated.
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 already 100%, so the baseline is 3, but the description adds real meaning: include_directors is tied to a Pro/Business entitlement and to specific extra payload fields (administradores, tramo de empleados, domicilio masivo). The cif parameter itself adds nothing 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?
States a specific verb and resource ('Ficha de UNA empresa española') and pins the precondition ('cuando ya tienes su CIF/NIF'), which immediately separates it from name-based lookups. It also enumerates the returned fields, so an agent knows exactly what retrieval this is versus search_companies or verify_company.
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?
Explicit routing: 'Si no tienes el CIF, usa search_companies' and 'para decidir un alta (KYB), verify_company'. Both alternatives from the sibling set are named together with the condition that selects them, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_public_contractsContratos públicosARead-onlyIdempotentInspect
Contratos del sector público adjudicados a una empresa (Plataforma de Contratación del Sector Público): organismo, objeto, importe y fecha. Plan Business.
| Name | Required | Description | Default |
|---|---|---|---|
| cif | Yes | CIF/NIF de la sociedad española, p. ej. A46103834 (se aceptan espacios y guiones) | |
| page | No | Página (por defecto 1) | |
| limit | No | Contratos por página (por defecto 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds real context beyond that: the underlying data source and the Business-plan access requirement. It omits pagination behavior and result-size characteristics, which keeps it from a 5.
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 dense sentence that front-loads the resource, the source and the returned fields with no filler. Every clause 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?
With no output schema, the description usefully enumerates the fields returned (organismo, objeto, importe, fecha), and annotations cover the safety profile. Gaps: pagination behavior and how to distinguish from search_tenders are unaddressed.
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% – cif format, page and limit defaults are all documented in the schema. The description adds nothing about parameter semantics, so the baseline 3 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?
States a specific resource (public-sector contracts awarded to a company), names the source registry (Plataforma de Contratación del Sector Público) and lists the returned fields (organismo, objeto, importe, fecha). An agent can tell it retrieves awarded contracts per company, though it doesn't explicitly contrast with the sibling search_tenders.
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 trailing 'Plan Business' signals a subscription prerequisite, which is useful context, but there is no explicit statement of when to use this versus search_tenders or the other company-data siblings. Usage is implied by the resource description only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_risk_profilePerfil de riesgoARead-onlyIdempotentInspect
Nivel de riesgo de una empresa y sus motivos, calculado a partir de sus publicaciones en el BORME (concursos, disoluciones, cierres de hoja registral, cuentas no depositadas, cambios de administradores...). Úsala antes de dar crédito o firmar con un proveedor. Plan Business.
| Name | Required | Description | Default |
|---|---|---|---|
| cif | Yes | CIF/NIF de la sociedad española, p. ej. A46103834 (se aceptan espacios y guiones) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and non-destructive, so safety is covered. The description adds genuinely new behavior: the score is derived from BORME events and is gated behind the 'Plan Business' tier — a meaningful access constraint an agent would otherwise not know.
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?
Three tight sentences: purpose, evidence sources, then the usage trigger. Front-loaded and waste-free, though the 'Plan Business' note appended at the end reads slightly as an afterthought rather than an integrated constraint.
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?
With no output schema, the description should explain what comes back; it does so partially (a risk level plus its reasons) and names the underlying signals, which is enough to call the tool correctly. The score scale and behavior when a company has no BORME data remain unstated, a minor gap.
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% and the single cif parameter is fully documented in the schema (format, length, examples, spacing tolerance). The description adds nothing about the parameter, so the baseline 3 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?
States a specific resource (nivel de riesgo de una empresa) plus its derivation source (publicaciones en el BORME) and enumerates the event types that feed the score, which clearly differentiates it from get_borme_history (raw history) and verify_company.
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?
Gives an explicit decision context — 'Úsala antes de dar crédito o firmar con un proveedor' — which tells the agent exactly when this tool is the right call. It does not name an alternative or state when NOT to use it, which keeps it out of the 5 tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subsidiesSubvenciones y ayudas públicasARead-onlyIdempotentInspect
Subvenciones, préstamos, garantías y ventajas fiscales concedidos a una empresa española según la Base de Datos Nacional de Subvenciones (BDNS), desde 2022, Kit Digital incluido: resumen por año, por instrumento y las convocatorias con más importe, y la lista de concesiones. Úsala para prospección de ayudas o para saber cuánto dinero público recibe. Plan Business; gasta 1 consulta. Public grants received by a Spanish company.
| Name | Required | Description | Default |
|---|---|---|---|
| cif | Yes | CIF/NIF de la sociedad española, p. ej. A46103834 (se aceptan espacios y guiones) | |
| year | No | Solo las concesiones de ese año | |
| limit | No | Concesiones por página (por defecto 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld, so the safety profile is covered. The description adds non-obvious operating context: the BDNS registry as source, a 2022 floor on data, and a metered cost requiring the Business plan. It doesn't mention pagination or caps on results, which for a list-returning tool would have been useful.
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 payload is front-loaded — data scope first, then outputs, then use case, then cost. Every clause carries information; the only near-redundancy is the trailing English gloss, which is short and aids disambiguation.
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?
With no output schema, the description compensates by enumerating the shape of the response (year summary, instrument summary, top convocatorias, concessions list). Combined with full schema coverage and read-only annotations, an agent has everything needed to call 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?
Schema coverage is 100%, so cif, year and limit are already fully documented in the schema. The description's mention of 'resumen por año' hints at the year filter's role but adds no format or behavior detail beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
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?
Names the specific resource (subvenciones, préstamos, garantías, ventajas fiscales), the source (BDNS), the time scope (desde 2022), the addressee (empresa española) and the exact outputs (resumen por año, por instrumento, convocatorias con más importe, lista de concesiones). This clearly separates it from siblings such as get_public_contracts or check_sanctions without ambiguity.
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?
'Úsala para prospección de ayudas o para saber cuánto dinero público recibe' gives concrete use cases, and the 'Plan Business; gasta 1 consulta' note warns about a cost/eligibility constraint up front. It stops short of naming when NOT to use it or pointing to a sibling alternative for adjacent data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usageConsumo de la cuentaARead-onlyIdempotentInspect
Plan de la cuenta del usuario, consultas usadas y disponibles y saldo de créditos. No gasta consultas. Úsala si una herramienta responde que se ha agotado el cupo.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds a meaningful behavioral detail not present in annotations: calling it does not spend queries. It does not discuss authentication or rate limits, but the key cost behavior is disclosed.
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?
Three short sentences front-load what the tool returns, then add the no-cost behavior, then the usage trigger. Every sentence carries useful information with no repetition 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 zero-parameter read-only diagnostic tool, the description is complete: it lists the returned data, states that calls are free, and gives the exact condition for using it. The absence of an output schema is offset by the explicit summary of return contents.
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 takes no parameters, so there is no parameter semantics to document and the baseline is 4. The description adds no misleading parameter information.
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 a specific resource — the user's account plan, used and available queries, and credit balance — so an agent knows exactly what data it returns. It is clearly distinct from all sibling tools, which are company-information and verification 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?
It gives an explicit trigger: use it if another tool reports that the quota has been exhausted. It also clarifies that calling it does not consume queries. It does not spell out when not to use it, but for a zero-parameter diagnostic tool the context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companiesBuscar empresas por nombreARead-onlyIdempotentInspect
Busca empresas españolas por nombre o parte del nombre y devuelve las candidatas con su CIF, provincia y estado. Úsala cuando NO tienes el CIF de una empresa concreta; después, get_company con el CIF elegido. Para convertir una lista de muchos nombres en CIF, mejor find_cif_by_name. Sin API key funciona con hasta 10 resultados y un límite diario. Search Spanish companies by name.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Número máximo de resultados (por defecto 10) | |
| query | Yes | Nombre o parte del nombre de la empresa |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint, destructiveHint=false). The description adds information annotations cannot carry: the unauthenticated quota behavior ('sin API key... hasta 10 resultados y un límite diario'), which affects how an agent should plan calls. It does not say what happens when the limit is hit or how pagination works, so it stops short of 5.
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?
Front-loaded with purpose, then usage conditions, alternatives, then quota caveat – a sensible priority order. The trailing English restatement is a minor redundancy that does not disrupt the flow.
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?
No output schema exists, and the description compensates by naming the returned fields (CIF, provincia, estado), so an agent knows what it can chain into get_company. Combined with the sibling routing and the quota note, nothing essential to calling this correctly is missing for a 2-parameter read 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% with both parameters documented (query minLength 2, limit 1-25 default 10), so the baseline is 3. The description adds real meaning by explaining that the 10-result ceiling is the anonymous-mode cap while the schema's maximum of 25 is the authenticated ceiling. It adds no detail on matching behavior (accent handling, casing, partial word matching), which is the remaining gap.
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?
Specific verb + resource ('Busca empresas españolas por nombre o parte del nombre') plus the shape of what comes back (CIF, provincia, estado). It is clearly separable from get_company (needs a CIF) and find_cif_by_name (bulk resolution) without opening either schema.
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?
States the triggering condition explicitly ('Úsala cuando NO tienes el CIF'), the follow-up step ('después, get_company con el CIF elegido'), and names an alternative for a different case ('Para convertir una lista de muchos nombres en CIF, mejor find_cif_by_name'). When, when-not, and alternatives are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tendersLicitaciones públicas abiertasARead-onlyIdempotentInspect
Licitaciones públicas EN PLAZO en España (Plataforma de Contratación del Sector Público y plataformas autonómicas): título, organismo, provincia, importe, plazo de ofertas, CPV y enlace para presentarse. Filtra por palabras del título (query), CPV, provincia, tipo (supplies, services, works) e importe. Con cif, devuelve las abiertas parecidas a los contratos que esa empresa ya ha ganado: úsala para "¿a qué concursos se puede presentar esta empresa?". Plan Business; gasta 1 consulta. Open public tenders in Spain.
| Name | Required | Description | Default |
|---|---|---|---|
| cif | No | CIF de una empresa: licitaciones parecidas a lo que ya ha ganado | |
| cpv | No | CPV o su principio, separados por comas (p. ej. "72,48" para informática) | |
| type | No | Tipo de contrato | |
| limit | No | Número de licitaciones (por defecto 20) | |
| query | No | Palabras que deben aparecer en el título, p. ej. "limpieza colegios" | |
| province | No | Provincia del organismo, p. ej. Madrid, Barcelona, Bizkaia | |
| max_amount | No | Importe máximo sin IVA (euros) | |
| min_amount | No | Importe mínimo sin IVA (euros) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses that the tool is tied to a Business plan and consumes one query, which is important operational context. It also explains the CIF-driven similarity behavior and says only open, in-deadline tenders are returned; annotations already cover read-only and idempotent behavior.
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 front-loaded with the resource and scope before moving into filters, CIF behavior, and plan cost. It is dense but readable; the final English sentence is slightly redundant but does not materially harm 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?
There is no output schema, so the description usefully lists the returned fields: title, body, province, amount, deadline, CPV, and application link. Combined with the access-plan note and CIF use case, it gives an agent enough context to call 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?
Schema description coverage is 100%, so all parameters are already documented in the input schema. The description summarizes the filters (query, CPV, province, type, amount, cif) but adds little parameter-level detail beyond what the schema already provides, 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 clearly states a specific verb and resource: searching open public tenders in Spain that are still within the bidding deadline. It names the data sources and returned fields, making the tool's purpose distinct, though it does not explicitly contrast itself with siblings such as get_public_contracts.
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?
It gives a concrete usage scenario in Spanish: use with cif to find tenders similar to contracts a company has already won, framed as '¿a qué concursos se puede presentar esta empresa?'. It also describes the available filtering modes, but does not state when not to use it or name alternatives among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_companyVerificación KYBARead-onlyIdempotentInspect
Verificación para dar de alta a un cliente o proveedor (KYB) en una llamada: comprueba que la sociedad existe y opera, que la razón social que te han dado coincide (name), que quien firma es administrador vigente o socio único (person) y, si se pide, el NIF-IVA en VIES (vat) y si tiene EORI para importar y exportar fuera de la UE (eori). Avisa si el domicilio lo comparten muchas sociedades (domicilio masivo). Devuelve alertas y una recomendación pass / review / fail, además de forma jurídica, LEI, matriz y socio único. Úsala para decidir; para solo consultar datos, get_company. Plan Pro; gasta 2 consultas. KYB check for a Spanish company.
| Name | Required | Description | Default |
|---|---|---|---|
| cif | Yes | CIF/NIF de la sociedad española, p. ej. A46103834 (se aceptan espacios y guiones) | |
| vat | No | true para comprobar además el NIF-IVA intracomunitario en VIES | |
| eori | No | true para comprobar si tiene número EORI de operador de aduanas (importa o exporta fuera de la UE) | |
| name | No | Razón social que ha declarado el cliente, para comprobar que coincide | |
| person | No | Nombre y apellidos de quien firma, para comprobar si es administrador o socio único |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it as read-only, idempotent, open-world and non-destructive. The description adds valuable operational context: it runs in one call, costs 2 queries, requires Plan Pro, and returns alerts plus a pass/review/fail recommendation.
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 dense but mostly earns its length by covering checks, return values, usage, plan and cost. It is slightly front-loaded into one long Spanish sentence and ends with a redundant English summary line.
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 complex KYB verification tool with no output schema, the description explains what is checked, optional checks, alert behavior and returned fields such as legal form, LEI, parent and sole partner. It also covers cost and plan requirements, leaving no major decision gap for the 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?
Schema description coverage is 100%, so the schema already documents all five parameters. The description maps name, person, vat and eori to their business checks, but adds little syntax or format detail 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?
States a precise verification purpose: KYB onboarding check for a Spanish company, including existence/operation, name match, signer role, optional VIES and EORI checks. It clearly distinguishes itself from the data-lookup sibling get_company.
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?
Explicitly says to use it to decide and to use get_company for data lookup only. It also notes the Plan Pro requirement and query cost, which helps the agent choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_invoice_recipientsValidar NIF de clientes para facturarARead-onlyIdempotentInspect
Valida una LISTA de clientes (hasta 100) antes de emitirles facturas (Verifactu, factura electrónica): por cada NIF, si el formato es válido, si la sociedad consta, su razón social y domicilio oficiales, su estado y, si das el nombre que tienes guardado, si coincide. Devuelve invoice_hint ok / revisar / no_facturar con los motivos (extinguida, absorbida, en concurso, nombre distinto, NIF de ejemplo...). Úsala para revisar la cartera de clientes de un programa de facturación o ERP; para dar de alta a un solo cliente con más detalle, verify_company. No sustituye al censo de la AEAT. Plan Pro, Business o saldo; gasta 1 consulta por sociedad encontrada (lo que no consta no se cobra). Bulk VAT/tax ID check of invoice recipients.
| Name | Required | Description | Default |
|---|---|---|---|
| vat | No | true para comprobar además el NIF-IVA en VIES (solo con 20 clientes o menos) | |
| items | Yes | Clientes a validar |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=true, so the safety profile is covered. The description's real additions are the output vocabulary (invoice_hint ok / revisar / no_facturar with motives) and the "no sustituye al censo de la AEAT" caveat, but the commercial terms ("Plan Pro, Business o saldo; gasta 1 consulta por sociedad encontrada") duplicate what would sit better in dedicated metadata and leave the billing mechanics underspecified.
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 action is front-loaded and every clause carries information (checked fields, output hints, sibling routing, quota, disclaimer). It is dense and parenthetical-heavy rather than bloated, but the pricing/plan sentence and the bilingual trailing line add length that is not all decision-relevant.
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 read-only bulk validator with full schema coverage and no output schema, the description does explain the returned hint values and their motives, which is the key gap it must fill. It still omits what happens to items with invalid format in the response shape (only hinted at) and how partial failures or >100-item batches behave.
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 the baseline is 3; the description nevertheless explains the intent of the name field ("si das el nombre que tienes guardado, si coincide") and reinforces the array cap of 100 and the per-item reference round-trip. That is meaningful added semantics on top of the schema, though the vat/VIES ≤20 rule is only in 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?
States a specific verb and resource (validate a LIST of clients' NIFs before issuing invoices) plus exactly what is checked per item: format validity, registered company, official name/address, status, and name match. It explicitly distinguishes itself from verify_company, which is the sibling for a single client with more detail.
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?
Gives the concrete use case (reviewing a client portfolio from an invoicing program or ERP), names the alternative (verify_company for a single client in more detail), and adds a boundary ("No sustituye al censo de la AEAT"). Nothing about when to pick it is left to inference.
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.
12 tool updates
- First observed
check_sanctions - First observed
find_cif_by_name - First observed
get_borme_history - First observed
get_company - First observed
get_public_contracts - First observed
get_risk_profile - First observed
get_subsidies - First observed
get_usage - First observed
search_companies - First observed
search_tenders - First observed
verify_company - First observed
verify_invoice_recipients
Related MCP Connectors
Verify Spanish companies by CIF: registry data, status and BORME filings, paid per call over x402.
Registro Mercantil español (BORME) + subvenciones (BDNS) + contratos públicos (PLACSP), por empresa.
Spanish company registry (BORME): companies, directors, how they connect. Needs a free account.
Brazilian company data by CNPJ from Receita Federal: partners, CNAE, address, debts and sanctions.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceSearch Spanish companies, directors and corporate relationships from official BORME registry filings — ~3.2M companies since 2009. Read-only, anonymous.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to perform due diligence, KYB, and supplier or client verification by querying Spanish company registry data cross-referenced with public grants and procurement awards, each fact linking to its official publication.MIT
- AlicenseNot gradedqualityBmaintenanceCompany data for Spain, France, the UK, Ireland and Poland — registry, KYB and sanctions.1,179 npmMIT
- AlicenseAqualityCmaintenanceEnables MCP agents to verify Spanish companies by CIF against the BORME, returning registry data, recent acts, and explainable 0–100 risk scoring. Also exposes the x402 payment challenge (price, network, asset, pay-to address) so a wallet the user controls can settle it and the verification can be retried.3MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.