API docs

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
PropertyValue
TransportStreamable HTTP, stateless: one JSON response per POST, no SSE stream (GET /mcp → 405)
ProtocolMCP 2025-06-18, JSON-RPC 2.0; methods initialize, ping, tools/list, tools/call
AuthenticationOptional: Authorization: Bearer sk_live_... — the same key as the REST API
Result formatMarkdown 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

ToolAccessReturns
search_companiesno keyMatches by company name, BIN/IIN or officer name: title, identifier, jurisdiction, status.
get_companyno keyPublic company card: status, registration, management, counters (government contracts, court cases), financials.
get_company_paidkey + planFull card: shareholders, capital, financial history for all years, risks, contact counters. Spends plan quota.
get_gov_contractskey + planGovernment contracts: subject, customer, amount, dates. Needs an active subscription or a purchased company card.
get_court_caseskey + planCourt cases: number, type, court, parties, outcome. Full details with a purchased company card.
get_relationskey + planRelations graph: shareholders, officers and their other companies. Spends a card view (repeat within 2 weeks is free).
check_individualkey + PremiumIndividual check by IIN: companies where the person is an officer or shareholder, risks. Premium plan or higher.

Arguments

ToolArgumentTypeDescription
search_companiesquerystring, requiredCompany name, BIN/IIN or person's name
jurisdictionstringRestrict search to one jurisdiction (list below)
limitintegerNumber of results: default 10, max 20 without a key and 50 with a key
get_company, get_company_paid, get_relationsjurisdictionstring, requiredCompany jurisdiction
identifierstring, requiredBIN/IIN (national identifier) of the company
get_gov_contracts, get_court_casesjurisdiction, identifierstring, requiredSame as get_company
limitintegerNumber of records: default 20, max 50
check_individualidentifierstring, requiredIIN 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

TaskPromptTools
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

SituationServer response
Invalid or revoked keyHTTP 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 IPTool result with isError: true and an explanation
Paid tool called without a keyTool result with isError: true: the tool requires an API key
No active subscription, report quota or API-plan allowance exhausted, plan too lowTool result with isError: true and a readable explanation the assistant can relay
Company not foundTool result with isError: true; no quota spent
Malformed JSON or unknown methodJSON-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