> ## Documentation Index
> Fetch the complete documentation index at: https://docs.otbstudio.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP server for Belgian company data

> Connect Claude, Claude Code, Cursor or ChatGPT to the Belgian company register with the OTB Studio MCP server: eight tools for search, screening, profiles, ownership, annual accounts and directors.

The MCP server lets an agent answer questions about Belgian companies from the register, without an API client or tool layer of your own.

## Add it to your client

**Claude**

1. In Claude, open **Settings → Connectors → Add custom connector**.
2. Enter `https://mcp.otbstudio.ai/mcp`.
3. Sign in with your OTB Studio account. It needs an active plan.

No key to copy: the connector belongs to your organisation, and you revoke it in the dashboard like a key.

**Claude Code**

```bash theme={null}
claude mcp add --transport http otb-studio https://mcp.otbstudio.ai/mcp \
  --header "Authorization: Bearer $OTB_KEY"
```

**Cursor**

[Add to Cursor](cursor://anysphere.cursor-deeplink/mcp/install?name=otb-studio\&config=eyJ1cmwiOiJodHRwczovL21jcC5vdGJzdHVkaW8uYWkvbWNwIiwiaGVhZGVycyI6eyJBdXRob3JpemF0aW9uIjoiQmVhcmVyICR7ZW52Ok9UQl9LRVl9In19), with your key in the `OTB_KEY` environment variable. Or add the same server to `.cursor/mcp.json`:

```json theme={null}
{
  "mcpServers": {
    "otb-studio": {
      "url": "https://mcp.otbstudio.ai/mcp",
      "headers": { "Authorization": "Bearer ${env:OTB_KEY}" }
    }
  }
}
```

**VS Code**

Add to `.vscode/mcp.json`. VS Code asks for the key once and stores it as a secret:

```json theme={null}
{
  "inputs": [
    { "type": "promptString", "id": "otb-key", "description": "OTB Studio API key", "password": true }
  ],
  "servers": {
    "otb-studio": {
      "type": "http",
      "url": "https://mcp.otbstudio.ai/mcp",
      "headers": { "Authorization": "Bearer ${input:otb-key}" }
    }
  }
}
```

**Codex**

With your key in the `OTB_KEY` environment variable:

```bash theme={null}
codex mcp add otb-studio --url https://mcp.otbstudio.ai/mcp --bearer-token-env-var OTB_KEY
```

**Other agents**

Any client that speaks MCP over HTTP with a request header:

```json theme={null}
{
  "mcpServers": {
    "otb-studio": {
      "type": "http",
      "url": "https://mcp.otbstudio.ai/mcp",
      "headers": { "Authorization": "Bearer otb_live_…" }
    }
  }
}
```

Then try asking: *"Who are the directors of \[a company], and who owns it?"* or *"Show \[a company]'s equity and result for the last five years."*

## Tools

| Tool | Takes | Returns |
| - | - | - |
| `search_companies` | `query` (string, Dutch or French name), `limit` (1 to 25, default 10) | Ranked matches: enterprise number, the name that matched, employees (FTE), status code |
| `screen_companies` | `nace`, `activity`, `area`, `legal_form`, `situation`, `founded_after`, `founded_before`, `include_inactive`, `sort_by` (`name`, `oldest`, `newest` or a figure), `sort_order`, `min` and `max` (a figure name to a number), `include` (more figures to show), `limit` (1 to 50, default 20), `offset`, `also_requested`. At least one of `nace`, `area`, `legal_form` or `situation` | Companies by activity, area and figures: how many matched, per situation, and a page of them, with the figures it used. The same screen as `GET /v1/companies/screen`, under `screen` |
| `get_company` | `enterprise_number` (any usual form: `BE0712345630`, `0712.345.630`, `0712345630`) | One profile: names, address and its areas, activities, codes, headline figures, availability flags |
| `get_company_ownership` | `enterprise_number` | Who holds a stake in the company, and the stakes it holds in others |
| `get_company_financials` | `enterprise_number`, `years` (1 to 20, default 10), `detail` (cash flow, balance sheet, income statement and analysis lines) | The filed figures, one row per accounting period |
| `get_company_people` | `enterprise_number`, `limit` (1 to 200, default 50) | Directors and other mandates, current ones first |
| `search`, `fetch` | `query`; `id` | The same search and profile, in the shape ChatGPT and deep research require. Prefer the named tools where the client lets you choose |

The usual path is `search_companies`, then `get_company`, then the ownership, financials or people tool if the question needs them. Search ranks by how well the name matches *and* by how large the company is, so a well-known name returns the operating company first rather than a one-person shell with the same word in its name. A company carries legal, commercial, Dutch and French names; the one that matched is the one returned.

For a list, such as the restaurants in one municipality, the path starts with `screen_companies` instead: one call lists the companies by activity and area, and `get_company` opens the ones the question needs. "The 10 largest carwashes in Antwerp by employees" is one call too: `screen_companies` sorts on `employees` and shows it. See [Screen](https://docs.otbstudio.ai/rest.md#screen) for the filters.

The tool descriptions tell the model what it cannot infer from a schema: a name has to become a number first, the English on a KBO code is ours and not KBO's, and the figures come from one filing whose closing date is often not 31 December. See [Reading the data](https://docs.otbstudio.ai/reading-the-data.md).

## Connection

| | |
| - | - |
| Endpoint | `POST https://mcp.otbstudio.ai/mcp` |
| Transport | Streamable HTTP, stateless: no session, no `Mcp-Session-Id` |
| Auth | `Authorization: Bearer otb_live_…`, or OAuth sign-in from Claude |
| Service | The same service and data as the REST API |

## Tell your agent when to use it

A coding agent uses a server it knows about. Paste this into `AGENTS.md`, `CLAUDE.md` or `.cursor/rules`:

```markdown theme={null}
## Belgian company data

For any question about a Belgian company (KBO/BCE enterprise number, directors,
shareholders, filed annual accounts), use the `otb-studio` MCP server. Find the
enterprise number with `search_companies` first, then call `get_company`,
`get_company_people`, `get_company_ownership` or `get_company_financials`.
For a list of companies by activity or area, use `screen_companies`.
REST API and field reference: https://docs.otbstudio.ai/llms.txt
```

To let an agent search these docs as well, add `https://docs.otbstudio.ai/mcp`. That server searches the documentation only; the company data is at `https://mcp.otbstudio.ai/mcp`.

## Errors and limits

> [!NOTE]
>
> **A miss is a normal result with a sentence, not an error.** A name that matches nothing, or an enterprise number nobody holds, returns a tool result with a `note` that says what happened and what to try instead. A model can act on a sentence; it cannot act on a `404`. An empty credit balance is the same: a normal result whose `note` says to add credits.

Two failures arrive as HTTP statuses, before any tool runs, and your client handles them: `401` for a missing or refused key (with a `WWW-Authenticate` header), and `429 rate_limited` with `Retry-After` when the organisation is over its [rate limit](https://docs.otbstudio.ai/limits.md). Every MCP request counts towards that limit, `tools/list` included. A call that cannot be answered within 15 seconds comes back as a tool error that says to retry.

MCP replies do not report their credit cost. Usage is in the dashboard.

## Check it by hand

```bash theme={null}
curl -s -X POST https://mcp.otbstudio.ai/mcp \
  -H "Authorization: Bearer $OTB_KEY" \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

# The answer arrives as one text/event-stream message. Strip the
# "data: " prefix before parsing it.
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.