mcpbeat Sign in

BORME API MCP Server

answering

BORME API is answering right now. Last checked 10 min ago. It exposes 13 tools. Last commit 5 Nov 2026.

Spain's company registry gazette (BORME): more than 9.6 million events since 2009. API key or OAuth.

Uptime history 11 days of history
11 days agonow
100.0%
Uptime 24h
182 of 182 checks
13
Tools
read from the server
277 ms
Response time
average over 24h
0
Stars
last commit 5 Nov 2026

What changed 33

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 30 October 2026. No other catalogue keeps this.

4 Nov 3 tools appeared act_stats, company_signals, company_snapshot
4 Nov a tool changed the parameters it asks for search_companies
1 Nov 5 tools changed the parameters they ask for brand_owner, company_brands, company_history and 2 more
1 Nov 2 tool descriptions were rewritten3 times that day company_brands, company_by_nif
31 Oct 3 tool descriptions were rewritten company_history, registry_stats, search_events
30 Oct 10 tool descriptions were rewritten brand_owner, company_brands, company_by_nif and 7 more
30 Oct 8 tools changed the parameters they ask for brand_owner, company_brands, company_by_nif and 5 more
and 1 more, back to 30 October 2026

Nothing serious here today

Today is the operative word: we check BORME API every 15 minutes and re-read its code on every release. Watch it and you find out the day that stops being true.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 10 min ago.

run in your terminal
claude mcp add borme-mcp --transport http https://mcp.bormeapi.com/mcp
Settings → Connectors → Add custom connector, then paste this address
https://mcp.bormeapi.com/mcp
~/.codex/config.toml
[mcp_servers.borme-mcp]
url = "https://mcp.bormeapi.com/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "borme-mcp": {
      "url": "https://mcp.bormeapi.com/mcp"
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "borme-mcp": {
      "type": "http",
      "url": "https://mcp.bormeapi.com/mcp"
    }
  }
}

This endpoint answered with an authorization challenge. The server is running, and it signs you in through your browser: there is no API key to paste.

This server publishes 1 more address. The block above uses the one we reach during checks; the full list is under Endpoints below, and the author may intend a particular one for your client.

Available tools 13

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

company
company_brands
List the trademarks and trading names that the Spanish patent office (OEPM) records under a holder with this company's name. Use it for a known company (a slug from search_companies or company_history); to go from a brand to its company use brand_owner. Returns JSON {company_slug, commercial_names, trademarks (each {name, file, status, since}), counts, truncated, limit_per_kind, source, note}. The office publishes no tax IDs, so every link is a name match, not confirmed ownership. An empty result means none is linked in our data, not that the company holds none; {error, suggested_companies} means no company was found with that slug, so nothing was looked up. limit applies to each kind separately, newest first; counts is what this answer lists, not the company's total, and truncated true for a kind means more are linked: raise limit. Read-only; one request per call. Needs the basic plan or higher: send your API key in the X-API-Key header (https://bormeapi.com/account).
company_by_nif
Look up a Spanish company by its NIF/CIF tax ID. Use it when the user gives a tax ID (with a name use search_companies); on a hit, call company_history with company_slug. Returns JSON {found, company_slug, current_name, status, nif_source, nif_caveat, ...}; use current_name. BORME has no dedicated tax-ID field: more than 580,000 NIF mappings from public sources and the text of BORME notices cover a minority of companies, so a miss (reason nif_unmapped) means "not matched yet", not "does not exist". reason nif_revoked: AEAT records a revocation; relay tell_the_user. On a company match, relay nif_status.note if present. invalid_input true: not a NIF/CIF. reason nif_check_character_failed: relay tell_the_user and did_you_mean. reason not_registry_entity: explain entity_type. ambiguous true: ask which candidate. nif_caveat present: say the link is not settled. Read-only. Needs the basic plan or higher: send your API key in the X-API-Key header (https://bormeapi.com/account).
company_history
Get one company's BORME timeline: its published registry events within your plan's window. Use it once the company is known (a slug from search_companies or company_by_nif); across many companies use search_events. A name is searched too: several matches return {ambiguous: true, candidates}, none returns {error, suggested_companies}. Returns JSON {company_slug, total_events, first_seen, last_seen, truncated, next_offset, count, events} (as in search_events), with former_slugs for a merged company (an old slug returns the merged timeline) and plan_window on a limited plan. total_events, first_seen and last_seen cover the whole timeline in your window, not this page. To page, keep limit and order and pass next_offset as offset (at most 10000) until it is null. Read-only; one request per call. Without an API key (X-API-Key header) only the last 7 days; basic covers 365 days, pro and risk the full history back to 2009. If all its events are outside your window, the refusal counts them.
company_signals
Get one company's derived signals within your plan's window, newest first: the REST API's GET /v1/companies/{slug}/signals. Use it for one company's ownership changes, mass exits, insolvency declarations and the like; across all companies use recent_signals. A name is searched as in company_history: several matches return {ambiguous: true, candidates}, none returns {error, suggested_companies}. Returns JSON {company_slug, total, count, next_offset, signals: [{event_id, signal_type, date, company_slug, company_name, province, details}]}, with former_slugs for a merged company (every slug is read), and plan_window or hidden_by_plan when your plan's window applied: relay their notes. AEAT_DEBTOR: say the company was on the list published on that date, never that the debt is outstanding. count 0 is not proof of good health. Read-only; one request per call. Needs the pro plan or higher; key in the X-API-Key header (https://bormeapi.com/account).
company_snapshot
Get one company's current registry card: the same answer as the REST API's GET /v1/companies/{slug}. Use it for "who runs it, who owns it, what capital": officers (the current roles derived from the published acts), sole_shareholder as printed, capital_eur, address, status, NIF with its source, public_contracts and a size_hint estimate. For the dated acts use company_history. A name is searched as in company_history: several matches return {ambiguous: true, candidates, candidate_names with name, province and status}, none returns {error, suggested_companies}. Returns JSON with company_slug, company_name, current_name, status, officers, sole_shareholder, capital_eur, nif, nif_caveat, sources and the other snapshot fields, plus former_slugs for a merged company. BORME publishes no minority shareholdings, employees or revenue. Read-only; one request per call. Needs the basic plan or higher: send your API key in the X-API-Key header (https://bormeapi.com/account).
act
act_stats
Count BORME acts by act type, period (month, quarter or year) and province: how many companies and entries had mergers, spin-offs, capital increases or any other act type, newest period first. Use it for trends ("mergers per quarter in Spain since 2020"). To read the acts themselves use search_events. Returns JSON {grain, count, truncated, rows: [{period, act_type, province, companies, events}], data_through, built_from, built_to, note, plan_window}, plus hidden_by_plan when the plan left buckets out, and not_built (no rows, never zeros) when the range reaches years outside built_from..built_to. period is the bucket's first day by BORME publication date. companies counts distinct companies in that bucket: never add rows up. Province "*" is all of Spain; a community gives one row per province, not a total. Read-only; one request per call. Needs the pro plan or higher: send your key in the X-API-Key header (https://bormeapi.com/account).
list_act_types
List every normalized BORME act type: the enum used by the act_types filter of search_events (act_type), its Spanish label (spanish) and its English label (english). Use it to choose act_types values or to translate act types in an answer; it reads no registry data. Returns a JSON array of {act_type, spanish, english}, sorted by act_type. Read-only, open to everyone, no key needed and not counted against a quota. The same list is the resource borme://act-types.
brand
brand_owner
Find the Spanish company a trademark or trading name is linked to, in the Spanish patent office's (OEPM) trademark and commercial-name records we hold (the archive starts in 1987). Use it when the user names a brand; for a company's own name use search_companies, for a known company's brands use company_brands. Returns JSON {found, brand, matches: [{brand, kind, company_slug, company_name, company_status, file}], truncated, source, note}. kind commercial_name identifies a business; trademark distinguishes goods or services (NESCAFÉ is not another name for Nestlé): say which kind a hit is. Links come from holder-name matching (the office publishes no tax IDs); ambiguous holders stay unlinked: present a hit as a name match, not confirmed ownership. found false is not proof the brand is unused. On a hit, use company_history with the slug. Read-only; one request per call. Needs the basic plan or higher: send your API key in the X-API-Key header (https://bormeapi.com/account).
companies
search_companies
Find Spanish companies by name and return ranked company cards. Use it first when the user gives a company name, then company_history with its company_slug; with a tax ID use company_by_nif, with a brand use brand_owner. Matches current names, former names and variants, ignoring accents, case, punctuation and the legal form. Returns JSON {query, count, total, total_is_at_least, truncated, limit, offset, companies: [{company_slug, name, legal_form, province, municipality, status, in_insolvency, last_act_date, match, matched_on}]}. match is exact, prefix, contains or fuzzy (a lead, not an identification; say so). Ranked by match, then active companies, then newest act. Read-only; one request per call; not limited by the free plan's 7 days of history. The free plan shows at most the first 5 ranked cards; hidden_by_plan counts the rest: relay its note. The NIF is on the card from the basic plan up (X-API-Key header). An empty answer is not proof that a business does not exist.
daily
daily_digest
Summarise one BORME publication day: total events, counts by act type, the top 10 provinces and the day's insolvency-proceedings notices. Use it for "what was published today" or a day's figures; to read the notices use search_events with date_from = date_to = that day. Returns JSON {date, total_events, by_type, top_provinces, insolvencies: [{company, province}]}. insolvencies lists the events with INSOLVENCY_DECLARATION or INSOLVENCY_STATUS (not SUSPENSION_OF_PAYMENTS, BANKRUPTCY_LEGACY or PROVISIONAL_SHEET_CLOSURE_INSOLVENCY). An INSOLVENCY_STATUS notice can record any stage, from a request for a declaration to the conclusion: before saying a company was declared insolvent, read the act's payload with search_events. A day without a gazette (weekends, holidays) returns total_events 0. Read-only; one request per call. Without an API key only days within the last 7 days; send your key in the X-API-Key header (https://bormeapi.com/account) for your plan's window.
events
search_events
Search BORME registry events (since 2009) across companies by publication date, province, act type and company name, newest first. Use it for questions about many companies ("insolvency notices in Valencia in September"). For one known company use company_history; to find a company use search_companies; for one day's totals use daily_digest. Returns JSON {count, events: [{event_id, date, borme_id, province, company_name, company_slug, acts: [{act_type, act_type_raw, roles, payload}], registral}]}, plus company_name_match, plan_window and hidden_by_plan when they apply. No next page: when count equals limit, narrow the filters. Read-only; one request per call against your daily quota. Without an API key (X-API-Key header, https://bormeapi.com/account) only the last 7 days are searched (plan_window). For an empty page with hidden_by_plan or company_name_match (matched_companies or suggested_companies), relay its note. Invalid dates, provinces or act types are refused with a reason.
recent
recent_signals
Get a sample of the latest risk signals derived from BORME and public sources: at most 10 rows dated within the last 7 days. Use it for "what risk signals appeared this week"; not a per-company check (use company_history) and not the full feed (the hosted API's /v1/signals). Returns JSON {count, window, sample_cap, signals: [{signal_type, date, company_slug, company_name, province, details}], full_feed}. AEAT_DEBTOR comes from the AEAT's yearly debtors list (art. 95 bis LGT): details carry listed_on, list_year, is_current_list (true for 12 months from listed_on) and debt_eur, the published total at 31 December of the prior year. Say the company was on the list published on that date; never say the debt is still outstanding. count 0 means none in the window, not that a company is risk-free; an unknown signal_type is refused with the valid list. Read-only; one request per call. Needs the risk plan: send your API key in the X-API-Key header (https://bormeapi.com/account).
registry
registry_stats
Report the coverage and freshness of the BORME data behind this server. Use it to answer "how much data is there?", "how fresh is it?" and "can I trust date filters for period X?" before running searches; it says nothing about any one company. Returns JSON {events_approx, companies_approx, coverage: {from, to}, parse_completeness_last_30d, source}: exact event and company counts from the latest hourly snapshot (planner estimates if no snapshot exists), the first and latest publication day held (YYYY-MM-DD), and the event-weighted parse completeness over the 30 days up to the latest run (e.g. 0.9987). Takes no arguments. Read-only, open to everyone, no key needed and not counted against a quota. The same report is the resource borme://coverage.

Endpoints

URLTransportStateLatencyChecked
https://mcp.bormeapi.com/mcp streamable-http answering 281 ms 10 min ago
https://mcp.bormeapi.com/mcp/oauth streamable-http sign-in 246 ms 11 min ago

Alternatives to BORME API

same job, measured the same way
PDFHaul MCP
by pdfhaul-www

PDF tools: merge, split, compress, convert, OCR & more. OAuth with auto-registration or API key.

answering
LinkedIn Profile, Company & B2B Enrichment API MCP Server
by linkedindataapi

Real-time B2B professional profiles, company intelligence & jobs hosted MCP. OAuth or API key.

7 tools answering
Shaka
by shaka

Company email for Rwanda. Read and send mail from a Shaka mailbox over OAuth or an API key.

answering
Rasmio Company Registry
by sepehr071

Read-only Rasmio (rasmio.com): Iranian companies, board members, gazette ads, products, brands.

844 installs/wk local only
Makore — Events in Israel
by co-makore-www

Search upcoming public events in Israel by date, city, region or category. Read-only; no API key.

2 tools answering
Job Postings & ATS Career Feeds API MCP Server
by jobpostingsapi

Real-time ATS job postings, company career feeds & B2B hiring signals MCP. OAuth or API key.

8 tools answering
Omnicost
by omnicost

Construction unit prices with source and date for Spain, the US and the EU. OAuth or API key.

answering
MCP Krs
by matematicsolutions

MCP server for the Polish KRS company registry via the official Ministry of Justice API.

131 installs/wk local only

BORME API — questions

Answers built from our own checks of this server.

What can BORME API do?
It exposes 13 tools, read directly from the server on our last check. Among them: act_stats, brand_owner, company_brands, company_by_nif, company_history, company_signals and 7 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
What is BORME API mostly used for?
Its tools cluster around company and act. That is what this server is built to work with — the grouping comes from the actual tool names, not from a category we assigned.
Is BORME API working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 182 of 182 checks got a reply (100.0%), average response time 277 ms. The bar chart above shows every period we have measured.
How do I connect BORME API?
Copy the ready config from this page. We generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each in the form that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address. You sign in through your browser once and the client keeps the session: no key to copy, and it refuses anonymous clients.
How do you sign in to BORME API?
No API key is involved. BORME API answers our knock with an OAuth challenge, so you authorise it once in your browser and the client keeps the session. That is also why we see no tool list: it will not describe itself to an anonymous client, and that is the server working as intended, not a fault.
How fast is BORME API?
It answers our handshake in 277 ms on average, which is faster than 50% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.
Is BORME API open source?
The code is open source: it is published under the MIT licence, written in Python and 0 stars on GitHub. The licence covers the code in the repository, not the hosted service at mcp.bormeapi.com, which runs on its operator's own terms.