Skip to main content
Glama
lexdoudkin

handelsregister-mcp

by lexdoudkin

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
HANDELSREGISTER_OCRNoOCR for scanned PDFs: auto (only when the text layer is empty), always, or off.auto
HANDELSREGISTER_OCR_LANGNoTesseract language(s), e.g. deu+eng.deu
HANDELSREGISTER_DOWNLOAD_DIRNoWhere downloaded documents are written.system temp dir
HANDELSREGISTER_MAX_PER_HOURNoHourly request cap. Do not exceed the portal limit.60

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_companyA

Search the German commercial register (Handelsregister) for companies.

Args: keywords: Company name or search terms. Wildcards * and ? are supported. match: How keywords are matched — "all" (contains every keyword, default), "min" (contains at least one), or "exact" (exact company name). similar: Enable the portal's phonetic ("ähnlich lautende") matching to tolerate typos and spelling variants. max_results: Cap on returned rows (the portal page holds up to ~100).

Returns a dict with the query echo, a result count, the remaining hourly request budget, and results: a list of companies with name, court, register_number, state, status, historical names, and available_documents (the document types that can be passed to fetch_document).

get_companyA

Look up a company by name and return the best match — or suggestions.

Tries an exact match first, then falls back to fuzzy + phonetic search. If the name is precise enough it returns the company; if it's ambiguous or only close, it returns found: false plus ranked suggestions so the caller can pick one.

fetch_documentA

Retrieve a register document/extract for a company and return its text.

Runs a search, picks result_index from the hits, then downloads the requested document type from that same portal session. Document types: AD - current extract CD - chronological extract HD - historical extract DK - filed documents register SI - structured XML data VÖ - announcements UT - holder data

Returns the local file path, content_type, size_bytes, and (for PDF/XML) extracted text. Document retrieval is the most fragile part of the portal flow; if it fails, the error explains what happened.

list_filed_documentsB

List the documents filed for a company in the DK document register.

Returns the filed documents grouped by category — e.g. "List of shareholders", "Articles of Association / Rules / Statute", "Annual accounts / balance sheet" — each with the available dated entries. Use the category + fetch_filed_document (or get_shareholders) to download a specific one.

get_shareholdersA

Retrieve a company's shareholders (Gesellschafterliste) as a structured table.

Resolves the company name (exact → fuzzy → phonetic; returns suggestions if ambiguous), locates the filed shareholder list (newest by default, or which="oldest"), downloads it, and extracts rows of {shareholder, type, city, register, date_of_birth, shares, nominal_total_eur, percent}.

Extraction is deterministic and layered: a coordinate-aware table parser (handles complex/bilingual cap tables), then a text heuristic. method reports which engine produced the result. On confidence: "low" the server does not guess — it returns raw_text and the PDF path so the calling agent can extract the table itself.

Shareholders are NOT in the register extract for a GmbH/UG — this filed list is the authoritative source.

fetch_filed_documentA

Download a filed document of a given category from the DK document register.

category is matched case-insensitively as a substring against the categories from list_filed_documents (e.g. "shareholders", "articles", "annual"). Returns the local path and extracted text; for shareholder lists it also parses the table.

rate_limit_statusA

Report the remaining handelsregister.de request budget for this hour.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a distinct purpose: search_company for searching, get_company for best-match lookup, fetch_document for general extracts, fetch_filed_document for specific filed documents, list_filed_documents for categories, get_shareholders for structured shareholder data, and rate_limit_status for budget info. No two tools do the same thing.

Naming Consistency4/5

Most tools follow a verb_noun pattern (fetch_, get_, list_, search_). The naming is all lowercase with underscores, but rate_limit_status is a noun_noun_noun exception. Overall consistent and readable.

Tool Count5/5

7 tools cover the German commercial register domain well: search, company details, multiple document retrieval types, filed document listing and download, and rate limit monitoring. The count feels well-scoped without unnecessary tools.

Completeness5/5

The tool set covers all major read operations: searching for companies, retrieving current/historical extracts, filed documents (including shareholder lists with structured output). No obvious gaps like missing document types or inability to fetch by register number.

Maintenance

ActivityInactive
ResponsivenessUnresponsive