@bolagsapi/mcp-server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@bolagsapi/mcp-serveranalyze financials for IKEA"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@bolagsapi/mcp-server
Official MCP (Model Context Protocol) server for BolagsAPI - Swedish company data for AI agents.
Enables Claude, ChatGPT, and other AI agents to access comprehensive Swedish company information including:
Company lookup and search
Financial analysis from annual reports
Financial health and stability analysis
Compliance screening (sanctions, PEP)
Industry statistics and benchmarks
Installation
npm install -g @bolagsapi/mcp-serverOr use npx:
npx @bolagsapi/mcp-serverRelated MCP server: nordic-registry-mcp-server
Requirements
Node.js 22.23.4+, 24.22.1+ or 26.12.1+
BolagsAPI key (get one at bolagsapi.se/dashboard)
Quick Start
Claude Desktop
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"bolagsapi": {
"command": "npx",
"args": ["-y", "@bolagsapi/mcp-server"],
"env": {
"BOLAGSAPI_KEY": "sk_live_your_api_key_here"
}
}
}
}Cursor IDE
Add to .cursor/mcp.json in your project:
{
"mcpServers": {
"bolagsapi": {
"command": "npx",
"args": ["-y", "@bolagsapi/mcp-server"],
"env": {
"BOLAGSAPI_KEY": "sk_live_your_api_key_here"
}
}
}
}VS Code with Continue
Add to your Continue configuration:
{
"experimental": {
"modelContextProtocolServers": [
{
"transport": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@bolagsapi/mcp-server"],
"env": {
"BOLAGSAPI_KEY": "sk_live_your_api_key_here"
}
}
}
]
}
}Available Tools
Company Intelligence
Tool | Description |
| Get comprehensive company info by organization number |
| Search companies by name with filters |
| Historical events and milestones |
| Find peer companies by industry |
Financial & Health
Tool | Description |
| Financial data + AI analysis from annual reports |
| Health score, stability grade, financial flags |
| List available annual reports |
Compliance & Reference
Tool | Description |
| Sanctions and PEP screening |
| Industry benchmarks by SNI code |
Environment Variables
Variable | Required | Default | Description |
| Yes | - | Your BolagsAPI key |
| No |
| API base URL |
HTTP Transport (Remote)
For remote deployments, use the HTTP transport:
# Start HTTP server
npm run start:http
# Or with Docker
docker build -t bolagsapi-mcp .
docker run -p 3001:3001 -e BOLAGSAPI_KEY=sk_live_xxx bolagsapi-mcpEnvironment variables for HTTP mode:
PORT: HTTP port (default: 3001)HOST: Bind address (default: 127.0.0.1)
HTTP Authentication
The HTTP transport requires Bearer token authentication:
curl -X POST http://localhost:3001/mcp \
-H "Authorization: Bearer sk_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'Example Usage
Once configured, you can ask Claude:
"Look up information about Spotify (org nr 556703-7485)"
"Search for AI companies in Stockholm"
"Analyze the financials for IKEA"
"Check if company 5566778899 has any sanctions hits"
"What's the financial health of org 556677-8899?"
Development
# Clone the repo
git clone https://github.com/HugoAndFriends/BolagsAPI-mcp-server.git
cd BolagsAPI-mcp-server
# Install dependencies
pnpm install
# Run in development mode
BOLAGSAPI_KEY=sk_live_xxx pnpm dev
# Build
pnpm buildSecurity
API keys are validated against the BolagsAPI backend
Rate limiting: 100 requests/minute per IP (HTTP mode)
DNS rebinding protection for localhost bindings
CORS enabled for browser clients
Support
Documentation: bolagsapi.se/docs
Issues: github.com/HugoAndFriends/BolagsAPI-mcp-server/issues
Email: dev@bolagsapi.se
License
MIT
Available Tools
9 toolsanalyze_company_financialsC
Get detailed financial data from annual reports with optional AI analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Response language: 'sv' for Swedish (default), 'en' for English | sv |
| orgnr | Yes | Swedish organization number (organisationsnummer). Examples: 5566778899, 556677-8899 | |
| include_analysis | No | Include AI-generated analysis |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It implies a read-style retrieval operation and mentions optional AI analysis, but it does not disclose permissions, rate limits, data freshness, processing time, or what the AI analysis includes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted wording. It is efficient, though it is arguably too terse for a tool with no annotations or output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description needed to explain more about the returned financial data and the AI analysis behavior. As written, an agent knows the broad purpose but lacks enough context to confidently choose this tool over siblings or predict what it will return.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents orgnr, lang, and include_analysis clearly. The description reinforces the optional AI analysis but adds no parameter syntax, constraints, or guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action and resource: retrieving detailed financial data from annual reports, optionally with AI analysis. It does not explicitly distinguish this tool from close siblings such as get_annual_reports or assess_financial_health, which leaves some ambiguity about when this is the right choice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives like get_annual_reports or assess_financial_health. It only implies that AI analysis is optional, without explaining when to enable it or what type of questions this tool is suited for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assess_financial_healthB
Get financial health assessment including health score, stability grade, and financial flags.
| Name | Required | Description | Default |
|---|---|---|---|
| orgnr | Yes | Swedish organization number (organisationsnummer). Examples: 5566778899, 556677-8899 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does name the returned components (score, grade, flags), which is useful beyond the schema, but it says nothing about whether the assessment is derived or stored, what happens for invalid or inaccessible organization numbers, or any permission/data-availability constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence naming the tool's purpose and its three outputs, with no filler. It is efficient, though it is on the thin side for a tool with overlapping siblings.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter lookup with no output schema, the description usefully lists the return components, which is the main thing missing elsewhere. However, with no annotations and a crowded sibling set, it leaves the agent without enough context to select it confidently over analyze_company_financials.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter ('orgnr') with 100% schema description coverage, including a pattern and Swedish organization number examples, so the schema does the heavy lifting. The description adds nothing about the identifier or its accepted formats, which is the expected baseline for a fully documented single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') with a concrete resource ('financial health assessment') and enumerates the returned artifacts: health score, stability grade, financial flags. It is clear what the tool produces, but it offers no differentiation from the overlapping sibling analyze_company_financials, so an agent cannot tell them apart by description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool, when not to, or which sibling to choose instead. With analyze_company_financials and get_annual_reports in the sibling list touching similar territory, the absence of routing guidance is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_annual_reportsB
List available annual reports for a company.
| Name | Required | Description | Default |
|---|---|---|---|
| orgnr | Yes | Swedish organization number (organisationsnummer). Examples: 5566778899, 556677-8899 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden and largely fails to. It does not say whether 'available' means a filtered or partial set, what form the reports take (links, PDFs, IDs), whether an empty result is possible for a valid org number, or whether access is restricted. The read-only nature is only implied by 'List'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero redundancy, appropriately sized for a one-parameter listing tool. It is efficient, though that efficiency is partly achieved by omitting information covered in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and the parameter is fully documented by the schema, but with no output schema and no annotations, the description is the only source for return-value expectations and it says nothing about what a 'report' entry contains or how many come back. Adequate to call the tool, incomplete for interpreting the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter exists and schema coverage is 100%, with the schema itself documenting the Swedish organisation number format and supplying examples. The description adds no meaning about the parameter beyond what the schema already states, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource combination ('List available annual reports') scoped to a single company, which is unambiguous and clearly not overlapping with siblings like get_company_timeline or analyze_company_financials. It stops short of explicitly naming what distinguishes it from those data-oriented siblings, so it lands just below the top tier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance and no named alternatives. Usage is only implied by the tool name and description: an agent infers it should call this when it needs report documents rather than timeline or financial analysis. For a simple single-purpose list tool that inference is reasonable, but nothing in the text supports it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_company_timelineC
Get historical events for a Swedish company.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Response language: 'sv' for Swedish (default), 'en' for English | sv |
| orgnr | Yes | Swedish organization number (organisationsnummer). Examples: 5566778899, 556677-8899 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: no mention of what counts as an 'event' (name changes, board changes, bankruptcies?), no ordering, no result volume, no pagination, no auth requirements. Only the read-only nature is inferable from the verb 'Get'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler or repetition. It is lean to a fault, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and no explanation of event types, result size, or temporal ordering, the definition leaves the agent unable to predict what it will get back. For a timeline tool the notion of 'event' is the core concept and is entirely undefined.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — orgnr format/examples and the lang enum are fully documented in the schema, so the baseline of 3 applies. The description adds nothing beyond 'Swedish company', which merely reinforces the schema's existing org-number semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a specific verb (Get) with a specific resource (historical events / timeline) and a scope (Swedish company). This distinguishes it implicitly from financial-data siblings like get_annual_reports or get_compliance_data, but it never names or contrasts with any sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool rather than lookup_company, get_annual_reports, or get_compliance_data, all of which plausibly overlap with 'historical events'. The agent must infer the boundary entirely from the sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_compliance_dataA
Screen a company against sanctions lists and PEP databases.
| Name | Required | Description | Default |
|---|---|---|---|
| orgnr | Yes | Swedish organization number (organisationsnummer). Examples: 5566778899, 556677-8899 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It usefully discloses the data sources checked (sanctions lists, PEP databases) and implies a read-only lookup, but says nothing about what a screening produces — match/no-match, risk flags, confidence — or about cost, rate limits, or coverage of lists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the verb and scoped with the specific data sources screened. Nothing extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool the input side is fully covered by the schema, and the description names the screening sources. However, with no output schema and no annotations, the agent has no idea what the response contains or how to interpret a screening result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter with 100% schema description coverage, including the Swedish organisation number format and examples, so the schema does the heavy lifting. The description only implies that the company is identified by that number and adds no syntax or constraint details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Screen a company against sanctions lists and PEP databases' — which is far more concrete than the vague tool name 'get_compliance_data'. No sibling tool performs compliance screening, so it is implicitly distinguishable, but the description never explicitly separates it from lookup_company.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance and no alternatives named. The highly specific purpose (sanctions/PEP screening) makes the intended use case inferable, but the agent must reason about it rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_industry_statsC
Get industry statistics and benchmarks by SNI code.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Response language: 'sv' for Swedish (default), 'en' for English | sv |
| sni_code | Yes | SNI industry code (2-5 digits) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read-only lookup but does not state whether the data is aggregated, how current it is, what permissions are required, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is efficient, though its brevity leaves several important behavioral questions unanswered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool, the schema is rich and fully documented. However, with no output schema and no annotations, the description does not explain what kind of statistics or benchmarks are returned, leaving a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema itself documents both the sni_code pattern and the lang enum. The description adds only the phrase 'by SNI code' and does not mention the lang parameter or add meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('industry statistics and benchmarks') scoped by SNI code. It is clearly distinguishable from company-oriented siblings such as lookup_company or search_companies, though it does not explicitly name or contrast those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus siblings, nor any prerequisites or exclusions. Usage is only implied by the phrase 'by SNI code' and the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_similar_companiesB
Find companies similar by industry and location.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| orgnr | Yes | Swedish organization number (organisationsnummer). Examples: 5566778899, 556677-8899 | |
| same_city | No | Prefer companies in the same city |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. 'Find' implies a non-mutating read, and the similarity dimensions are named, but nothing is said about how results are ranked, whether same_city is a hard filter or a soft preference in the ranking, or what an empty result means.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence with the purpose front-loaded and no filler. It is arguably too terse for the gaps it leaves, but nothing in the text is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and an undocumented 'limit' parameter, the definition is too thin. It should state that the input is one seed organization number and roughly what comes back (how many, ranked how), yet none of that is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% with orgnr and same_city documented, but the 'limit' parameter has no description anywhere and defaults to 20. The description also never mentions that the required orgnr is the seed company, which is the single most important thing to know about invoking this tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Find') and resource ('companies similar'), plus the similarity basis (industry and location). It is distinguishable from lookup_company and analyze_company_financials, but it never names a sibling or contrasts with search_companies, which is the closest alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the phrase 'similar by industry and location' hints at discovery/lookalike use, but there is no explicit when-to-use, when-not-to-use, or pointer to search_companies for broader queries. An agent must infer that this is the seeding tool for a known company rather than a general search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_companyC
Get comprehensive information about a Swedish company by organization number.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Response language: 'sv' for Swedish (default), 'en' for English | sv |
| orgnr | Yes | Swedish organization number (organisationsnummer). Examples: 5566778899, 556677-8899 | |
| include_fi | No | Include Finansinspektionen regulatory data | |
| include_financials | No | Include financial data from annual reports |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It conveys only that this is a read ('Get') and that a broad set of fields is returned ('comprehensive information'), without saying what is included, whether optional data such as financials is opt-in, or what happens on an unknown/invalid orgnr.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though the terse wording leaves little room for the routing and content hints an agent would benefit from.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter lookup with no annotations and no output schema, the description ought to sketch what 'comprehensive information' covers (registry data, address, board, status) so the agent knows what it gets back. The schema fully documents inputs, so the gap is moderate rather than severe.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter has a clear description with format examples and enum values, so the schema does the heavy lifting. The description adds nothing beyond 'by organization number', which the schema already states, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (get information about a Swedish company) and the identifier type (organization number), which distinguishes it from search_companies by name. It does not explicitly contrast itself with siblings like get_company_timeline or get_compliance_data, which also return company-level data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by organization number' implies the caller must already have an orgnr, but there is no explicit guidance on when to use this tool instead of search_companies or the other company siblings. No mention of when the optional include_financials/include_fi flags should be set versus calling the dedicated financial tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companiesC
Search for Swedish companies by name with optional filters.
| Name | Required | Description | Default |
|---|---|---|---|
| sni | No | Filter by SNI code (2-5 digits) | |
| city | No | Filter by city name | |
| limit | No | Maximum number of results (1-100, default 10) | |
| query | Yes | Search term (company name, minimum 3 characters) | |
| org_form | No | Filter by organization form (AB, HB, EK, etc.) | |
| active_only | No | Only show active companies (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose matching semantics (exact vs. substring vs. prefix on company name), result ordering, pagination behavior, or what fields each result returns — all material for a search tool with six parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It is efficient, though its brevity borders on under-specification for a six-parameter search tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and six parameters, the description should cover read-only safety, match behavior, and return shape. It covers none of these, leaving the agent to infer how results are produced and ordered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each of the six parameters documented in the schema (including SNI pattern, limit bounds, and active_only default). The description adds no meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (Swedish companies by name) plus the notion of optional filters. An agent can tell it is a list-style company search, though it never distinguishes itself from siblings like lookup_company or get_similar_companies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance, and none of the obvious alternatives (lookup_company for a known company, get_similar_companies, get_company_timeline) are mentioned. The only implicit signal is 'by name', which is weakly distinguishing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.1.2- First observed
analyze_company_financials - First observed
assess_financial_health - First observed
get_annual_reports - First observed
get_company_timeline - First observed
get_compliance_data - First observed
get_industry_stats - First observed
get_similar_companies - First observed
lookup_company - First observed
search_companies
TDQS
Scored across 9 tools
Most tools target clearly distinct resources or actions (lookup, search, timeline, similar, compliance, industry stats). The financial trio — analyze_company_financials, assess_financial_health, and get_annual_reports — overlaps somewhat, though the descriptions do differentiate raw financial data, a computed health score, and a listing of report documents.
All nine tools follow a consistent snake_case verb_noun pattern (get_, lookup_, search_, analyze_, assess_). Verbs are varied but drawn from a small, predictable, action-oriented set, and the noun portion always names the resource clearly.
Nine tools is well within the ideal 3-15 range for a company-data API. Each tool covers a distinct facet (identity, events, peers, financials, compliance, industry) and none feels redundant filler.
The surface covers the core read-only lifecycle well: discovery, detailed lookup, history, peers, financials/health, reports, compliance, and industry benchmarks. Minor gaps exist for related entities such as company officers/board members or person-level lookups, which an agent would have to work around.
Maintenance
Related MCP Connectors
Swedish company data (Bolagsverket, SCB) for AI agents, verified, with history and annual reports
Nordic company intelligence: look up companies, AI summaries, scores and signals via MCP.
Swedish B2B intelligence for AI agents: insolvency risk, procurement, BRF health and more.
Swedish company data: segment companies by industry, place and size, and look up any company.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables searching and retrieving detailed information about Swedish companies, including financial data and annual reports from Bolagsverket (Swedish Companies Registration Office), with intelligent caching for fast responses.-
- AlicenseNot gradedqualityBmaintenanceMCP server for Nordic company registries. Verify companies, check board members, signing authority, and financial data across Norway, Denmark, Finland, and Sweden using official public APIs. 23 tools covering search, details, roles, and batch lookups.1914Apache 2.0

@sedis/mcpofficial
AlicenseAqualityBmaintenanceAn MCP server that provides read-only access to Sedis Bolagsanalys and Fastighetsbenchmark data via natural language, enabling AI assistants to query Swedish listed-company financials and real-estate comparables.1494 npmMIT- AlicenseNot gradedqualityDmaintenanceMCP server to search Japanese companies by corporate number or name and retrieve financial, subsidy, and procurement information from gBizINFO public data. Enables AI agents to query Japanese company data through natural language.MIT