Skip to main content
Glama

BORME API - Spain company registry

Server Details

Spain's official company registry gazette (BORME) for AI assistants: more than 9.6 million company events since 2009, updated every business day. Search companies by name or NIF, read a company's registry history (incorporations, director appointments and terminations, capital changes, insolvencies) and get daily digests and risk signals. Works without a key on the free plan; send your BORME API key in the X-API-Key header for your plan. For OAuth sign-in use https://mcp.bormeapi.com/mcp/oauth.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.1/5.0

Scored across 10 tools

Disambiguation4/5

Each tool targets a distinct lookup direction or resource: search_companies/search_events for discovery, company_history/company_by_nif for a specific company, brand_owner vs company_brands for the two opposite brand directions. The main potential confusion is brand_owner vs company_brands, but the descriptions explicitly spell out direction and usage flow, so misselection is unlikely.

Naming Consistency4/5

All names are snake_case and largely entity-oriented (company_brands, company_history, registry_stats, recent_signals) with a couple of verb-first names (search_companies, search_events, list_act_types). It is a readable, mostly predictable convention with only minor deviations between noun-first and verb-first styles.

Tool Count5/5

Ten tools is well within the sweet spot and every tool maps to a clear capability: discovery, identity resolution, history, brands, digests, stats and signals. None appear redundant or token filler.

Completeness4/5

The surface covers search, NIF lookup, history, brands, event search, daily digest, act-type reference, dataset stats and risk signals, forming a credible lifecycle for registry research. Notable gaps remain, such as searching by officer/administrator or by province-based company filters rather than only via events, which agents may have to work around.

Available Tools

10 tools
brand_ownerAInspect

Find the Spanish company a brand or trading name is linked to, by holder name.

Searches the patent office's trademarks and commercial names (1987 to today), which BORME does not print, and returns for each the company whose name matches the holder name the office published.

commercial_name identifies a business; trademark distinguishes goods or services (NESCAFÉ is not another name for Nestlé). Say which kind a hit is; do not say a company "is called" X when X is one of its products.

Links are made on a normalised company name only (the office publishes no tax IDs) and only where exactly one company or registry sheet fits: present a hit as a name match, not confirmed ownership. On a hit, use company_history with the slug.

Needs the basic plan or higher: send your API key in the X-API-Key header (https://bormeapi.com/account).

NameRequiredDescriptionDefault
brandYesBrand or trading name, or part of it.
limitNoMaximum results, 1-200 (default 20).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well. It discloses the data source and date range, normalised-name-only matching, absence of tax IDs, the rule that only exactly one company/registry sheet may fit, that hits are name matches rather than confirmed ownership, and the API plan/header requirement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then adds the important matching and authentication caveats. It is somewhat dense but each sentence contributes useful guidance, with no obvious repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with two parameters, no output schema, and no annotations, the description provides enough context to call it correctly. It covers data scope, matching limitations, how to interpret a hit, next-step guidance, and authentication requirements.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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. The description adds meaningful semantics for `brand`: it can be a commercial name identifying a business or a trademark distinguishing goods/services, and matching is by normalised holder name rather than tax ID.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: find the Spanish company linked to a brand or trading name by holder name. It also distinguishes commercial names from trademarks and explains the patent-office data source, making the tool’s function clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly explains when the tool is useful: BORME does not print these trademark/commercial-name records, and on a hit the agent should use company_history. It does not explicitly compare against sibling company_brands, but the intended use is otherwise clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

company_brandsAInspect

Trademarks and trading names linked to one company by name (slug from company_history).

Answers "which trading names and trademarks does the patent office list under a holder of this company's name". The office publishes no tax IDs, so every link is a name match, not confirmed ownership. Commercial names identify a business; trademarks distinguish goods or services. An empty result is ordinary — most companies have neither on file.

limit applies to each kind separately (newest first), so trademarks never push trading names out. counts is how many of each kind this answer lists, not the company's total: when truncated is true for a kind, more are linked than were returned — raise limit to see them.

Needs the basic plan or higher: send your API key in the X-API-Key header (https://bormeapi.com/account).

NameRequiredDescriptionDefault
limitNoMaximum results per kind (trademarks, trading names), 1-200 (default 50).
companyYesCompany slug, as returned by search_companies or company_history.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so: it discloses that links are name matches, not confirmed ownership, that empty results are normal, that limit is applied per kind (newest first) so one kind cannot crowd out the other, and what counts/truncated actually mean. It also states the auth mechanism (X-API-Key header) and plan requirement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first line, followed by the semantic caveat and then the paging/auth mechanics in a sensible order. Slightly verbose — the sentence explaining that commercial names identify businesses while trademarks distinguish goods/services is interpretive gloss rather than operational guidance, though it does help interpret output.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 explaining the counts and truncated response fields and how to react to truncation (raise limit). Combined with plan/auth disclosure and the name-match caveat, an agent has everything needed to call and interpret this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 goes beyond it by clarifying that limit is applied independently to each kind and ordered newest-first, and by identifying where the required company slug comes from. It adds no detail on the 1-200 bound, which lives only in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Trademarks and trading names linked to one company') and pins the direction of the lookup ('by name (slug from company_history)' / 'which trading names and trademarks does the patent office list under a holder of this company's name'), which is enough to separate it from the inverse sibling brand_owner. It also defines what each of the two result kinds means.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for when results will be empty ('An empty result is ordinary — most companies have neither on file') and states the plan prerequisite for calling it. It stops short of naming alternatives — notably brand_owner, which is the reverse lookup and the most likely source of confusion — so it lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

company_by_nifAInspect

Look up a Spanish company by its NIF/CIF tax ID.

Needs the basic plan or higher: send your API key in the X-API-Key header (https://bormeapi.com/account).

BORME itself has no dedicated tax-ID field: the mapping is cross-referenced from open official sources and, in some cases, taken from the text of BORME notices (more than 580,000 NIF mappings from public sources, still a minority of companies). A miss means "not matched yet", not "does not exist". On a hit, use company_history with the returned slug.

If nif_caveat is present, say so and do not present the mapping as settled. A miss with reason "nif_check_character_failed" is an identifier never issued to anyone: relay that, the corrected identifier and did_you_mean. A miss with reason "not_registry_entity" has entity_type (the kind of entity or person): explain it as the response's note does. If ambiguous is true, list the candidates and ask which company is meant (records on one registry sheet in one province are one company).

NameRequiredDescriptionDefault
nifYesNIF/CIF, e.g. B12345674. Spaces, hyphens, dots and the ES VAT prefix (ESB12345674) are accepted; other country prefixes are not.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and delivers: it discloses the required plan and API key header, explains the mapping's provenance and incompleteness, and instructs how to interpret caveats, miss reasons, and ambiguous results. This is rich behavioral context beyond what any structured field provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description front-loads the purpose and packs necessary caveats and handling instructions into a single paragraph. While lengthy, every sentence contributes to correct interpretation; it could be slightly more concise but is not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of annotations and an output schema, the description is remarkably complete: it covers authentication, data limitations, and detailed response scenarios (caveat, miss reasons, ambiguity) with concrete instructions. An agent has everything needed to call and interpret the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameter is fully documented in the schema itself. The description adds little about the NIF parameter's format or semantics, focusing instead on result handling, so a baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb ('Look up') and resource ('Spanish company') qualified by identifier ('NIF/CIF tax ID'), which is clear. However, it does not explicitly contrast with sibling tools like search_companies, so the agent must infer that this is the tool for when a NIF is known.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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 the tool (when you have a NIF/CIF) and extensive instructions for handling outcomes, including miss reasons and ambiguity. It does not name an alternative tool for cases without a NIF, such as search_companies, so exclusions are absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

company_historyAInspect

Registry timeline for one company, as JSON.

company is a slug or a name; a name with several matches returns the candidate slugs instead. An older slug of a merged company returns the merged company's whole timeline: company_slug is the current slug, former_slugs the others, and each event keeps the slug it was printed under.

total_events, first_seen and last_seen describe the whole timeline within your plan's window, not just this page; truncated is true when the page holds fewer events than total_events, and next_offset starts the next page (null on the last). Page with order and offset.

Without an API key this is the free plan: only the last 7 days. Send your key in the X-API-Key header (https://bormeapi.com/account) for your plan's window (full history back to 2009 on pro).

NameRequiredDescriptionDefault
limitNoEvents per page, 1-200 (default 100).
orderNo"desc" (default, newest first) or "asc" (oldest first).desc
offsetNoEvents to skip, 0-10000, in steps of limit.
companyYesCompany slug (e.g. vaz-metales-sl) or name; a name falls back to a case-insensitive search (at least 3 letters or digits).

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so: it discloses merged-company slug coalescing behavior, that timeline aggregates span the whole history rather than the page, the meaning of truncated/next_offset, and plan-based data windows plus the X-API-Key header requirement. This is exactly the behavioral context an agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the one-line purpose, then groups slugs/merging, response aggregates, and auth tiers into short, scannable paragraphs. No sentence is filler; even the merge-slug detail prevents a likely agent error.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 key response fields (company_slug, former_slugs, total_events, first_seen, last_seen, truncated, next_offset) and their semantics. Combined with the auth/window disclosure, an agent has everything needed to call and interpret it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real semantics: `company` accepts a slug or name, name resolution is fuzzy and can return multiple candidates, and older slugs of merged companies resolve to the merged timeline. It also ties order/offset to pagination behavior rather than just restating defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and scope: a registry timeline for exactly one company, returned as JSON. This is clearly distinguishable from siblings like search_events (multi-company event search) and search_companies (company lookup) without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains how to page (order + offset), what happens when a name is ambiguous (candidate slugs returned), and that an API key is required for anything beyond the last 7 days. It stops short of naming search_companies as the disambiguation path or listing exclusion cases, so it is strong but not fully explicit about alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

daily_digestAInspect

Digest of one BORME publication day: totals by event type, top provinces, and insolvencies: every event of the day whose act types include INSOLVENCY_DECLARATION or INSOLVENCY_STATUS, with company and province only (SUSPENSION_OF_PAYMENTS, BANKRUPTCY_LEGACY and PROVISIONAL_SHEET_CLOSURE_INSOLVENCY are not listed).

An INSOLVENCY_STATUS (Situación concursal) notice can record any stage of the proceedings, from a request for a declaration to the conclusion. Call the entries insolvency-proceedings notices; before saying a company was declared insolvent, read its act's payload with search_events (date_from = date_to = that day, both act types, company_name_contains).

Without an API key this is the free plan: only publication days within the last 7 days. Send your key in the X-API-Key header (https://bormeapi.com/account) for your plan's window.

NameRequiredDescriptionDefault
dateNoPublication day, YYYY-MM-DD; omit for the latest day in the database.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does: it discloses the free-plan 7-day window, the X-API-Key header and where to obtain it, the caveat that INSOLVENCY_STATUS can record any proceeding stage, and exactly which act types are excluded from the list. These are non-obvious behavioral constraints an agent could not infer from 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what the digest returns before the caveats, and every sentence carries information. The parenthetical list of excluded act types and the multi-clause insolvency paragraph are dense but earn their place; slightly heavier than needed for a single-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although there is no output schema, the description specifies the shape of the response (totals by event type, top provinces, entries with company and province only). Combined with the auth and plan-window notes and the interpretation caveat, nothing an agent needs to call or read this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single `date` parameter is fully documented there, including the YYYY-MM-DD format and the omit-for-latest default. The description adds no further meaning 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and scope: a digest of one BORME publication day, with totals by event type, top provinces, and an `insolvencies` list. It enumerates exactly what the insolvency section contains and which act types it covers, so the agent can tell it apart from aggregate siblings like registry_stats or recent_signals.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear context for use (a single publication day, omit `date` for latest) and an explicit follow-up rule: read the act payload with search_events before asserting a company was declared insolvent, with the exact parameters to pass. No explicit when-not-to-use or named alternative for non-day-scoped needs, which keeps it below a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_act_typesAInspect

All normalized event types: the enum (act_type), the original Spanish label (spanish) and its English label (english).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral burden; it makes clear this is a passive listing of reference data and details the field shape, but it does not state that the data is static, whether the list is exhaustive, or anything about ordering or freshness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. Slightly telegraphic parenthetical labeling, but every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema lookup, the description covers what is returned and what each field means, which is the main thing missing from structured data. Minor gaps (whether the list is stable/complete) are acceptable at this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter meaning to add; the baseline for no params applies. The field descriptions given are return-value semantics rather than parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource ('All normalized event types') and spells out the three returned fields (act_type enum, Spanish label, English label), so an agent knows exactly what it gets. It does not explicitly contrast itself with search_events, but the lookup nature is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: an agent can infer it is a reference list for discovering valid act_type values or translations. There is no explicit 'call this before search_events' guidance or any mention of 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.

recent_signalsAInspect

Sample of the latest derived risk signals (last 7 publication days, max 10 rows). Types: INSOLVENCY_FILED, ACCORDION, MASS_EXIT, OWNERSHIP_CHANGE, DISTRESS_COMBO, PHOENIX, ADDRESS_CLUSTER, AEAT_DEBTOR, PUBLIC_CONTRACT_AWARD.

AEAT_DEBTOR comes from the AEAT's yearly debtors list (art. 95 bis LGT): details carry listed_on, list_year and is_current_list (true for 12 months from listed_on, a window this API sets). debt_eur is the published total of tax debts and penalties at 31 December of the year before publication. Say the company was on the list published on that date; never say the debt is still outstanding. Only companies in the Registro Mercantil matched by NIF are covered.

Needs the risk plan: send your API key in the X-API-Key header (https://bormeapi.com/account). The full history is in the hosted API's /v1/signals.

NameRequiredDescriptionDefault
signal_typeNoOne signal type to filter by (see the tool description); omit for all types.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does well: it discloses the 7-day/10-row cap, the X-API-Key auth requirement with a link, the coverage limitation (only Registro Mercantil companies matched by NIF) and interpretation constraints for AEAT_DEBTOR (is_current_list window, 'never say the debt is still outstanding'). It stops short of describing error behavior, rate limits or how other signal types' detail payloads look.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The binding constraints (7 days, 10 rows) are front-loaded and each subsequent block — type list, AEAT semantics, auth, history pointer — carries distinct information. The AEAT paragraph is dense and slightly over-weighted relative to other types, which get no equivalent explanation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description supplies the record limit, auth mechanism, coverage caveat and detailed semantics for one signal type's fields. It leaves the field structure of the other eight types and the overall response envelope undescribed, which an agent would need to handle results reliably.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% but the single parameter's schema text just says 'see the tool description' and provides no enum, so the description's enumeration of INSOLVENCY_FILED, ACCORDION, MASS_EXIT and the rest is the only source of valid values. It does not specify case sensitivity or whether an invalid value silently returns nothing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence names a specific resource ('derived risk signals'), its scope ('last 7 publication days, max 10 rows') and enumerates every signal type returned. An agent immediately knows what comes back. It does not, however, position itself against siblings such as daily_digest or search_events, which also surface event data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the tool is framed as a sample and the description points to the hosted /v1/signals endpoint for full history, which tells an agent this is a bounded preview. There is no explicit 'use this when… instead of daily_digest/search_events' routing, and no stated conditions under which the tool should be avoided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

registry_statsAInspect

Coverage and freshness report for the BORME dataset behind this server.

Returns a JSON object with: events_approx and companies_approx (planner estimates, not exact tallies), coverage {from, to} (first and latest publication day held, YYYY-MM-DD), parse_completeness_last_30d (share of gazette text successfully structured over the last 30 publication days, e.g. 0.9987) and source. Open to everyone; no key needed.

Use this to answer "how much data is there?", "how fresh is it?" and "can I trust date filters for period X?" before running searches. Takes no arguments; counts are estimates (fast reads), not exact tallies.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does well: it discloses that the tool is unauthenticated ('Open to everyone; no key needed'), that counts are planner estimates via fast reads rather than exact tallies, and that parse completeness is measured over the last 30 publication days. It omits any statement about rate limits or caching, which is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The return-shape listing is front-loaded and well formatted, and the usage paragraph reads cleanly. It loses a point for mild redundancy, restating that counts are estimates in both the return listing ('not exact tallies') and the closing sentence ('counts are estimates (fast reads), not exact tallies').

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description enumerates every returned field with meaning and format (events_approx, companies_approx, coverage {from, to} as YYYY-MM-DD, parse_completeness_last_30d as a share). For a zero-parameter metadata tool, nothing an agent needs in order to call or interpret it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, which sets the baseline at 4. The description reinforces this ('Takes no arguments'), removing any ambiguity, but adds nothing further because there is nothing further to add.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (the BORME dataset behind this server) and a specific deliverable (coverage and freshness report). It is clearly distinct from the sibling search/list tools, which operate on records rather than dataset-level metadata.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete invocation context: call this before running searches to answer 'how much data is there?', 'how fresh is it?' and 'can I trust date filters for period X?'. It does not name a sibling alternative for those questions (none of the listed tools appear to overlap), so there is nothing to exclude, but the routing is implicit rather than spelled out as a one-liner rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_companiesAInspect

Find Spanish companies by name and return ranked company cards (slug, status, province). Use it first when the user gives a company name, then company_history with the slug.

Matches current names, former names and name variants, ignoring accents, case, punctuation and the legal form. Each card's match is exact, prefix, contains or fuzzy (only when nothing else matched: a lead, not an identification; say so); matched_on says which name matched. Ranked by match, then active companies first, then the newest act.

Plans: the free plan's events cover 7 days, but this search is not limited by history. Without a key a search shows 5 cards and hidden_by_plan counts the rest (matches_beyond_limit, a lower bound when matches_is_at_least): relay its note. The NIF is on the card from the basic plan up: send your key in the X-API-Key header. An empty answer is not proof that a business does not exist; relay the response's note in the user's language.

NameRequiredDescriptionDefault
nameYesCompany name or part of it, at least 3 letters or digits; accents, case, punctuation and legal form are ignored.
limitNoCards per page, 1-50 (default 10).
offsetNoCards to skip. At most 200 cards are ranked; truncated true means more candidates existed, so add another word from the name.
statusNoOne of active, dissolved, extinct, sheet_closed; applied like province.
provinceNoThe company's province, accent-insensitive, e.g. MADRID, VIZCAYA, or an autonomous community for all of its provinces, e.g. Catalonia; several values can be separated by commas, e.g. BIZKAIA,GIPUZKOA. Applied to the candidates the search reads (2,000 with a filter), so a broad name can return fewer companies than match it.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden and does: it discloses normalization rules (accents, case, punctuation, legal form ignored), ranking order (match type, then active first, then newest act), and plan-gating behavior (5 cards unauthenticated, `hidden_by_plan`, `matches_is_at_least` as a lower bound). It also states the auth requirement (X-API-Key header) and that NIF appears only from the basic plan up, which is exactly the kind of beyond-schema behavior an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the next-call instruction are front-loaded, and each paragraph covers a distinct concern (matching, ranking, plans, caveats). It is longer than average and repeats the instruction to relay the response `note` twice ('relay its note' and 'relay the response's `note` in the user's language'), a small redundancy in otherwise dense prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description supplies everything the agent needs: the card fields, the meaning of `match` and `matched_on`, the plan-dependent fields (`hidden_by_plan`, `matches_beyond_limit`), and the failure-mode guidance. Nothing material about invoking or interpreting the call is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 earns above that by explaining how plan limits interact with `limit`/`offset` and how status/province filtering is applied to the 2,000-candidate window, which the schema only hints at. It does not restate the numeric bounds, correctly leaving those to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('Find Spanish companies by name') and immediately states the return shape ('ranked company cards (slug, status, province)'). It also distinguishes itself from the sibling company_history by prescribing the ordering of calls, so an agent can tell the two apart without inspecting either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use it first when the user gives a company name, then company_history with the slug', naming the alternative and the sequencing condition. It further bounds interpretation of results (fuzzy matches are 'a lead, not an identification; say so') and warns that an empty answer is not proof of non-existence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_eventsAInspect

Search Spanish commercial-registry (BORME) events, newest first, as JSON.

All filters are optional (see each parameter); coverage starts in 2009. Returns at most limit events.

Barcelona prints some acts as free text under "Otros conceptos": recognised wording gets its own act type (act_type_raw stays "Otros conceptos"; fields.shareholder names a sole shareholder when the text does), and a same-entry revocation and reappointment becomes RE_ELECTIONS. Reprocessed events keep their event_id, but their acts can change.

Without an API key this is the free plan: only the last 7 days, stated in plan_window. Send your key in the X-API-Key header (https://bormeapi.com/account) for your plan's window (full history on pro).

An empty page may carry hidden_by_plan: matches before the plan's window (matches_before_window, matches_is_at_least, newest_hidden_date) and a note to pass on. Do not infer from an empty page that no matching events exist.

NameRequiredDescriptionDefault
limitNoMaximum events returned, 1-200 (default 50).
date_toNoLatest publication date, YYYY-MM-DD, inclusive.
act_typesNoAct types, e.g. INCORPORATION, APPOINTMENTS, TERMINATIONS, CAPITAL_INCREASE, DISSOLUTION, INSOLVENCY_STATUS (full list: list_act_types).
date_fromNoEarliest publication date, YYYY-MM-DD (data starts in 2009).
provincesNoBORME province names, accent- and case-insensitive, e.g. MADRID, CADIZ, VIZCAYA. An autonomous community stands for all of its provinces, e.g. Basque Country, Cataluña, Andalucía.
company_name_containsNoPart of the company name, at least 3 letters or digits, case-insensitive; % and _ match literally.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses the free-plan 7-day window surfaced in plan_window, the X-API-Key header requirement, and that an empty page may carry hidden_by_plan/matches_before_window/newest_hidden_date. It also warns explicitly not to infer 'no matches' from an empty page, and notes event_id stability alongside the Barcelona 'Otros conceptos' and RE_ELECTIONS normalization quirks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and scope, and every paragraph carries actionable information. The Barcelona 'Otros conceptos' paragraph is dense and detailed relative to the rest, making the definition longer than typical, but it earns its place as interpretation guidance rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter read tool with no annotations, the description covers plan gating, empty-page semantics, and data-normalization quirks well. Since there is no output schema, the shape of a returned event is only hinted at through incidental mentions of plan_window and fields.shareholder, leaving return structure lightly under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each of the 6 parameters is already documented with format examples and ranges. The description adds only the general 'all filters are optional' and the 2009 coverage start; baseline 3 is appropriate 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+scope: 'Search Spanish commercial-registry (BORME) events, newest first, as JSON.' The ordering guarantee and output format are stated up front, and the resource (BORME events) is clearly distinct from siblings such as search_companies, company_history, and list_act_types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Says all filters are optional, notes coverage starts in 2009, and routes to list_act_types for the full act-type list and to the account page for the API key. It does not, however, say when to prefer this over siblings like company_history or recent_signals, so alternative selection is only partially addressed.

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.

  1. 2 tool updates
    • Changedsearch_companies1 field changed
      • changedInput schema / properties / province / description
        Previous value: -"The company's province, accent-insensitive, e.g. MADRID, VIZCAYA. Applied to the candidates the search reads (2,000 with a filter), so a broad name can return fewer companies than match it."New value: +"The company's province, accent-insensitive, e.g. MADRID, VIZCAYA, or an autonomous community for all of its provinces, e.g. Catalonia; several values can be separated by commas, e.g. BIZKAIA,GIPUZKOA. Applied to the candidates the search reads (2,000 with a filter), so a broad name can return fewer companies than match it."
    • Changedsearch_events1 field changed
      • changedInput schema / properties / provinces / description
        Previous value: -"BORME province names, accent- and case-insensitive, e.g. MADRID, CADIZ, VIZCAYA."New value: +"BORME province names, accent- and case-insensitive, e.g. MADRID, CADIZ, VIZCAYA. An autonomous community stands for all of its provinces, e.g. Basque Country, Cataluña, Andalucía."
  2. 10 tool updates
    • First observedbrand_owner
    • First observedcompany_brands
    • First observedcompany_by_nif
    • First observedcompany_history
    • First observeddaily_digest
    • First observedlist_act_types
    • First observedrecent_signals
    • First observedregistry_stats
    • First observedsearch_companies
    • First observedsearch_events

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    18 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources