MCP Server
Use the TIC MCP (Model Context Protocol) server in AI applications - prompts, resources, and tools for Claude, OpenAI, and other LLMs.
We provide an MCP (Model Context Protocol) server with prompts, resources and tools that you can use for building AI-applications. The server uses streamable HTTP transport providing real-time communication with Server-Sent Events (SSE) streaming support.
Getting Started
Our MCP server is located at https://mcp.tic.io. It accepts your TIC API key via either of two headers:
x-api-key: <your_api_key>- same scheme as our REST APIAuthorization: Bearer <your_api_key>- for clients (such as the Anthropic Messages API connector) that only forward an OAuth-style bearer token
Either form authenticates the same way against the same key. Pick whichever your MCP client supports.
IP restrictions
Every request is checked against the calling IP address before the API key is looked up, as AbuseIPDB reports it. The MCP server accepts more countries than the LENS API, since AI platforms call from their own cloud regions, most of them in the US:
- Every country is accepted except China (CN), Taiwan (TW), Russia (RU), Brazil (BR), India (IN) and Iran (IR).
- An address with an abuse confidence score above 25 (of 100, from reports in the last 90 days) is refused, whatever its country.
A refused request gets 403 Forbidden with a plain-text body: Forbidden IP-address, contact support@tic.io. (abuse score) or Forbidden country, contact support@tic.io. (country). The answer for an address is cached for 7 days.
Example of using OpenAI Responses API
Full documentation for the OpenAI Responses API is available here.
Endpoint: https://api.openai.com/v1/responses
Note you need to include Bearer authentication for the OpenAI API. An example request body follows below.
{
"model": "gpt-5",
"input": [
{
"role": "developer",
"content": [
{
"type": "input_text",
"text": "Talk like a chief financial officer"
}
]
},
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "Get company information for Bahnhof AB (publ)."
}
]
}
],
"text": {
"format": {
"type": "text"
},
"verbosity": "medium"
},
"reasoning": {
"effort": "medium",
"summary": "auto"
},
"tools": [
{
"type": "mcp",
"allowed_tools": [
"get_company_by_registration_number",
"get_company_by_name",
"get_company_by_company_id",
"get_companies_by_sni_code",
"get_financial_reports",
"get_annual_reports",
"get_risk_and_intelligence",
"get_credit_score",
"get_company_risk_summary",
"get_company_debt_cases",
"get_company_penalties",
"get_company_lansstyrelsen_decisions",
"get_company_kammarkollegiet_sanctions",
"get_company_tax_deferrals",
"get_company_business_mortgages",
"get_company_payroll_history",
"get_company_share_structure",
"get_company_address_history",
"get_company_name_history",
"get_company_vehicles",
"get_company_bankruptcies"
],
"headers": {
"x-api-key": "your_api_key"
},
"require_approval": "never",
"server_label": "TIC",
"server_url": "https://mcp.tic.io"
}
],
"store": true,
"include": ["reasoning.encrypted_content"]
}Example of using Anthropic Messages API
Anthropic’s Messages API can call remote MCP servers directly through its MCP connector. Full documentation is available here.
Endpoint: https://api.anthropic.com/v1/messages
You need three headers on the request:
x-api-key: <your_anthropic_api_key>- your Anthropic API keyanthropic-version: 2023-06-01anthropic-beta: mcp-client-2025-11-20
The authorization_token field on the MCP server entry is forwarded by Anthropic to our server as Authorization: Bearer <token> - pass your TIC API key there. An example request body:
{
"model": "claude-opus-5-5",
"max_tokens": 1024,
"messages": [
{
"role": "user",
"content": "Get company information for Bahnhof AB (publ)."
}
],
"mcp_servers": [
{
"type": "url",
"url": "https://mcp.tic.io",
"name": "tic",
"authorization_token": "your_tic_api_key"
}
],
"tools": [
{
"type": "mcp_toolset",
"mcp_server_name": "tic"
}
]
}To restrict which TIC tools the model can see, use the mcp_toolset allowlist pattern - disable everything by default, then enable specific tools:
{
"tools": [
{
"type": "mcp_toolset",
"mcp_server_name": "tic",
"default_config": { "enabled": false },
"configs": {
"get_company_by_registration_number": { "enabled": true },
"get_company_risk_summary": { "enabled": true },
"get_company_debt_cases": { "enabled": true },
"get_company_penalties": { "enabled": true }
}
}
]
}Example of LibreChat configuration
If you wish to use our MCP in LibreChat you simply add a block inside mcpServers section in yaml configuration file:
mcpServers:
tic:
type: streamable-http
url: https://mcp.tic.io
headers:
x-api-key: 'your_api_key'Prompts
Prompts are user-invokable workflow templates that combine multiple tools into a single investigation flow with explicit framing and a named deliverable. Pick one from your MCP client’s prompt menu to kick off an end-to-end analysis.
Most prompts take registrationNumber (organisation number, e.g. 556519-9493) and resolve identity to the
internal companyId as their first step. build_prospect_list is the exception - it starts from a free-text brief rather
than a known company.
| Prompt | Parameters | What it does |
|---|---|---|
| investigate_company | registrationNumber |
Full company workup: identity, risk, debts, penalties, addresses, naming, share structure. Deliverable: red-flag report grouped by category. |
| liquidity_stress_check | registrationNumber |
Combines credit risk, Skatteverket tax deferrals, Kronofogden debts, and payroll trend. Deliverable: stress score (Low/Medium/High/Critical) with evidence. |
| due_diligence_check | registrationNumber |
Know-Your-Business check. Resolves identity then runs the full workup. Deliverable: KYB verdict (Proceed / Conditions / Decline). |
| shell_company_indicators | registrationNumber |
Screens for shell-company / fraud signals: name churn, address intelligence, missing payroll, share-capital anomalies. Deliverable: shell likelihood + indicators. |
| build_prospect_list | brief |
Turns a free-text ideal-customer brief into firmographic search filters, calibrates on the result count, and returns a qualified, contactable lead list. |
Resources
Resources are static reference data the model reads once into context - no tool call required. They decode the codes that appear in tool responses.
| URI | What it contains |
|---|---|
| ormeo://reference/codes | Decoder for LocalCompanyCode (legal-form codes: AB, HB, KB, BRF, EK, SF, FL, …) and Kronofogden KFM_DebtCaseType (A vs E debt cases). |
Tools
Functions the model invokes to retrieve company, property, or vehicle data. Tools are grouped below by purpose.
Company search & identity
| Tool | Description |
|---|---|
| get_company_by_name | Find a company by current or historical name |
| get_company_by_registration_number | Find a company by registration number |
| get_company_by_company_id | Get the core company record by internal companyId |
| get_companies_by_sni_code | List companies matching a 5-digit SNI industry code. Supports both SNI 2007 and SNI 2025 - pass sniStandard="2007" (default) or "2025". |
Company financials & risk
| Tool | Description |
|---|---|
| get_financial_reports | Income statement and balance sheet across all available periods (TKR, SEK) |
| get_annual_reports | List of available annual reports in PDF with metadata and download URLs |
| get_credit_score | Current credit score (0-100) with its creditScoreStatus (scored, or cannotBeDetermined when a ceased company, bankruptcy, liquidation, reconstruction, a new board or network risk stopped the scoring) and the descriptions used as the basis of the calculation |
| get_company_risk_summary | Numeric risk scores: credit score with its creditScoreStatus, forward risk forecast/class, board score, beneficial-owners score, financial-discrepancy score, other-intelligence score, intelligence aggregates, and ORB network-risk aggregate counts. Scores only - no per-person details. 4-hour cache. |
| get_risk_and_intelligence | Raw company-intelligence records (flags and signals collected over time) |
Company enforcement & compliance
| Tool | Description |
|---|---|
| get_company_debt_cases | Kronofogden enforcement: debtor summary, debt summary, current cases, weekly aggregates |
| get_company_penalties | Consolidated penalties (Skatteverket, Kammarkollegiet, Länsstyrelsen, Försäkringskassan, fees) |
| get_company_lansstyrelsen_decisions | Länsstyrelsen (County Administrative Board) decisions and penalty fees |
| get_company_kammarkollegiet_sanctions | Kammarkollegiet sanction cases grouped by diary number, with current balance and full case history |
| get_company_tax_deferrals | Skatteverket TF-ANST temporary tax-payment deferrals (liquidity-stress signal) |
| get_company_bankruptcies | Bankruptcies initiated on a given date |
Company structure & history
| Tool | Description |
|---|---|
| get_company_business_mortgages | Bolagsverket-registered business mortgages - collateral encumbrance |
| get_company_payroll_history | Skatteverket MOMS-AG (VAT/employer tax) filings and aggregated CompanyPayroll2 history |
| get_company_share_structure | Registered share capital over time and share-class structure (A/B/C, …) from Bolagsverket |
| get_company_address_history | All addresses (visiting, mailing, registered) enriched with active AddressIntelligence signals |
| get_company_name_history | Current and historical legal names plus trade names (bifirma) |
Vehicles
| Tool | Description |
|---|---|
| get_company_vehicles | Vehicles owned or operated by a company |
| get_vehicle_by_license_plate | Look up a vehicle by license plate |
| get_vehicle_by_vin | Look up a vehicle by VIN (vehicle identification number) |
Property
| Tool | Description |
|---|---|
| get_property_by_label | Find a property by its label (property designation / fastighetsbeteckning) |
| get_orthophoto_by_year | Get an orthophoto for a property; leave year empty for the most recent year |
| list_property_orthophotos | List every available orthophoto for a property, optionally filtered to one flight year |
| get_property_by_location | Find the property at a latitude/longitude position (WGS84) |
Prospecting & registers
| Tool | Description |
|---|---|
| search_companies_for_leads | Firmographic company search for building sales lead lists. See below for the filter set. |
| search_lei | Search the LEI register (Legal Entity Identifiers) by name, LEI code or national registration number |
search_companies_for_leads
The broadest tool on the server. It combines free-text matching against company name, business purpose (verksamhet) and SNI industry names with structured firmographic filters, and returns a paged lead list.
| Filter group | Parameters |
|---|---|
| Text & industry | purposeOrKeywords, sniCode - the SNI filter matches SNI 2025 or SNI 2007, so a company is found whether or not it has been reclassified yet |
| Geography | county, municipality - by official name (e.g. "Stockholm", "Skane") or SCB numeric code |
| Size | minNetSalesThousandSEK, maxNetSalesThousandSEK, minEmployees, maxEmployees - matched against SCB size-class bands, which cover far more companies than filed annual reports |
| Contactability | requireEmailAddress, requirePhoneNumber, requireWebsite |
| Registrations | onlyVATRegistered, onlyFTaxRegistered, onlyEmployers, legalForm |
| Risk | excludeCompaniesWithKfmRecord - drops any company with a Kronofogden debtor record |
| Incorporation | registeredAfter, registeredBefore |
| Paging & sort | pageNumber, pageSize (max 250), sortBy - one of registrationDateNewest, registrationDateOldest, debtBalance |
Size filters are bucketed: pass a number and it maps to the SCB band containing it. Sorting by turnover or employee count is not available, because the SCB size-class field is not sortable - filter on it instead.
search_lei
| Parameter | Description |
|---|---|
query |
Free text matched against legal name, LEI code and national registration number |
jurisdiction |
ISO 3166 country code, e.g. "SE", "FI", "DE". US entities are registered per state, e.g. "US-DE" |
registrationStatus |
ISSUED, LAPSED, PENDING_VALIDATION, PENDING_TRANSFER, PENDING_ARCHIVAL, TRANSFERRED, DUPLICATE, RETIRED, ANNULLED, CANCELLED, MERGED |
entityStatus |
ACTIVE or INACTIVE |
sortBy |
registrationDateNewest or registrationDateOldest |
pageNumber, pageSize |
Paging; pageSize maxes out at 250 |
We will continuously add new tools - check back here for new additions.