Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
BORME_API_KEYNoOptional BORME API key (https://bormeapi.com/account), sent in the X-API-Key header to the REST API. Listing tools needs no key; most tool calls do.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
search_eventsA

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). An empty page with hidden_by_plan means matches exist outside your plan's window: do not say none exist. A bad date, province or act type is refused with a message naming the fix.

company_historyA

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 instead of a slug is searched: several matches return {ambiguous: true, candidates}, none returns {error}.

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 just 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_by_nifA

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 the company_slug.

Returns JSON {found, company_slug, company_name, current_name, status, province, nif_source, nif_caveat, ...}; use current_name. BORME has no dedicated tax-ID field: there are more than 580,000 NIF mappings from public sources and the text of BORME notices, covering a minority of companies, so a miss (reason nif_unmapped) means "not matched yet", not "does not exist". invalid_input true: not a NIF/CIF. reason nif_check_character_failed: wrong check character; relay tell_the_user and the did_you_mean candidates. reason not_registry_entity: explain entity_type as the note does. ambiguous true: ask which candidate. nif_caveat present: say the link is not settled.

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).

brand_ownerA

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).

company_brandsA

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. 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).

recent_signalsA

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).

daily_digestA

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.

search_companiesA

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.

list_act_typesA

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.

registry_statsA

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}: approximate event and company counts (planner estimates, not exact tallies), 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.

Prompts

Interactive templates invoked by user choice

NameDescription
company_due_diligenceDue-diligence brief on one Spanish company from the notices published in BORME: identification, published history, officer appointments and their later changes, and insolvency and status notices, each act cited with its BORME id, within your plan's history window. Uses search_companies or company_by_nif, then company_history.
board_changesAppointments, re-elections, terminations and resignations, revocations and ex officio cancellations of appointments of the directors and other officers of one Spanish company, from the notices published in BORME, optionally since a date, each change cited with its BORME id. Uses search_companies, then company_history.
new_companies_digestCompanies whose incorporation notices were published in BORME on one day, for one Spanish province or autonomous community, with name, slug and BORME id, from search_events (act type INCORPORATION). Without a date, uses the latest publication day (daily_digest).
check_nifCheck a Spanish NIF/CIF tax ID against the BORME API's company-to-NIF links: the company linked to it in this data, any format or check-character problem the tool reports, and the linked company's latest published acts. Uses company_by_nif (Basic plan or higher), then company_history.

Resources

Contextual data attached and managed by the client

NameDescription
act-typesEvery normalized BORME act type: the enum used by the act_types filters (act_type), its Spanish label (spanish) and its English label (english). The same list as the list_act_types tool. Open to everyone.
provincesThe 52 province values BORME prints (Ceuta and Melilla among them), each with the spellings listed for it, plus Spain's autonomous communities and the autonomous cities, each with its accepted filter names and the province values included when filtering by that community or city. The same list as GET /v1/provinces. Needs BORME_API_KEY (a free key works); without one, reading it returns how to get a key.
coverageHow fresh the BORME data is: the latest publication day held and, when BORME_API_KEY is set and the daily statistics return events, the event-weighted parse completeness of up to the last 30 publication days. The same report as the registry_stats tool of this server.

TDQS

A4.6/5.0

Scored across 10 tools

Disambiguation5/5

Each tool has a clearly distinct role: company search vs. event search vs. single-company history vs. NIF lookup vs. brand lookups in both directions. Overlaps such as search_events vs. daily_digest are explicitly differentiated by the descriptions, and the inverse brand_owner/company_brands pair is unambiguous.

Naming Consistency4/5

All names use snake_case and are readable, but the set mixes verb-first names (search_events, list_act_types) with entity-first names (company_history, brand_owner, daily_digest). The variation is minor and appropriate for resource-oriented lookup tools, so it is not confusing.

Tool Count5/5

Ten tools is well within a healthy range for a registry-data server and each tool covers a distinct user need: search, entity lookup, timelines, brands, metadata, digests, and signals. No tool feels extraneous.

Completeness4/5

The surface covers the main BORME workflows: finding companies, retrieving histories, searching events, resolving brands, checking coverage, and sampling risk signals. Minor gaps exist, such as no direct single-event lookup or full signal feed, but they are workaroundable through the available search and history tools.

Maintenance

ActivityMaintained
ResponsivenessNo issues