MCP Server
Connect AI agents to Statsnet over the Model Context Protocol: client setup, tools and their arguments, limits and example prompts.
Statsnet runs a remote MCP server, so AI agents in Claude, Cursor, VS Code or any MCP-compatible client can search companies and pull their data right inside the conversation. Nothing to install locally:
POST https://statsnet.co/mcp
| Property | Value |
|---|---|
| Transport | Streamable HTTP, stateless: one JSON response per POST, no SSE stream (GET /mcp → 405) |
| Protocol | MCP 2025-06-18, JSON-RPC 2.0; methods initialize, ping, tools/list, tools/call |
| Authentication | Optional: Authorization: Bearer sk_live_... — the same key as the REST API |
| Result format | Markdown text (in Russian) — easy for the model to read, no parsing needed |
Access modes
Without a key (anonymous). Two tools are available — search_companies and get_company — with free public data. Anonymous search is limited to 30 calls per hour per IP and counts toward the same free monthly search quota as the website.
With an API key. Create a key in your account and pass it as Authorization: Bearer sk_live_... in the connection settings — never in the chat message itself. The key inherits its owner's subscription: search without the IP limit (up to 50 results per call) plus the paid tools. Billing matches the REST API: on API plans every tool call counts toward the monthly allowance; on report plans a full company card spends one report, and repeat views of the same company within 2 weeks are free.
An invalid or revoked key gets HTTP 401 — the server never silently downgrades such a request to anonymous mode.
Tools
| Tool | Access | Returns |
|---|---|---|
search_companies | no key | Matches by company name, BIN/IIN or officer name: title, identifier, jurisdiction, status. |
get_company | no key | Public company card: status, registration, management, counters (government contracts, court cases), financials. |
get_company_paid | key + plan | Full card: shareholders, capital, financial history for all years, risks, contact counters. Spends plan quota. |
get_gov_contracts | key + plan | Government contracts: subject, customer, amount, dates. Needs an active subscription or a purchased company card. |
get_court_cases | key + plan | Court cases: number, type, court, parties, outcome. Full details with a purchased company card. |
get_relations | key + plan | Relations graph: shareholders, officers and their other companies. Spends a card view (repeat within 2 weeks is free). |
check_individual | key + Premium | Individual check by IIN: companies where the person is an officer or shareholder, risks. Premium plan or higher. |
Arguments
| Tool | Argument | Type | Description |
|---|---|---|---|
search_companies | query | string, required | Company name, BIN/IIN or person's name |
jurisdiction | string | Restrict search to one jurisdiction (list below) | |
limit | integer | Number of results: default 10, max 20 without a key and 50 with a key | |
get_company, get_company_paid, get_relations | jurisdiction | string, required | Company jurisdiction |
identifier | string, required | BIN/IIN (national identifier) of the company | |
get_gov_contracts, get_court_cases | jurisdiction, identifier | string, required | Same as get_company |
limit | integer | Number of records: default 20, max 50 | |
check_individual | identifier | string, required | IIN of the individual (12 digits) |
Jurisdictions: kz (Kazakhstan), uz (Uzbekistan), kg (Kyrgyzstan), ge (Georgia), am (Armenia), tj (Tajikistan), az (Azerbaijan) and US states as us-<state code> — e.g. us-de, us-ca, us-ny. The authoritative list is the inputSchema your client receives from tools/list.
Typical flow: search_companies → take the identifier from the result → get_company or a paid tool with the same jurisdiction + identifier pair. If the company is not found, no quota is spent.
Setup
Claude Code
claude mcp add --transport http statsnet https://statsnet.co/mcp \
--header "Authorization: Bearer sk_live_YOUR_KEY"
Without --header the server connects in anonymous mode. To verify, run /mcp in Claude Code — it lists statsnet and its tools.
Cursor
~/.cursor/mcp.json (global) or .cursor/mcp.json in the project:
{
"mcpServers": {
"statsnet": {
"url": "https://statsnet.co/mcp",
"headers": { "Authorization": "Bearer sk_live_YOUR_KEY" }
}
}
}
VS Code (GitHub Copilot agent mode)
.vscode/mcp.json:
{
"servers": {
"statsnet": {
"type": "http",
"url": "https://statsnet.co/mcp",
"headers": { "Authorization": "Bearer sk_live_YOUR_KEY" }
}
}
}
Claude Desktop
Anonymous mode: Settings → Connectors → Add custom connector, URL https://statsnet.co/mcp.
With an API key: claude_desktop_config.json only runs local (stdio) servers, so connect the remote server with a header through the mcp-remote bridge (requires Node.js):
{
"mcpServers": {
"statsnet": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://statsnet.co/mcp",
"--header",
"Authorization:${STATSNET_AUTH}"
],
"env": { "STATSNET_AUTH": "Bearer sk_live_YOUR_KEY" }
}
}
}
Restart Claude Desktop after editing the config.
Other clients
Any client that supports Streamable HTTP connects to https://statsnet.co/mcp with an optional Authorization header. Keep configs that contain a real key in personal settings, not in a shared repository.
Example prompts
| Task | Prompt | Tools |
|---|---|---|
| Find a company | "Find Kazpost in Kazakhstan and show its BIN and status" | search_companies |
| Quick brief | "Prepare a brief on the company with BIN 000740000728: status, director, key financials" | get_company |
| Counterparty check | "Check the counterparty with BIN 000740000728: shareholders, capital, risks. List separately what data is missing" | get_company_paid |
| Public procurement | "Show the last 10 government contracts of this company, grouped by customer, with totals" | get_gov_contracts |
| Litigation | "Does this company have court cases? Highlight the ones where it is the defendant" | get_court_cases |
| Affiliations | "Which other companies do this company's officers and shareholders take part in?" | get_relations |
| Individual | "Check the individual by IIN (12 digits): where are they an officer or shareholder?" | check_individual |
One question can trigger several tool calls, and paid calls spend quota. If your client supports confirming tool calls, turn it on; when checking several companies, ask the assistant to outline its plan first.
Testing without a client (curl)
The server answers plain JSON-RPC requests — handy for debugging a key:
curl -s https://statsnet.co/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_companies","arguments":{"query":"Kazpost","jurisdiction":"kz","limit":5}}}'
The response is a JSON-RPC object with the Markdown in result.content[0].text. To see the tools available to your key: {"jsonrpc":"2.0","id":1,"method":"tools/list"}.
Errors and limits
| Situation | Server response |
|---|---|
| Invalid or revoked key | HTTP 401 with a WWW-Authenticate header and JSON-RPC error -32001 |
| Free monthly search quota exhausted (anonymous) | HTTP 429 |
| More than 30 anonymous searches per hour from one IP | Tool result with isError: true and an explanation |
| Paid tool called without a key | Tool result with isError: true: the tool requires an API key |
| No active subscription, report quota or API-plan allowance exhausted, plan too low | Tool result with isError: true and a readable explanation the assistant can relay |
| Company not found | Tool result with isError: true; no quota spent |
| Malformed JSON or unknown method | JSON-RPC errors -32700, -32601, -32602 |
Tool-level errors arrive as a normal result flagged isError, not as a protocol error, so the model can read the explanation and adjust. Check remaining quota in your account and plans on the pricing page.
Next steps
- MCP for business — use cases and a comparison with the REST API.
- Authentication — keys, permissions, plans.
- OpenAPI reference — the same data over the REST API.