APIEmpresas MCP
Click on "Deploy 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., "@APIEmpresas MCPverifica si Mercadona está activa y quién es su administrador"
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.
APIEmpresas MCP
Servidor MCP oficial de APIEmpresas.es: datos de empresas españolas para Claude, Cursor, VS Code y cualquier asistente compatible con MCP.
Pregunta en lenguaje natural ("¿Mercadona está activa y quiénes son sus administradores?", "saca el CIF de estas 40 empresas", "¿esta empresa ha tenido un concurso?") y el asistente consulta la API con tu clave.
Herramientas
Herramienta | Qué hace | Plan |
| Empresa por CIF: razón social, estado, constitución, provincia, CNAE, forma jurídica (ISO 20275) y LEI; domicilio, socio único, matriz del grupo y administradores según plan | Free (datos recortados), Pro |
| Buscar empresas por nombre | Free |
| Verificación KYB: existe, activa, nombre y administrador (o socio único) coinciden y, si se pide, NIF-IVA en VIES; con forma jurídica, LEI, matriz y socio único (2 consultas) | Pro |
| De nombre a CIF, hasta 100 a la vez, con provincia opcional para desempatar (solo cobra las coincidencias) | Pro |
| Actos publicados en el BORME | Pro |
| Perfil de riesgo a partir del BORME | Business |
| Contratos públicos adjudicados | Business |
| Plan, consultas disponibles y saldo de créditos (gratis; no funciona en el Sandbox) | Todos |
Todas son de solo lectura. Cada llamada gasta consultas de tu plan, igual que la API.
Related MCP server: registry-mcp
Instalación
Crea una cuenta gratis (100 consultas, sin tarjeta) en apiempresas.es y copia tu API key del panel.
Añade el servidor a tu cliente (necesita Node.js 18 o superior).
Claude Desktop
En claude_desktop_config.json:
{
"mcpServers": {
"apiempresas": {
"command": "npx",
"args": ["-y", "apiempresas-mcp"],
"env": { "APIEMPRESAS_API_KEY": "tu_api_key" }
}
}
}Claude Code
claude mcp add apiempresas --env APIEMPRESAS_API_KEY=tu_api_key -- npx -y apiempresas-mcpCursor
En ~/.cursor/mcp.json (o .cursor/mcp.json en el proyecto), el mismo bloque mcpServers que en Claude Desktop.
VS Code
En .vscode/mcp.json:
{
"servers": {
"apiempresas": {
"type": "stdio",
"command": "npx",
"args": ["-y", "apiempresas-mcp"],
"env": { "APIEMPRESAS_API_KEY": "tu_api_key" }
}
}
}Pruebas sin coste
Con APIEMPRESAS_BASE_URL=https://apiempresas.es/api/sandbox/v1 las llamadas no gastan consultas (solo admite los CIF de prueba A15075062 y B00000000).
Qué conviene saber
El estado registral, el scoring y el perfil de riesgo los calcula APIEmpresas a partir del BORME: no son un certificado del Registro Mercantil.
No cubre titular real, listas de sanciones o PEP, ni empresarios individuales (autónomos).
Precios: Free 100 consultas; Pro 19 €/mes (3.000/mes); Business 49 €/mes (10.000/mes); bonos sin suscripción desde 9 €. IVA no incluido. Detalle en apiempresas.es.
Documentación completa de la API: apiempresas.es/documentation.
English
Official MCP server for APIEmpresas.es, a REST API for Spanish company data: lookup by CIF (tax ID), name search, KYB verification, directors, BORME (Commercial Registry gazette) filings, public contracts and risk profile. Get a free API key (100 requests) at apiempresas.es and run npx -y apiempresas-mcp with APIEMPRESAS_API_KEY set.
Licencia
MIT
Available Tools
8 toolsfind_cif_by_nameDe nombre a CIFARead-onlyIdempotent
Encuentra el CIF de una lista de empresas a partir de sus nombres (hasta 100). Cada resultado es match, ambiguous o no_match; solo los match gastan consulta. Plan Pro o superior. Útil para completar hojas de clientes.
| Name | Required | Description | Default |
|---|---|---|---|
| names | Yes | Nombres de empresas | |
| province | No | Provincia (p. ej. VALENCIA) para desempatar entre empresas con el mismo nombre; se aplica a todos |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/openWorld, and the description adds genuinely new behavioral facts: the result taxonomy (match / ambiguous / no_match), the billing rule that only 'match' consumes a query, and the required plan tier. These quota and plan details are not derivable from annotations or schema and materially affect how the agent batches calls.
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, front-loaded sentences with no filler: capability, result semantics, cost/plan constraint, use case. Every sentence carries information the agent needs.
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 adequately covers the shape of results (match/ambiguous/no_match) plus quota and plan constraints, so an agent knows what to expect. The only gap is the absence of routing guidance against sibling tools, which is minor given the strong capability and cost disclosure.
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 are already documented (names and the province tie-breaker). The description only restates the 100-item cap, adding nothing new about the parameters themselves; baseline 3 is appropriate when the schema does the work.
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 (find), a precise resource (CIF), and the input scope (a list of company names, up to 100). This is clearly distinguishable from siblings like get_company (lookup by identifier) and search_companies (fuzzy search), so an agent can select it without opening the 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?
It names a concrete use case ('útil para completar hojas de clientes') and a hard precondition (Pro plan or higher), giving the agent clear selection context. However, it never states when NOT to use it or which sibling to prefer (e.g. get_company when you already have the CIF), leaving alternatives to inference.
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-onlyIdempotent
Actos publicados en el BORME (Boletín Oficial del Registro Mercantil) de una empresa: constitución, nombramientos y ceses, ampliaciones de capital, cambios de domicilio, disolución, concurso… Plan Pro o superior.
| Name | Required | Description | Default |
|---|---|---|---|
| cif | Yes | CIF/NIF de la empresa 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 readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description contributes the subscription-tier requirement, which is genuinely new behavioral context, but says nothing about historical coverage limits or ordering of the returned acts.
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 and then illustrates the return content; the trailing ellipsis signals the list is non-exhaustive without padding. The act-type enumeration slightly lengthens it but earns its place given there is no output schema.
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 one-parameter, fully-annotated read tool with no output schema, the description enriches the picture by naming the kinds of records returned. Missing only minor operational detail such as volume or chronological ordering of the history.
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 Spanish (format, spaces and hyphens accepted, example). The description adds no parameter-level detail, 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 verb+resource (retrieving BORME-published acts for a company) and enumerates the concrete event types returned, which makes the tool's scope understandable at a glance. It does not explicitly contrast itself with siblings like get_company, though BORME is distinctive enough to stand alone.
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?
Usage is only implied: the tool is for consulting a company's official gazette history. It does add a real gating condition ('Plan Pro o superior'), but there is no explicit statement of when to prefer this over get_company or get_risk_profile, nor any exclusions.
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-onlyIdempotent
Datos de una empresa española a partir de su CIF/NIF: razón social, estado (activa, extinguida, en concurso…), fecha de constitución, provincia, municipio, CNAE, forma jurídica (con código ISO 20275) y código LEI y, según el plan, domicilio completo, tramo de facturación, socio único (ownership), matriz del grupo según GLEIF (group) y administradores (include_directors). Gasta 1 consulta. El estado lo calcula APIEmpresas a partir del BORME; no es un certificado del Registro Mercantil. Spanish company lookup by tax ID.
| Name | Required | Description | Default |
|---|---|---|---|
| cif | Yes | CIF/NIF de la empresa española, p. ej. A46103834 (se aceptan espacios y guiones) | |
| include_directors | No | true para incluir administradores y cargos vigentes (planes Pro y Business) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/openWorld annotations, the description discloses three things an agent cannot get from structured fields: the cost ('Gasta 1 consulta'), that certain returned fields are plan-gated (domicilio, tramo de facturación, ownership, GLEIF group, administradores), and the provenance/liability caveat that the status is derived by APIEmpresas from the BORME and is not a Registro Mercantil certificate.
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?
Purpose is front-loaded in the first clause, followed by the field list and the cost/caveat notes. The enumeration is dense but justified because no output schema exists, so the field list is the only return-value documentation; still, it runs long enough that a reader must scan the whole opening sentence.
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-value burden and does so by enumerating fields, plan tiers, cost and data provenance. Remaining gaps are edge behavior (what happens for an unknown or malformed CIF) and nothing about response shape beyond the field list.
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% (both params documented with an example CIF and a plan note), so the baseline is 3. The description goes beyond it by tying include_directors to the concrete field it unlocks (administradores/cargos vigentes) and by listing which other fields depend on the plan, giving extra meaning over the schema text.
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 retrieval verb (fetch data for a Spanish company) plus the exact key it operates on (CIF/NIF), and enumerates the returned attributes. The 'by tax ID' framing implicitly separates it from name-based siblings such as search_companies and find_cif_by_name, and adds an English gloss for disambiguation.
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?
Usage is implied: call this when you already have a CIF/NIF and need company master data. It never explicitly names a sibling or states when NOT to use this tool (e.g. use verify_company to validate a CIF, search_companies when you only have a name). No exclusions or prerequisites beyond the plan note on optional fields.
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úblicosBRead-onlyIdempotent
Contratos del sector público adjudicados a una empresa (Plataforma de Contratación del Sector Público). Plan Business.
| Name | Required | Description | Default |
|---|---|---|---|
| cif | Yes | CIF/NIF de la empresa 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, idempotentHint and openWorldHint, so the safety profile is covered. The description adds the external data source (consistent with openWorld) and the 'Plan Business' subscription requirement, which is genuine access context, but says nothing about return shape, pagination limits beyond the schema defaults, or result completeness.
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 compact fragments with no wasted words and the core purpose front-loaded. The trailing 'Plan Business.' is terse but does carry information, so nothing is padding.
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 ideally indicate what a contract record contains or how results are paginated, but it does not. Annotations cover safety and the source is named, so it is minimally viable but leaves the agent guessing about the payload.
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, page and limit all have descriptions with defaults and format notes. The description adds no parameter-level meaning beyond the schema, 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 verb+resource: public-sector contracts awarded to a company, and names the underlying source dataset (Plataforma de Contratación del Sector Público). This clearly distinguishes it from siblings like get_company or get_borme_history, though it never explicitly references those alternatives.
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?
Usage is only implied — an agent infers it should call this when it wants public procurement records for a company. There is no statement of when to prefer it over siblings such as get_borme_history, nor any exclusion. 'Plan Business' hints at a tier prerequisite but is not framed as a usage condition.
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-onlyIdempotent
Perfil de riesgo de una empresa calculado a partir de sus publicaciones en el BORME (concursos, disoluciones, cierres de hoja, cambios de administradores…), con nivel y explicación. Plan Business.
| Name | Required | Description | Default |
|---|---|---|---|
| cif | Yes | CIF/NIF de la empresa 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 readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new context: the data provenance (derived from BORME publications), the output contents ('nivel y explicación'), and a plan/tier requirement ('Plan Business') that acts as an access precondition.
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?
One dense sentence, front-loaded with the resource and derivation, then the event categories, then the output and plan note. Every clause earns its place, though the parenthetical enumeration of BORME events is slightly long.
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-value burden and does so ('nivel y explicación'). The single required parameter is fully covered by the schema, and the plan limitation is disclosed. It falls short only on sibling routing, which matters given the overlapping BORME-oriented siblings.
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 itself (format, example, accepted spaces/dashes). 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?
It names a specific resource (perfil de riesgo de una empresa), states the derivation source (publicaciones en el BORME), and lists the triggering event types (concursos, disoluciones, cierres de hoja, cambios de administradores). This is clearly distinguishable from siblings like get_borme_history, though it never explicitly contrasts itself with them.
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?
There is no statement of when to use this tool versus get_borme_history, get_company, or verify_company. The only usage-adjacent signal is 'Plan Business', which hints at an entitlement gate but does not tell the agent when this tool is the right choice.
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-onlyIdempotent
Plan de la cuenta, consultas usadas y disponibles, y saldo de créditos. No gasta consultas. No funciona en el Sandbox.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, and non-destructive behavior, so the safety profile is covered. The description adds genuinely new behavior: zero query consumption and Sandbox incompatibility, the latter being an environment-specific failure mode not visible anywhere else. Return format is not described, but the returned fields are enumerated.
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 terse sentences: payload, cost, environment constraint. No filler, and the most decision-relevant facts (free to call, fails in Sandbox) are stated plainly at the end where they are easy to scan.
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-value burden and does so by listing plan, usage counts, and credit balance. Combined with annotations covering safety and the Sandbox caveat, an agent has everything needed to 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 tool takes zero parameters, so there is nothing to disambiguate and the baseline of 4 applies. No parameter guidance is expected or 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 names the exact resource and its payload: account plan, queries used/available, and credit balance. It is a noun-phrase enumeration rather than a verb+resource statement, but an agent can immediately tell this returns account-consumption data. Sibling differentiation is unnecessary since none of the company-lookup siblings overlap with account usage.
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 two concrete usage conditions: calling it costs no queries, and it is unavailable in the Sandbox. That tells the agent when the tool is safe/cheap to call and where it will fail. It does not name alternatives, but no sibling tool covers this domain, so no routing guidance is needed.
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-onlyIdempotent
Busca empresas españolas por nombre o razón social y devuelve las coincidencias con su CIF. Útil cuando no se conoce el CIF. 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 declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds only that matches include the CIF; it says nothing about result ordering, partial-name matching behavior, or default result count beyond what the schema states.
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 short sentences, front-loaded with the action and the return value. The English sentence is a near-verbatim translation of the Spanish one, which is mildly redundant but serves bilingual readers.
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 two-parameter, no-output-schema lookup tool, the description covers the action, the input basis (name), the returned key field (CIF), and the usage scenario. Only the exact match payload fields are left unspecified, which is 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%, so both 'query' (minLength 2) and 'limit' (1-25, default 10) are already documented in the schema. The description merely restates that lookup is by name and adds no syntax or matching-rule 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?
Names a specific verb (busca) and resource (empresas españolas por nombre o razón social) plus what it returns (coincidencias con su CIF). However it does not differentiate itself from the very similar sibling find_cif_by_name, so an agent must still guess which lookup tool is preferred.
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 the selecting condition: useful when the CIF is not known. That is real when-to-use guidance, but it names no alternative tool and gives no exclusion for the overlapping find_cif_by_name / get_company siblings.
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-onlyIdempotent
Verificación KYB de una empresa en una sola llamada: si existe y está activa, si el nombre declarado coincide y si una persona es administradora o el socio único, con alertas y una recomendación (pass / review / fail). Devuelve también la forma jurídica, el LEI, la matriz del grupo y el socio único. Plan Pro o superior; gasta 2 consultas. KYB check for a Spanish company.
| Name | Required | Description | Default |
|---|---|---|---|
| cif | Yes | CIF/NIF de la empresa española, p. ej. A46103834 (se aceptan espacios y guiones) | |
| vat | No | true para comprobar además el NIF-IVA en VIES (operador intracomunitario) | |
| name | No | Razón social que ha declarado el cliente, para comprobar que coincide | |
| person | No | Nombre de la persona que firma, para comprobar si es administradora o socia única |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only, idempotent, open-world profile, so the bar is lower. The description still adds value beyond them: query cost (2 consultas), plan gating, and the categorical verdict output (pass/review/fail). It does not discuss rate limits or failure/error behavior, which keeps it out of 5 territory.
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 main purpose and the enumerated checks are front-loaded in the first sentence, with cost/plan and the returns trailing. Dense but every clause carries information; the trailing English fragment 'KYB check for a Spanish company' is mildly redundant with the opening.
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 appropriately carries the return burden, naming legal form, LEI, group parent and sole partner alongside the verdict. Combined with cost and plan gating, an agent has enough to invoke correctly; it only lacks guidance on sibling selection.
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 each parameter (cif, vat, name, person) is already documented in the schema. The description reinforces the purpose of 'name' (matching the declared razón social) and 'person' (administrator/sole partner) but adds no syntax or format detail beyond the schema, 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 verb (verificar) and resource (empresa) and enumerates exactly what the check covers: existence/active status, name match, administrator/sole-partner check, plus alerts and a pass/review/fail recommendation. That is well beyond a tautology. However, it never distinguishes itself from the sibling get_company, which an agent would plausibly confuse it with.
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?
Offers real operational constraints – 'Plan Pro o superior; gasta 2 consultas' – which tell the agent the cost and eligibility. But there is no explicit when-to-use vs get_company or get_risk_profile, so the choice between siblings 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.
8 tool updates
v1.1.0- 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_usage - First observed
search_companies - First observed
verify_company
TDQS
Scored across 8 tools
search_companies and find_cif_by_name both resolve company names to CIFs, differing mainly in bulk vs single lookup. get_company and verify_company overlap on company data, and get_borme_history vs get_risk_profile both rely on BORME, though descriptions clarify the latter is a derived risk summary. Some tools could be confused, but most have reasonably distinct purposes.
All tool names use snake_case with a consistent verb_noun pattern (get_, search_, verify_, find_). The convention is predictable throughout.
Eight tools is well-scoped for a Spanish company data and KYB API. Each tool earns its place by covering a distinct lookup, verification, or account operation.
The surface covers core company lookup, search, bulk CIF resolution, KYB verification, BORME history, risk profiling, public contracts, and usage. Minor gaps exist, such as direct financial statement retrieval or richer BORME filtering, but major workflows are covered.
Maintenance
Related MCP Connectors
Verify Spanish companies by CIF: registry data, status and BORME filings, paid per call over x402.
Global B2B intelligence for AI agents: 35M+ companies, 1.6M sanctions, KYB pack. 78 tools.
Spanish company registry (BORME): companies, directors, how they connect. Needs a free work account.
Company and domain due diligence for agents: registers, sanctions, VAT, domain. Pay per call.
Related MCP Servers
- AlicenseAqualityCmaintenanceStructured business intelligence for AI agents. 5.5M verified entities across 34 countries, 40.3M BORME mercantile acts, EU VAT validation, GLEIF, healthcare registries. 20 tools.61MIT
- AlicenseAqualityBmaintenanceThe company registry MCP: company data for AI agents, any country. One MCP server and REST API over national business registries — Norway (Brønnøysundregistrene / Enhetsregisteret, lookup by organisasjonsnummer/orgnr, VAT status) and the United Kingdom (Companies House, lookup by company number, accounts and confirmation-statement deadlines). Five tools: lookup_company, search_company, company_dea555 PyPIMIT
- AlicenseNot gradedqualityBmaintenanceEnables 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 gradedqualityAmaintenanceEnables AI assistants to query over 3 million Polish companies from the KRS and CEIDG registries, including financials, board members, shareholders, rankings, and sector statistics, plus public-register enrichments such as procurement awards, EU funding, insolvency records, and stock listings. Users can search, count, filter, and export company data or run read-only SQL through natural-language prompts.MIT