Skip to main content
Glama
olgasafonova

nordic-registry-mcp-server

by olgasafonova

Nordic Registry MCP Server

CI lint License CodeScene Average Code Health

What is this?

Verify company legitimacy across Norway, Denmark, Finland, and Sweden in seconds. Check bankruptcy status, board members, signing authority, and financial data from official registries, without switching between four government websites.

23 tools wrapping the public APIs of Brønnøysundregistrene, CVR, PRH, and Bolagsverket. Works with Claude Desktop, Claude Code, Cursor, and any MCP client.

What it does:

  • Search companies by name across four Nordic countries

  • Get company details: status, employees, industry, addresses

  • Look up board members, CEOs, auditors, and roles

  • Check who can legally sign on behalf of a company

  • Access Swedish annual reports (årsredovisningar)

  • Batch lookups for validating lists of company IDs

What it doesn't do:

  • Modify registry data (read-only)

  • Store or cache personal data beyond the session

  • Require payment (all underlying APIs are free)


Related MCP server: Firmaradar

Supported Countries

Country

Registry

Tools

ID Format

Norway

Brønnøysundregistrene

12

9 digits (e.g., 923609016 or 923 609 016)

Denmark

CVR

5

8 digits (e.g., 10150817 or DK-10150817)

Finland

PRH

2

7+1 digits (e.g., 0112038-9)

Sweden

Bolagsverket

4

10 digits (e.g., 5560125790 or 556012-5790)

All APIs are free. Norway, Denmark, and Finland require no authentication. Sweden uses the värdefulla datamängder API which requires OAuth2 credentials (free registration).


What Can You Do?

Once connected, just ask your AI:

You say...

What happens

"Find Norwegian companies named Equinor"

Searches Brønnøysundregistrene

"Get details for org number 923609016"

Returns full company info

"Who is on the board of 923609016?"

Lists board members, CEO, roles

"Find Danish company Novo Nordisk"

Searches CVR registry

"Look up Finnish company Nokia"

Searches PRH registry

"Get company 0112038-9 from Finland"

Returns Nokia's full details

"Get Swedish company 5560125790"

Returns company info from Bolagsverket

"List annual reports for Swedish company X"

Lists available årsredovisningar


Use Cases

Case Processing: Verify Applicant Companies

When processing permit applications, license renewals, or grant requests, verify the applying company exists and is in good standing.

You: "A company applied for an environmental permit. Org number 923609016.
      Check if they're active and who can sign on their behalf."

AI: Let me verify the company and check signing authority.
→ norway_get_company("923609016")
→ norway_get_signature_rights("923609016")

Result: Equinor ASA - Active since 1972, registered for VAT, 21,200 employees.
Authorized signatories: [Name 1] (CEO), [Name 2] + [Name 3] (joint signature).
The application signature matches an authorized signatory.

Procurement: Validate Vendors Before Contract Award

Before awarding a municipal contract, verify that bidding companies are legitimate and not bankrupt.

You: "We received bids from three Danish companies for the IT contract.
      CVR numbers: 10150817, 25063783, 37553472. Are they all legitimate?"

AI: I'll verify each company's status.
→ denmark_get_company("10150817")
→ denmark_get_company("25063783")
→ denmark_get_company("37553472")

Result:
- 10150817: Novo Nordisk A/S - Active, 47,000+ employees ✓
- 25063783: Mærsk A/S - Active, established company ✓
- 37553472: [Company name] - BANKRUPT ✗

Recommendation: Exclude 37553472 from consideration.

Grant Administration: Verify Non-Profit Status

When processing grant applications from voluntary organizations, verify their registration in Frivillighetsregisteret.

You: "An organization applied for cultural funding.
      They claim to be a registered non-profit. Org number 971274808."

AI: Let me check their voluntary organization status.
→ norway_get_company("971274808")

Result: Norges Røde Kors - Registered in Frivillighetsregisteret since 2009.
Organization form: FLI (Forening/lag/innretning).
Activity: Humanitarian aid and emergency response.
Confirmed as eligible non-profit organization.

Regulatory Oversight: Monitor Industry Changes

Track new company registrations or status changes in regulated sectors.

You: "I need to monitor new companies in the financial sector.
      What relevant registrations happened this week?"

AI: Let me check recent registry updates.
→ norway_get_updates(since="2024-01-08T00:00:00Z", size=100)

Result: 12 new registrations in financial services sector:
- 3 new AS companies (aksjeselskap)
- 2 new NUF branches of foreign financial institutions
- 7 updates to existing financial companies
[List with org numbers for follow-up]

Cross-Border Coordination: Track Multinational Presence

When coordinating with other Nordic authorities, identify a company's presence across jurisdictions.

You: "We're investigating a company that may operate across Nordic countries.
      Check if Volvo has registered entities in Norway and Denmark."

AI: Let me search both registries.
→ norway_search_companies("Volvo")
→ denmark_search_companies("Volvo")

Result: Found registered entities:
- Norway: Volvo Norge AS (org 923609016) - 450 employees, automotive
- Denmark: Volvo Danmark A/S (CVR 12345678) - 320 employees
Both are subsidiaries of Swedish parent company.

Data Quality: Validate Registry Submissions

When receiving bulk data submissions referencing company identifiers, validate them against official registries.

You: "A ministry submitted a list of 50 org numbers for a new subsidy program.
      Validate which ones are current and active."

AI: I'll validate them against Brønnøysundregistrene.
→ norway_batch_get_companies([list of 50 org numbers])

Result:
- 47 companies: Active and valid ✓
- 2 companies: Marked as bankrupt - may need review
- 1 org number: Not found in registry - possibly incorrect

Flagged entries exported for manual review.

Statistics: Company Demographics by Municipality

Support policy analysis by examining business composition in specific areas.

You: "How many AS companies are registered in Oslo municipality?"

AI: Let me search with municipality filter.
→ norway_search_companies(query="*", org_form="AS", municipality="0301")

Result: Found 45,231 AS companies registered in Oslo (municipality 0301).
Paginated results available for detailed analysis.

Due Diligence: Verify Board Composition

Before approving state aid or contracts above threshold, verify company governance.

You: "Check the board composition of company 914778271.
      We need this for the state aid application review."

AI: Let me retrieve their roles.
→ norway_get_company("914778271")
→ norway_get_roles("914778271")

Result: [Company name] - AS registered 2015
Board members:
- [Name 1] - Styreleder (Chair)
- [Name 2] - Styremedlem
- [Name 3] - Styremedlem
- [Name 4] - Daglig leder (CEO)
Auditor: [Audit firm name]

Document Retrieval: Access Swedish Annual Reports

When reviewing Swedish companies for cross-border matters, check available financial documentation.

You: "A Swedish company applied for recognition in Norway.
      What financial reports are available for org 5560125790?"

AI: Let me check Bolagsverket for filed documents.
→ sweden_get_company("5560125790")
→ sweden_get_document_list("5560125790")

Result: [Company name] - Active Swedish AB
Available årsredovisningar: 8 annual reports (2016-2023)
Most recent: Financial year ending 2023-06-30, filed 2023-08-15.

Quick Start

Option 1: Download Binary

Go to Releases and download for your platform.

Option 2: Build from Source

git clone https://github.com/olgasafonova/nordic-registry-mcp-server.git
cd nordic-registry-mcp-server
go build .

Requires Go 1.24+


Setup

Cursor Marketplace

/add-plugin nordic-registry

Claude Code CLI

claude mcp add nordic-registry ./nordic-registry-mcp-server

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "nordic-registry": {
      "command": "/path/to/nordic-registry-mcp-server"
    }
  }
}

Restart Claude Desktop after changes.

Not working? Tell us what made it hard — even one sentence helps.


All Tools

Norway (Brønnøysundregistrene)

Tool

Description

norway_search_companies

Search companies by name

norway_get_company

Get company details by org number

norway_get_roles

Get board members, CEO, auditors

norway_get_signature_rights

Get signature rights and prokura

norway_batch_get_companies

Look up multiple companies at once

norway_get_subunits

List branch offices for a company

norway_get_subunit

Get specific branch office details

norway_search_subunits

Search branch offices by name

norway_get_updates

Get recent registry changes

norway_get_subunit_updates

Get recent branch office changes

norway_list_municipalities

List municipality codes

norway_list_org_forms

List organization form codes (AS, ENK, etc.)

Denmark (CVR)

Tool

Description

denmark_search_companies

Search companies by name (returns single best match)

denmark_get_company

Get company details by CVR number

denmark_get_production_units

List production units (P-numbers), paginated

denmark_search_by_phone

Find company by phone number

denmark_get_by_pnumber

Get company by P-number

Note: Danish search returns only one result. Large companies often have multiple entities. Try variations like "[Company] Denmark", "[Company] A/S", or pre-merger names if the first result seems wrong.

Finland (PRH)

Tool

Description

finland_search_companies

Search companies by name (paginated, use filters for broad queries)

finland_get_company

Get company details by business ID

Note: Common names like "Nokia" return 900+ results. Use exact legal name ("Nokia Oyj"), filter by company_form (OY/OYJ), or filter by location to narrow results.

Sweden (Bolagsverket)

Requires OAuth2 credentials. Set BOLAGSVERKET_CLIENT_ID and BOLAGSVERKET_CLIENT_SECRET environment variables.

Tool

Description

sweden_get_company

Get company details by organization number

sweden_get_document_list

List annual reports (årsredovisningar)

sweden_download_document

Download annual report by document ID

sweden_check_status

Check API availability and OAuth2 status

Note: Sweden has no name search in this API - you must have the org number.


Example Prompts

  • "Find Norwegian companies named Telenor"

  • "Search for AS companies in Oslo"

  • "Find Danish companies named Carlsberg"

  • "Look up Finnish company Kone"

  • "Find voluntary organizations named Røde Kors"

Company Details

  • "Get details for Norwegian org 923609016"

  • "Look up CVR 10150817"

  • "Get Finnish company 0112038-9"

Board & Roles (Norway only)

  • "Who is on the board of 923609016?"

  • "Find the CEO of Equinor"

  • "List all directors for org 914778271"

Signature Rights (Norway only)

  • "Who can sign for company 923609016?"

  • "Get signature rights for Equinor"

  • "Who has prokura for 914778271?"

Branch Offices

  • "What branches does 923609016 have?"

  • "Search for branch offices named Equinor"

  • "List production units for CVR 10150817"

Registry Updates (Norway only)

  • "What companies changed since yesterday?"

  • "Get recent registry updates"

  • "What branch offices changed recently?"

Batch Operations (Norway only)

  • "Look up these companies: 923609016, 914778271, 985399077"

  • "Validate these org numbers from my spreadsheet"

  • "Get details for multiple Norwegian companies at once"

Reference Data (Norway only)

  • "List all Norwegian municipalities"

  • "What is Oslo's municipality code?"

  • "What does AS mean?"

  • "List organization form codes"

Phone & P-Number Lookup (Denmark)

  • "Find company with phone 33121212"

  • "Look up production unit P-number 1234567890"

Sweden Lookups

  • "Get Swedish company 5560125790"

  • "Look up Volvo's organization number in Sweden"

  • "What annual reports are available for 5560125790?"

  • "List årsredovisningar for Swedish company X"

  • "Is the Swedish API working?"


Sweden Setup

Sweden's Bolagsverket API requires OAuth2 authentication (free).

  1. Register for the värdefulla datamängder API (submit customer registration form)

  2. Access the Developer Portal to get your OAuth2 credentials

  3. Set environment variables:

    export BOLAGSVERKET_CLIENT_ID="your-client-id"
    export BOLAGSVERKET_CLIENT_SECRET="your-client-secret"

The server will log whether Sweden credentials are configured on startup. If not configured, Sweden tools are simply not registered.


HTTP Mode

For remote access or integration with other tools:

# Start HTTP server
./nordic-registry-mcp-server -http :8080

# With authentication
./nordic-registry-mcp-server -http :8080 -token "your-secret-token"

# Full production setup
./nordic-registry-mcp-server -http :8080 \
  -token "your-secret-token" \
  -origins "https://app.example.com" \
  -rate-limit 60 \
  -trusted-proxies "10.0.0.0/8"

Security Features

  • Bearer Token Auth: Optional authentication via -token flag or MCP_AUTH_TOKEN env var. Binding to a non-loopback address without a token is refused at startup; loopback binds (127.0.0.1, localhost) still run token-free for local development.

  • CORS Protection: Restrict origins via -origins flag (comma-separated)

  • Rate Limiting: Per-IP rate limiting via -rate-limit (requests per minute)

  • Trusted Proxies: Honor X-Forwarded-For from trusted networks via -trusted-proxies

  • Request Size Limits: 2MB default, 10MB max request body

Endpoints

Every endpoint except the /health and /ready probes shares the same auth path: when a token is set, /, /metrics, /status, and /tools all require it. The probes stay unauthenticated so orchestrators can reach them.

Endpoint

Description

Auth

/

MCP protocol (Streamable HTTP)

Required when token set

/health

Liveness check

Public

/ready

Readiness check (verifies API connectivity)

Public

/tools

List all tools by country

Required when token set

/status

Circuit breaker stats

Required when token set

/metrics

Prometheus metrics

Required when token set


Architecture

nordic-registry-mcp-server/
├── main.go                 # Entry point, HTTP/stdio transport, security middleware
├── internal/
│   ├── base/              # Shared HTTP client with resilience
│   │   └── client.go      # Connection pooling, retries, rate limiting
│   ├── errors/            # Shared error types
│   │   └── errors.go      # NotFoundError, ValidationError
│   ├── infra/             # Resilience infrastructure
│   │   ├── cache.go       # LRU cache with TTL
│   │   └── resilience.go  # Circuit breaker, request deduplication
│   ├── norway/            # Norwegian registry (Brønnøysundregistrene)
│   ├── denmark/           # Danish registry (CVR)
│   ├── finland/           # Finnish registry (PRH)
│   └── sweden/            # Swedish registry (Bolagsverket, OAuth2)
├── tools/
│   ├── definitions.go     # Tool specifications (23 tools)
│   ├── handlers.go        # MCP tool registration
│   └── registry.go        # Tool metadata types
├── metrics/               # Prometheus metrics (namespace: nordic_registry_mcp)
└── tracing/               # OpenTelemetry tracing

Resilience Features

  • LRU Cache: TTL varies by endpoint type (searches: 2min, details: 5-15min, documents: 30min, reference data: 24h)

  • Circuit Breaker: Opens after 5 consecutive failures, 30s recovery timeout

  • Request Deduplication: Identical concurrent requests share a single API call

  • Rate Limiting: Semaphore-based concurrency control (15 concurrent requests)

  • Retry with Backoff: Exponential backoff with jitter on transient failures

  • Response Size Limits: 10MB for API responses, 100MB for document downloads

  • Token Efficiency: Paginated responses (default 20 results) to minimize LLM context usage


Documentation

Document

Description

Setup Guide

Installation, configuration, and troubleshooting

API Reference

Complete reference for all 23 tools with parameters, return values, and examples

Architecture

System design, request flow, resilience patterns

Production Readiness

Linux containers, Docker, Kubernetes, monitoring


Development

# Build
go build .

# Test
go test ./...

# Lint (requires golangci-lint)
golangci-lint run

Future Vision: Integration with Public 360°

This server is designed to work alongside public360-mcp-server, which provides AI access to Public 360° document and case management systems used by Nordic public sector organizations.

The integration scenario:

A caseworker receives a permit application from a company. Today's workflow:

  1. Open the case in Public 360°

  2. Manually look up the company in Brønnøysundregistrene

  3. Verify the company is active and not bankrupt

  4. Check if the signer has authority

  5. Copy relevant details back into the case

With both MCP servers connected:

You: "I received permit application case 2024/12345.
      The applicant is org 923609016. Verify the company
      and check if the signature is valid."

AI: [Calls public360: sif_get_cases to get case details]
    [Calls nordic-registry: norway_get_company to verify company]
    [Calls nordic-registry: norway_get_signature_rights to check authority]

Result: Case 2024/12345 - Environmental permit application
        Applicant: Equinor ASA (923609016) - ACTIVE
        Signed by: [Name] - Authorized signatory ✓

        Recommendation: Signature is valid. Company is in good standing.

Planned integration points:

Nordic Registry

Public 360°

Use Case

norway_get_company

sif_get_enterprises

Sync company data to contacts

norway_get_roles

sif_get_contacts

Import board members as contacts

*_search_companies

sif_create_case

Auto-populate case with verified company info

sweden_download_document

sif_upload_file

Attach annual reports to cases

This turns two separate data sources into a connected workflow where the AI can verify external data and update internal systems in one conversation.

Enhanced Registry Data (Future)

The current implementation uses free, open APIs. More comprehensive data is available through premium services:

Sweden (Bolagsverket)

Current (Free)

Premium Potential

Basic company info

Board members and roles

Annual reports (årsredovisningar)

Authorized signatories (firmatecknare)

Company status

Company mortgages (företagsinteckningar)

Real-time updates (not daily batch)

Historical board changes

The free värdefulla datamängder API we use today provides company basics and annual reports. Bolagsverket offers additional e-services for authorized signatories and company mortgages. Third-party aggregators like Roaring.io provide enriched datasets combining multiple sources.

Finland (PRH)

Current (Free)

Virre Service

Basic company details

Board members and managing directors

Digital financial statements (IXBRL)

Authorized signatories

Registration notifications

Procuration holders

Non-digital financial statements

Translated Trade Register extracts

Articles of association

The free PRH Open Data API provides basic company information updated daily. The Virre Information Service offers board member details, signatory information, and document purchases. Contract clients get reduced fees for high-volume access.

Why this matters:

Norway already provides board members, roles, and signature authority through the free Brønnøysundregistrene API. Adding premium Sweden and Finland data would give consistent coverage across all four countries for:

  • Verifying who can sign contracts

  • Checking board composition for due diligence

  • Accessing complete financial documentation


More MCP Servers

Check out my other MCP servers:

Server

Description

Stars

gleif-mcp-server

Access GLEIF LEI database. Look up company identities, verify legal entities.

GitHub stars

mediawiki-mcp-server

Connect AI to any MediaWiki wiki. Search, read, edit wiki content.

GitHub stars

miro-mcp-server

Control Miro whiteboards with AI. Boards, diagrams, mindmaps, and more.

GitHub stars

productplan-mcp-server

Talk to your ProductPlan roadmaps. Query OKRs, ideas, launches.

GitHub stars

tilbudstrolden-mcp

Nordic grocery deal hunting. Find offers, plan meals, track spending.

GitHub stars


License

Apache License 2.0

Credits

Available Tools

19 tools
denmark_get_by_pnumberB
Read-onlyIdempotent

Get parent company for a production unit P-number. Returns the owning company's details.

ParametersJSON Schema
NameRequiredDescriptionDefault
p_numberYesrequired

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundYes
companyNo
messageNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds that it returns 'the owning company's details,' which gives context about output content. However, it doesn't disclose additional behavioral traits like error conditions, rate limits, or authentication requirements beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two clear sentences: one stating the purpose and another about the return value. It's front-loaded with the core functionality and wastes no words. Every sentence earns its place by adding value beyond the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (single required parameter), rich annotations (readOnly, openWorld, idempotent), and existence of an output schema, the description is reasonably complete. It covers what the tool does and what it returns. The main gap is lack of sibling differentiation, but overall it provides enough context for basic understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the single parameter 'p_number' documented as 'required.' The description adds that it's for a 'production unit P-number,' providing semantic context about what the parameter represents. This aligns with the baseline score of 3 when schema coverage is high, as the description adds some meaning without duplicating schema information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get parent company for a production unit P-number. Returns the owning company's details.' It specifies the action (get), resource (parent company), and input (production unit P-number). However, it doesn't explicitly differentiate from sibling tools like 'denmark_get_company' or 'denmark_get_production_units', which might have overlapping functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With multiple Denmark-specific sibling tools (denmark_get_company, denmark_get_production_units, denmark_search_by_phone, denmark_search_companies), there's no indication of when this P-number lookup is preferred over general company searches or production unit queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

denmark_get_companyA
Read-onlyIdempotent

Get company by 8-digit CVR number. DK prefix auto-removed. Returns summary by default; full=true for complete data with production units and owners.

ParametersJSON Schema
NameRequiredDescriptionDefault
cvrYesrequired
fullNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
companyNo
summaryNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, open-world, and idempotent behavior, so the description adds valuable context beyond these: it specifies the CVR format handling ('DK prefix auto-removed') and the effect of the 'full' parameter on returned data ('complete data with production units and owners'). This enhances understanding of tool behavior without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and efficiently structured in two sentences: the first covers the action and primary parameter, the second explains the optional parameter's effect. Every sentence adds value without redundancy, making it highly concise and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (2 parameters), rich annotations (read-only, open-world, idempotent), and the presence of an output schema, the description is complete: it covers the key operational details (CVR handling, full parameter effect) without needing to explain return values or safety aspects already covered by structured data. It adequately supports agent decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 50% (only 'cvr' has a description, 'full' does not), the description compensates well: it explains the 'cvr' parameter's format ('8-digit CVR number, DK prefix auto-removed') and the 'full' parameter's impact ('full=true for complete data with production units and owners'), adding meaningful semantics beyond the minimal schema. This addresses the coverage gap effectively.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Get company'), resource ('by 8-digit CVR number'), and scope ('DK prefix auto-removed'), distinguishing it from sibling tools like denmark_search_companies which searches rather than retrieves by specific identifier. It explicitly mentions the return behavior ('Returns summary by default; full=true for complete data'), providing precise operational context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool ('Get company by 8-digit CVR number') and implies when not to use it (e.g., not for searching by phone or production units, which are covered by siblings like denmark_search_by_phone). However, it doesn't explicitly name alternatives or state exclusions, such as when to use denmark_get_by_pnumber instead for P-number lookups.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

denmark_get_production_unitsA
Read-onlyIdempotent

Get production units (P-numbers) for a Danish company by CVR. Paginated: 20 results per page by default (max 100). Use page parameter for more results.

ParametersJSON Schema
NameRequiredDescriptionDefault
cvrYesrequired
pageNo
sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageYes
sizeYes
has_moreYes
total_pagesYes
total_resultsYes
production_unitsYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, openWorldHint=true, and idempotentHint=true, indicating safe, non-destructive, and repeatable operations. The description adds valuable behavioral context beyond annotations: it discloses pagination details (20 results per page default, max 100, use page parameter for more), which is not covered by annotations. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by pagination details in a single, efficient sentence. Every part adds value without redundancy, making it appropriately sized and well-structured for quick understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (simple read operation with pagination), rich annotations (readOnlyHint, openWorldHint, idempotentHint), and the presence of an output schema (which handles return values), the description is complete enough. It covers key behavioral aspects like pagination, which complements the structured data effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 33% (only 'cvr' has a description), with 3 parameters total. The description adds meaning for 'page' and 'size' by explaining pagination behavior (e.g., 'Use page parameter for more results'), but does not fully detail 'size' constraints or 'cvr' format. It compensates partially for low schema coverage, aligning with the baseline expectation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'production units (P-numbers) for a Danish company by CVR', which is specific and distinguishes it from siblings like 'denmark_get_company' (which gets company info) or 'denmark_search_companies' (which searches). It explicitly mentions the target resource and identifier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: to retrieve production units for a Danish company using a CVR. It does not explicitly state when not to use it or name alternatives, but the context is sufficient for basic usage. Sibling tools like 'denmark_get_by_pnumber' suggest alternatives for different queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

denmark_search_by_phoneA
Read-onlyIdempotent

Find Danish company by phone number. +45 prefix auto-removed. Not all companies have registered phones.

ParametersJSON Schema
NameRequiredDescriptionDefault
phoneYesrequired

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundYes
companyNo
messageNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond what annotations provide. While annotations indicate read-only, open-world, and idempotent operations, the description adds that '+45 prefix auto-removed' (formatting behavior) and 'Not all companies have registered phones' (coverage limitation). This provides practical usage information that annotations don't cover.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise yet complete - just two sentences that each provide essential information. The first sentence states the core purpose, the second provides two critical behavioral notes. There's zero wasted language or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simple nature (single parameter, read-only operation), the presence of comprehensive annotations, and the existence of an output schema, the description provides exactly what's needed. It covers purpose, key behavioral notes, and limitations without unnecessary detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the schema already documents the single required 'phone' parameter. The description adds marginal value by mentioning the '+45 prefix auto-removed' behavior, but doesn't provide additional semantic context about the phone parameter beyond what's implied in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Find Danish company by phone number.' It specifies the resource (Danish company) and the search method (by phone number). It also distinguishes from siblings by focusing on phone-based lookup rather than name-based search or other country-specific tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: for finding Danish companies using phone numbers. It mentions '+45 prefix auto-removed' which helps users understand formatting requirements. However, it doesn't explicitly state when NOT to use it or name specific alternatives among the sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

denmark_search_companiesA
Read-onlyIdempotent

Search Danish companies by name. WARNING: Returns only ONE result (CVR API limitation). Large companies often have multiple legal entities. Try variations: "[Company] Denmark", "[Company] A/S", "[Company] DK", "[Company] Holding", or pre-merger names. If you have an 8-digit CVR number, use denmark_get_company instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesrequired

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundYes
companyNo
messageNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond annotations: it warns about the API limitation (returns only one result), explains that large companies may have multiple legal entities, and suggests query variations. While annotations cover read-only, open-world, and idempotent properties, the description provides practical usage insights that aren't captured in structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured with zero wasted words: it states the purpose upfront, provides critical warnings and limitations, offers practical usage tips, and directs to alternatives. Every sentence serves a clear purpose in helping the agent use the tool correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (search with API limitations), rich annotations, and the presence of an output schema, the description provides complete contextual information. It covers purpose, limitations, usage strategies, and alternative tools, making it fully adequate for agent decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the input schema already documents the single 'query' parameter as required. The description adds some semantic context by explaining what the query should contain (company name variations) and why, but doesn't provide additional parameter details beyond what's in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Search Danish companies by name') and resource ('Danish companies'), distinguishing it from sibling tools like 'denmark_get_company' (which uses CVR numbers) and other country-specific search tools. It provides precise differentiation beyond just the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool (search by name) versus alternatives ('If you have an 8-digit CVR number, use denmark_get_company instead'), and provides guidance on query variations to improve results. It clearly defines the tool's scope and limitations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

finland_get_companyA
Read-onlyIdempotent

Get company by Y-tunnus (e.g., 0112038-9). FI prefix auto-removed. Returns summary by default; full=true for complete data with previous names and registry entries.

ParametersJSON Schema
NameRequiredDescriptionDefault
business_idYesrequired
fullNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
companyNo
summaryNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond annotations: it explains the FI prefix auto-removal behavior and clarifies what data is returned in summary vs. full modes. While annotations already indicate readOnly, openWorld, and idempotent characteristics, the description provides specific implementation details that help the agent understand how the tool behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly concise and front-loaded: two sentences that efficiently cover identifier handling, default behavior, and parameter effect. Every word earns its place with zero redundancy or wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, good annotations, and existence of an output schema, the description provides sufficient context. It covers the key operational details (identifier format, data modes) while relying on structured fields for safety characteristics and return format documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 50% schema description coverage (only 'business_id' has a description), the description compensates well by explaining the 'full' parameter's effect on returned data. It clarifies that 'full=true' returns complete data with previous names and registry entries, adding meaningful semantics beyond the bare boolean schema definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get company by Y-tunnus' with specific details about identifier format and data returned. It distinguishes from sibling tools by specifying Finnish companies and Y-tunnus format, though it doesn't explicitly contrast with other Finnish tools like 'finland_search_companies'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by specifying 'Y-tunnus' format and the 'full' parameter option, but doesn't explicitly state when to use this versus alternatives like 'finland_search_companies' or other country-specific company lookup tools. It provides some guidance on parameter usage but not tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

finland_search_companiesA
Read-onlyIdempotent

Search Finnish companies by name. Returns max 20 results per page. Common names return 900+ results. To narrow: use company_form=OY/OYJ for main companies, add location for city, or search exact name "Nokia Oyj" instead of "Nokia". If you have a Y-tunnus, use finland_get_company instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesrequired
locationNo
company_formNo
pageNo
sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageYes
sizeYes
has_moreYes
companiesYes
total_resultsYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond annotations: it discloses the 20-result max per page limitation and the 900+ result potential for common names. Annotations already cover read-only, open-world, and idempotent characteristics, so the description appropriately supplements with practical constraints without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured with zero waste: first sentence states purpose, second gives key constraints, third offers narrowing strategies, fourth provides alternative tool guidance. Every sentence earns its place and information is front-loaded appropriately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, low schema coverage (20%), and the presence of an output schema (which handles return values), the description is complete enough. It covers purpose, constraints, usage strategies, and alternatives - providing all necessary context for an agent to use the tool effectively without needing to explain return format details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 20% schema description coverage (only 'query' has a description), the description compensates well by explaining the purpose of 'company_form' (OY/OYJ for main companies) and 'location' (city filtering), and implies 'query' usage strategies. It doesn't cover 'page' or 'size' parameters, but adds meaningful context for the most critical parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Search Finnish companies by name'), identifies the resource ('Finnish companies'), and distinguishes it from siblings by explicitly mentioning 'finland_get_company' as an alternative for Y-tunnus searches. It goes beyond just restating the name/title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool vs alternatives: 'If you have a Y-tunnus, use finland_get_company instead.' It also offers specific narrowing strategies (company_form, location, exact name) and warns about common names returning many results, giving clear context for effective use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

norway_batch_get_companiesA
Read-onlyIdempotent

Look up multiple companies at once (max 2000 org numbers). Returns company summaries and list of not_found entries. More efficient than individual lookups.

ParametersJSON Schema
NameRequiredDescriptionDefault
org_numbersYesrequired

Output Schema

ParametersJSON Schema
NameRequiredDescription
companiesYes
not_foundNo
total_resultsYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, openWorldHint=true, and idempotentHint=true. The description adds valuable behavioral context beyond annotations: the 2000-item limit, the return structure (summaries and not_found entries), and efficiency comparison. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste. First sentence states purpose and constraint, second provides efficiency rationale. Perfectly front-loaded and appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has rich annotations (readOnly, openWorld, idempotent), 100% schema coverage, and an output schema exists, the description provides excellent contextual completeness. It covers key behavioral aspects (batch limit, return structure, efficiency) without needing to explain basic safety or return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the single parameter 'org_numbers' well-documented in the schema. The description adds minimal parameter semantics beyond the schema, only implying these are Norwegian organization numbers through context. Baseline 3 is appropriate given high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Look up multiple companies at once'), resource ('companies'), and scope ('Norwegian' implied by tool name and sibling context). It distinguishes from sibling 'norway_get_company' by emphasizing batch capability and efficiency.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool ('More efficient than individual lookups') and mentions a practical constraint ('max 2000 org numbers'). However, it doesn't explicitly state when NOT to use it or name specific alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

norway_get_companyA
Read-onlyIdempotent

Get company details by 9-digit org number. Returns compact summary by default; set full=true for complete data including all addresses, industry codes, and capital info.

ParametersJSON Schema
NameRequiredDescriptionDefault
org_numberYesrequired
fullNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundYes
companyNo
messageNo
summaryNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, openWorldHint=true, and idempotentHint=true. The description adds valuable behavioral context about the two response modes (compact vs. full) and what 'full' includes (addresses, industry codes, capital info), which goes beyond the annotations. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with core purpose, followed by parameter guidance. Every word earns its place with zero waste. Efficiently structured for quick comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity, comprehensive annotations (readOnly, openWorld, idempotent), and the presence of an output schema (which handles return values), the description is complete enough. It covers purpose, parameter effects, and response modes without redundancy.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 50% schema description coverage (only 'org_number' has description), the description compensates by explaining the 'full' parameter's effect on response format. It adds meaning beyond the schema by clarifying what 'full=true' provides, though it doesn't detail the 'org_number' format beyond '9-digit'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Get company details'), target resource ('by 9-digit org number'), and distinguishes from siblings by focusing on Norwegian companies (unlike Denmark/Finland tools) and individual lookup (vs. batch/search tools). It provides a complete verb+resource+scope statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context about when to use the 'full' parameter for complete data, but doesn't explicitly state when to use this tool vs. alternatives like 'norway_batch_get_companies' or 'norway_search_companies'. It distinguishes from sibling tools by country focus but lacks explicit comparison.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

norway_get_rolesA
Read-onlyIdempotent

Get board members, CEO, auditors, and other roles for a Norwegian company. Returns person names, birth dates, resignation status. For signature authority only, use norway_get_signature_rights.

ParametersJSON Schema
NameRequiredDescriptionDefault
org_numberYesrequired

Output Schema

ParametersJSON Schema
NameRequiredDescription
role_groupsYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond annotations by specifying what data is returned ('person names, birth dates, resignation status'). While annotations already provide readOnlyHint, openWorldHint, and idempotentHint, the description enhances understanding of the tool's output behavior without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with just two sentences that are front-loaded with essential information. Every word serves a clear purpose, providing maximum utility with zero wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of comprehensive annotations (readOnlyHint, openWorldHint, idempotentHint) and an output schema, the description provides complete context for this read-only lookup tool. It clearly states purpose, usage guidelines, and return data, making it fully adequate for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema description coverage, the input schema fully documents the single required parameter 'org_number'. The description does not add any parameter-specific information beyond what the schema provides, so it meets the baseline expectation without additional value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Get board members, CEO, auditors, and other roles') and resource ('for a Norwegian company'), with explicit differentiation from sibling tool 'norway_get_signature_rights' for signature authority. This provides a precise verb+resource combination that distinguishes it from alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool ('for board members, CEO, auditors, and other roles') and when to use an alternative ('For signature authority only, use norway_get_signature_rights'). This provides clear guidance on tool selection versus the named sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

norway_get_signature_rightsA
Read-onlyIdempotent

Get who can sign for a company (signaturrett) and prokura holders. For full board/role list, use norway_get_roles instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
org_numberYesrequired

Output Schema

ParametersJSON Schema
NameRequiredDescription
prokuraYes
summaryYes
company_nameNo
signature_rightsYes
organization_numberYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already indicate this is a read-only, open-world, idempotent operation. The description adds useful context by specifying the scope of data retrieved (signature rights and prokura holders) and its limitations compared to other tools, which enhances behavioral understanding without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and front-loaded, consisting of only two sentences that efficiently convey the tool's purpose and usage guidelines without any wasted words. Every sentence adds clear value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one parameter), high schema coverage, rich annotations, and the presence of an output schema, the description is complete. It adequately explains what the tool does and when to use it, with no need to detail return values or parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the single parameter 'org_number' documented as 'required'. The description does not add any parameter-specific details beyond what the schema provides, so it meets the baseline of 3 for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('Get who can sign') and resources ('signaturrett and prokura holders'), and explicitly distinguishes it from its sibling tool ('norway_get_roles') by specifying what it does not cover ('full board/role list'). This provides precise differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides usage guidance by stating when to use this tool (for signature rights and prokura holders) and when to use an alternative ('norway_get_roles' for full board/role list). This gives clear context and exclusions, helping the agent choose correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

norway_get_subunitA
Read-onlyIdempotent

Get details for a specific sub-unit (branch office) by its org number. For listing all branches of a parent, use norway_get_subunits.

ParametersJSON Schema
NameRequiredDescriptionDefault
org_numberYesrequired

Output Schema

ParametersJSON Schema
NameRequiredDescription
sub_unitYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds context about the tool's scope (specific vs. all branches), which is useful behavioral information beyond annotations, though it doesn't detail rate limits or auth needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with zero waste: the first states the purpose, the second provides usage guidance. It is front-loaded and appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (1 parameter), high schema coverage (100%), rich annotations (readOnly, openWorld, idempotent), and presence of an output schema, the description is complete enough. It covers purpose and usage without needing to explain parameters or return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the single parameter 'org_number' documented as 'required'. The description adds no additional parameter details beyond what the schema provides, so it meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Get details') and resource ('specific sub-unit (branch office) by its org number'), distinguishing it from the sibling tool 'norway_get_subunits' which is for listing all branches. This provides precise differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool ('for a specific sub-unit') and when to use an alternative ('For listing all branches of a parent, use norway_get_subunits'), providing clear guidance on tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

norway_get_subunitsA
Read-onlyIdempotent

List all branches of a parent company by its org number. USE WHEN: "what branches does X have?", "list sub-units". For one specific branch by its own org number, use norway_get_subunit. To search branches by name, use norway_search_subunits.

ParametersJSON Schema
NameRequiredDescriptionDefault
parent_org_numberYesrequired

Output Schema

ParametersJSON Schema
NameRequiredDescription
sub_unitsYes
total_resultsYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds useful context about scope ('all branches') and clarifies it's for parent companies, which complements the annotations without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by usage guidelines and alternatives in three concise sentences, with zero wasted words or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (1 parameter, 100% schema coverage), rich annotations (readOnly, openWorld, idempotent), and the presence of an output schema, the description is complete—it covers purpose, usage, and sibling differentiation without needing to explain parameters or return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the parameter 'parent_org_number' documented as required. The description adds no additional parameter details beyond what the schema provides, so it meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('List all branches') and resource ('of a parent company by its org number'), distinguishing it from sibling tools like norway_get_subunit (for specific branches) and norway_search_subunits (for name-based searches).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides when to use this tool ('what branches does X have?', 'list sub-units') and when not to use it, with clear alternatives named (norway_get_subunit for specific branches, norway_search_subunits for name searches).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

norway_get_subunit_updatesA
Read-onlyIdempotent

Get sub-unit (branch) registry changes since a timestamp. Not cached. For main company updates, use norway_get_updates.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceYesrequired
sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
updatesYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond what annotations provide: it discloses that results are 'Not cached' (indicating fresh data) and specifies the temporal nature of the query ('since a timestamp'). While annotations already indicate read-only, open-world, and idempotent characteristics, the description provides additional operational context without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with just two sentences that each serve distinct purposes: the first defines the tool's function and key characteristics, the second provides sibling differentiation. There is zero wasted language, and the most critical information appears first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's read-only nature (confirmed by annotations), the presence of an output schema, and the clear sibling differentiation, the description provides complete contextual information. It covers purpose, usage guidelines, and key behavioral traits while avoiding redundancy with structured fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 50% schema description coverage (only 'since' has a description), the description doesn't provide additional parameter details beyond what's implied by 'since a timestamp' for the 'since' parameter. It doesn't explain the 'size' parameter at all. The description adds minimal value over the schema, meeting the baseline expectation when schema coverage is incomplete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Get sub-unit (branch) registry changes'), resource ('sub-unit (branch) registry'), and temporal scope ('since a timestamp'). It explicitly distinguishes this tool from its sibling 'norway_get_updates' by specifying it's for sub-units rather than main companies, providing clear differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool ('For main company updates, use norway_get_updates instead'), creating a clear alternative scenario. It also specifies the temporal context ('since a timestamp') and notes the data freshness ('Not cached'), giving comprehensive usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

norway_get_updatesA
Read-onlyIdempotent

Monitor main company registry changes since a timestamp (ISO 8601). USE WHEN: "what companies changed recently?", "registry updates". Not cached. For branch office changes only, use norway_get_subunit_updates.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceYesrequired
sizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
updatesYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond annotations by stating 'Not cached' (performance characteristic) and specifying the timestamp format requirement ('ISO 8601'). While annotations cover read-only, open-world, and idempotent properties, the description provides additional operational details that enhance understanding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely efficient with three focused sentences: purpose statement, usage guidelines, and sibling differentiation. Every sentence adds essential information with zero wasted words, and key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, comprehensive annotations (readOnlyHint, openWorldHint, idempotentHint), and the presence of an output schema, the description provides complete contextual information. It covers purpose, usage scenarios, exclusions, and behavioral characteristics adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 50% schema description coverage (only 'since' parameter has a description), the description doesn't explicitly explain parameter semantics. However, it implies the 'since' parameter's purpose through context ('since a timestamp'), providing marginal value beyond the schema's minimal documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('monitor main company registry changes') and resource ('main company registry'), and explicitly distinguishes it from its sibling tool 'norway_get_subunit_updates' for branch office changes. This provides precise differentiation from alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes explicit 'USE WHEN' examples ('what companies changed recently?', 'registry updates') and provides clear exclusion guidance ('For branch office changes only, use norway_get_subunit_updates'). This gives comprehensive when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

norway_list_municipalitiesA
Read-onlyIdempotent

Get Norwegian municipality codes for filtering searches. Cached 24h. Example: Oslo = 0301.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
municipalitiesYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true, openWorldHint=true, and idempotentHint=true, indicating safe, cacheable operations. The description adds valuable context beyond this: it discloses caching behavior ('Cached 24h'), which isn't covered by annotations. This enhances transparency about performance and data freshness, though it could mention more about rate limits or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise and front-loaded: it states the core purpose in the first clause, adds behavioral context (caching), and provides a practical example. Every sentence earns its place without redundancy, making it efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, annotations covering safety, and an output schema likely detailing the codes), the description is complete. It explains what the tool does, its caching behavior, and includes an example, which is sufficient for an agent to understand and invoke it correctly without needing to delve into output details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, focusing instead on the tool's output and usage. It adds semantic value by explaining what the tool returns (municipality codes) and providing an example, which compensates for the lack of parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get Norwegian municipality codes for filtering searches.' It specifies the resource (Norwegian municipality codes) and the intended use (filtering searches). However, it doesn't explicitly differentiate from sibling tools like 'norway_list_org_forms' or 'norway_search_companies', which might also involve Norwegian data filtering.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by mentioning 'for filtering searches' and provides an example ('Oslo = 0301'), suggesting it's used to map municipality names to codes. However, it lacks explicit guidance on when to use this tool versus alternatives like 'norway_search_companies' or 'norway_get_company', which might involve similar filtering but for different data types.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

norway_list_org_formsA
Read-onlyIdempotent

Get organization form codes (AS=limited, ENK=sole prop, NUF=foreign branch, etc.) with descriptions. Cached 24h.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
org_formsYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, open-world, and idempotent behavior, covering safety and reliability. The description adds valuable context beyond annotations by specifying the 24-hour cache duration, which is a key behavioral trait not captured in structured fields. No contradictions with annotations exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose and includes essential details (examples, cache) without redundancy. Every word contributes to understanding, and there is no wasted text or structural issues.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, annotations covering key behaviors, and an output schema present), the description is complete. It explains what the tool does, provides examples, and adds cache information, which is sufficient for an agent to understand and invoke it correctly without needing to detail return values (handled by output schema).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately avoids discussing parameters, focusing instead on the tool's function and cache behavior. It adds semantic value by explaining what data is returned (codes with descriptions), compensating for the lack of parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Get'), resource ('organization form codes'), and scope ('Norwegian' implied by tool name and context), distinguishing it from sibling tools that focus on companies, subunits, or other entities. It provides concrete examples (AS, ENK, NUF) and mentions descriptions, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly suggests usage for retrieving cached organization form codes, but does not explicitly state when to use this tool versus alternatives (e.g., vs. other country-specific tools or general company lookups). It mentions the 24-hour cache, which provides some context, but lacks explicit guidance on scenarios or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

norway_search_companiesA
Read-onlyIdempotent

Search Norwegian companies by name. If you have a 9-digit org number, use norway_get_company instead. Filters: org_form (AS/ENK/NUF), municipality, registered_in_vat, bankrupt, registered_in_voluntary.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesrequired
pageNo
sizeNo
org_formNo
municipalityNo
registered_in_vatNo
bankruptNo
registered_in_voluntaryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageYes
companiesYes
total_pagesYes
total_resultsYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a read-only, open-world, idempotent operation. The description adds valuable context by specifying the search is by name and listing filter options, which enhances understanding beyond the annotations. No contradictions with annotations are present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by usage guidance and filter details in a single, efficient sentence. Every element serves a clear purpose without redundancy, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (8 parameters), low schema coverage, and the presence of an output schema, the description is complete enough. It covers purpose, usage guidelines, and key parameters, and the output schema handles return values, so no additional explanation is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low at 13%, with only the 'query' parameter documented. The description mentions filter parameters like 'org_form', 'municipality', etc., but doesn't provide detailed semantics or examples. It adds some meaning but doesn't fully compensate for the schema gaps, aligning with the baseline for partial coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Search Norwegian companies by name') and resource ('Norwegian companies'), distinguishing it from sibling tools like 'norway_get_company' which requires an org number. It explicitly differentiates from that sibling, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool vs. alternatives: 'If you have a 9-digit org number, use norway_get_company instead.' It also lists available filters, helping users understand the tool's scope and when it's appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

norway_search_subunitsA
Read-onlyIdempotent

Search Norwegian branch offices by name. USE WHEN: "find branches named X" and you don't have the parent org number. Filter by municipality. For listing all branches of a known parent, use norway_get_subunits.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesrequired
pageNo
sizeNo
municipalityNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageYes
sub_unitsYes
total_pagesYes
total_resultsYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds valuable context about the search scope (by name, with municipality filtering) and clarifies the prerequisite condition (not having parent org number), which goes beyond what annotations provide. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured with two sentences: the first states the purpose and key parameters, the second provides usage guidelines and sibling differentiation. Every sentence adds value with zero wasted words, making it highly concise and well-organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (4 parameters, 1 required), the presence of comprehensive annotations, and an output schema (which handles return values), the description provides complete context. It covers purpose, usage guidelines, key parameters, and sibling differentiation, leaving no significant gaps for agent understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (only the 'query' parameter has a description), but the description compensates by explaining that 'query' is for searching by name and mentions the 'municipality' parameter for filtering. However, it doesn't address 'page' and 'size' parameters, leaving some gaps in parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Search Norwegian branch offices by name') and resource ('branch offices'), and explicitly distinguishes it from its sibling tool 'norway_get_subunits' by specifying different use cases. This provides excellent differentiation and clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool ('find branches named X and you don't have the parent org number') and when to use an alternative ('For listing all branches of a known parent, use norway_get_subunits'). It also mentions the municipality filter capability, giving clear context for application.

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.

  1. 19 tool updates
    • First observeddenmark_get_by_pnumber
    • First observeddenmark_get_company
    • First observeddenmark_get_production_units
    • First observeddenmark_search_by_phone
    • First observeddenmark_search_companies
    • First observedfinland_get_company
    • First observedfinland_search_companies
    • First observednorway_batch_get_companies
    • First observednorway_get_company
    • First observednorway_get_roles
    • First observednorway_get_signature_rights
    • First observednorway_get_subunit
    • First observednorway_get_subunit_updates
    • First observednorway_get_subunits
    • First observednorway_get_updates
    • First observednorway_list_municipalities
    • First observednorway_list_org_forms
    • First observednorway_search_companies
    • First observednorway_search_subunits

TDQS

A4.1/5.0

Scored across 19 tools

Disambiguation4/5

Tools are generally well-differentiated by country and resource type, with clear distinctions like norway_get_roles vs norway_get_signature_rights. However, some overlap exists between search and get tools across countries, which could cause minor confusion if an agent misinterprets the purpose of each.

Naming Consistency5/5

All tool names follow a consistent pattern of country_prefix_verb_noun (e.g., denmark_get_company, norway_search_companies). This structured naming makes it easy to predict tool functions and navigate the set without ambiguity.

Tool Count4/5

With 19 tools, the count is reasonable for covering multiple Nordic countries and various company registry operations. It might be slightly high, but each tool serves a distinct purpose, such as handling different countries or specific queries like updates and subunits, justifying the scope.

Completeness5/5

The tool set provides comprehensive coverage for company registry data across Denmark, Finland, and Norway, including CRUD-like operations (get, search), specialized queries (roles, updates, subunits), and utility functions (municipalities, org forms). No obvious gaps are present for the domain.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides access to a suite of Nordic data tools covering Danish business records, addresses, weather, and energy prices, alongside Norwegian and Finnish company information. This unified server enables users to query public APIs for regional data across Denmark, Norway, and Finland without requiring individual API keys.
    33
    10 npm
    2
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Multi-source enrichment platform for Norwegian company intelligence: search, ownership down to individual shareholders, roles, financials, risk scoring, and KYC/AML/PEP screening. Fuses Brønnøysundregistrene, the Tax Administration's shareholder registry, and foreign PEP/sanctions sources into decision-ready insights — 25 tools, remote MCP with OAuth 2.0.
    35
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for querying the Norwegian Brønnøysundregistrene business register, including companies, roles, subunits, and annual accounts, with built-in guards against common data traps like retired NACE codes and withheld employee counts.
    18 npm
    MIT