Skip to main content
Glama

Server Details

NordicContacts provides read-only company and decision-maker data for Finland, Sweden and Estonia through a hosted MCP server. Identify companies, count matching segments and retrieve company or contact records for B2B prospecting.

Connect to https://nordiccontacts.eu/mcp using Streamable HTTP. You need a NordicContacts account with an active trial or subscription. Sign in and approve access through OAuth. For clients without OAuth support, create an API token in your NordicContacts account and configure Bearer authentication; do not share the token in a chat or public listing.

Eligible new accounts receive a one-month trial with 50 shared usage units and no credit card requirement. Starter costs €49/month with 500 included units; Pro costs €79/month with 1,000 included units. Paid prices exclude VAT; applicable VAT is calculated at checkout. The trial is not a recurring free allowance.

Service information, taxonomy discovery and segment-count tools do not consume balance. Record-retrieval tools, including company identification, consume the same balance as REST API retrieval and subscribed Excel exports: included units first, then prepaid top-ups. Completed retrieval calls have a one-unit minimum, including calls with no match. Exact charging is documented per tool; do not treat every MCP call as one contact.

The MCP server does not create Excel files, send outreach or update CRM records. Excel downloads and Pro's HubSpot/Pipedrive integrations are separate web-application workflows. A one-time Excel purchase alone does not grant MCP access.

Setup and tool reference: https://nordiccontacts.eu/agents/docs

Ownership verified
Status
Healthy
Uptime
78.1% over 31 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.1/5.0

Scored across 17 tools

Disambiguation4/5

The set cleanly separates company vs. contact operations and count vs. list operations. The main overlap is find_companies vs. resolve_company_by_domain, but the descriptions clearly route exact-domain lookups to the latter and broader identity resolution to the former.

Naming Consistency4/5

Almost all tools use consistent snake_case verb_noun naming, such as list_company_segment, count_contact_segment, and search_keyword_subcategories. Minor deviations like service_info and describe_tools are readable but do not follow the same action-resource pattern.

Tool Count4/5

With 17 tools, the server is slightly above the typical 3-15 range, but most additions are justified lookup taxonomies needed to construct valid segment filters. The surface is broad but not obviously bloated.

Completeness4/5

The read-only prospecting domain is well covered: counts, segment listings, company/contact lookup, company-contact retrieval, filter taxonomies, and pricing/quota info are all present. Minor gaps include no enumerator for valid webshop platform or target market values and no direct contact-by-ID lookup outside email or company context.

Available Tools

17 tools
count_company_segmentCount Company SegmentA
Read-only
Inspect

Count matching companies for segment filters without loading company/contact rows. Use this for "how many companies" questions. Free to call; does not consume account balance. Supports webshopStatus, webshopPlatforms, and targetMarket filters. webshopPlatforms is only valid when webshopStatus is "identified" or omitted. Supports company keyword taxonomy filtering through keywordCategoryFilter. Use list_keyword_categories for broad main categories and search_keyword_subcategories for specific business activities. Pass only canonical returned name values; never pass localized labels or raw keywords. Your account exclusion list always applies automatically and cannot be disabled. Optional customerListMode: "exclude" removes companies on your customer list (net-new prospecting), "limit" returns only customer-list companies, "ignore" or omitted ignores the customer list. Exclude/limit require an active customer list managed in the web app (Company lists). Does not support pagination and always returns a total count.

NameRequiredDescriptionDefault
companyIdNoOptional company ID filter. Restricts results to one company when provided.
countryIdYesCountry ID. Use list_countries to discover valid values. Note: IDs are negative integers as stored in the database (e.g. Finland = -2460, Sweden = -7520, Estonia = -2330).
profitMaxNoIn thousands of euros (EUR thousands). Maximum annual profit; negative values are allowed and represent net loss.
profitMinNoIn thousands of euros (EUR thousands). Minimum annual profit; negative values are allowed and represent net loss.
businessIdNoOptional company business ID filter. Normalizes dashes/spaces when matching (e.g. "1234567-8").
regionNameNoRegion/province name (case-insensitive substring match). Use the local-language name as shown in company records, e.g. "Uusimaa", "Stockholm".
turnoverMaxNoIn thousands of euros (EUR thousands). Maximum annual turnover. Example: 5000 = EUR 5M turnover.
turnoverMinNoIn thousands of euros (EUR thousands). Minimum annual turnover. Example: 5000 = EUR 5M turnover.
personnelMaxNoMaximum number of employees (headcount) as reported in company records.
personnelMinNoMinimum number of employees (headcount) as reported in company records.
targetMarketNoTarget market classification: "b2b" = B2B only (1), "b2c" = B2C only (2), "both" = both B2B and B2C (12), "unknown" = crawled but unknown (0), "not_crawled" = not yet crawled (NULL). Omitted includes every state.
industryCodesNoIndustry codes (NACE/TOL) for filtering companies and contacts. Codes match by prefix: a full code like "62010" matches one industry, while a shorter prefix like "62" matches every industry whose code starts with it. Call list_industries first to discover valid codes, then pass the returned id values here. IDs from list_industries are string-typed numeric codes, not integers — pass them as strings.
webshopStatusNoWebshop classification filter: "identified" = a webshop was found, "not_identified" = crawled and no webshop found, "not_crawled" = not yet crawled. Omitted includes all states including 0 and NULL.
foundedYearMaxNoLatest founding year to include (e.g. 2020).
foundedYearMinNoEarliest founding year to include (e.g. 2010).
jobFunctionIdsNoJob function IDs for multi-select filters. Use list_job_functions to discover valid values. Finer-grained than mainResponsibilityAreaIds.
customerListModeNoOptional customer-list mode: "exclude" removes companies on your customer list (net-new prospecting), "limit" returns only customer-list companies that match the other filters, "ignore" or omitted ignores the customer list. "exclude"/"limit" require an active customer list managed in the web app under Company lists; fails with CUSTOMER_LIST_REQUIRED otherwise. The account exclusion list always applies regardless of this setting.
industryGroupIdsNoIndustry group IDs for multi-select filters. Use list_industry_groups to discover valid values.
webshopPlatformsNoWebshop platform names (e.g. "shopify", "woocommerce"). Must be combined with webshopStatus "identified" or omitted; combining with "not_identified" or "not_crawled" is invalid. Values are normalized to lowercase/trimmed. Up to 20 values, each up to 50 characters.
organizationLevelsNoHierarchy level filter; orthogonal to mainResponsibilityAreaIds/jobFunctionIds. Combine with responsibility filters for e.g. Sales + Top Management.
companyContactFilterNoCompany-level contact-availability filter: "all" = include companies regardless of contact availability, "email" = at least one contact with valid email, "phone" = at least one contact with mobile phone, "both" = at least one contact with both valid email and phone, "either" = at least one contact with a valid email, a phone number, or both. Defaults to "email". Compare with contactInfoFilter on contact tools, which filters each returned contact directly.
keywordCategoryFilterNoCompany keyword taxonomy filter. Use level "main" only with canonical name values returned by list_keyword_categories and level "sub" only with canonical name values returned by search_keyword_subcategories. Copy the returned name, not a localized labels value. any matches at least one item, all requires every item, and none excludes every item; non-empty buckets combine with AND. This filters classified company categories and subcategories, not raw keyword text.
newContactsWithinDaysNoReturns companies that have at least one contact created within the last N days (max 3650).
mainResponsibilityAreaIdsNoBroad functional responsibility area IDs (e.g. IT, Marketing). Use list_main_responsibility_areas to discover valid values. IDs are negative integers as stored in the database (e.g. Sales = -70, IT = -40, Marketing = -60, HR = -30, Finances = -50, Managing Director = -20). Combine with jobFunctionIds or organizationLevels to narrow further.
newResponsibilityAssignmentsWithinDaysNoReturns companies that have at least one contact with such an assignment (max 3650).

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the readOnly/destructive annotations: it discloses billing behavior ('free to call; does not consume account balance'), the always-on non-disableable exclusion list, the CUSTOMER_LIST_REQUIRED precondition, and the pagination/return behavior ('does not support pagination and always returns a total count'). This is exactly the operational context an agent needs before calling.

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

Conciseness4/5

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

Front-loads the core distinction and billing note, then handles filter rules and customerListMode. Dense and mostly waste-free, though the customerListMode explanation partially restates the schema and could be tightened.

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?

For a 25-parameter tool with nested objects and no output schema, it covers the high-risk constraints (no pagination, returns only a count, billing, exclusion-list behavior, taxonomy name rules). Remaining filter parameters are left to the fully-populated schema, which is reasonable.

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 coverage is 100%, so baseline is 3, but the description adds interaction semantics the schema states thinly: the webshopStatus/webshopPlatforms dependency and the canonical-vs-localized taxonomy constraint for keywordCategoryFilter ('pass only canonical returned name values; never pass localized labels or raw keywords'). It does not walk the many other filters, but the schema does.

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?

States a specific verb+resource (count matching companies for segment filters) and immediately differentiates from the listing siblings via 'without loading company/contact rows.' An agent can tell this is the count-only path versus list_company_segment without opening a schema.

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?

Gives explicit when-to-use ('how many companies' questions) and conditional validity rules (webshopPlatforms only valid with webshopStatus 'identified' or omitted; customerListMode exclude/limit require an active list). It never names list_company_segment as the alternative it is contrasted against, leaving the routing to the reader.

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

count_contact_segmentCount Contact SegmentA
Read-only
Inspect

Count matching contacts for segment filters without loading contact rows. Use this for "how many contacts" questions. Free to call; does not consume account balance. Supports webshopStatus, webshopPlatforms, and targetMarket filters. webshopPlatforms is only valid when webshopStatus is "identified" or omitted. Supports company keyword taxonomy filtering through keywordCategoryFilter. Use list_keyword_categories for broad main categories and search_keyword_subcategories for specific business activities. Pass only canonical returned name values; never pass localized labels or raw keywords. Your account exclusion list always applies automatically and cannot be disabled. Optional customerListMode: "exclude" removes companies on your customer list (net-new prospecting), "limit" returns only customer-list companies, "ignore" or omitted ignores the customer list. Exclude/limit require an active customer list managed in the web app (Company lists). Does not support pagination and always returns a total count.

NameRequiredDescriptionDefault
companyIdNoOptional company ID filter. Restricts results to one company when provided.
countryIdYesCountry ID. Use list_countries to discover valid values. Note: IDs are negative integers as stored in the database (e.g. Finland = -2460, Sweden = -7520, Estonia = -2330).
profitMaxNoIn thousands of euros (EUR thousands). Maximum annual profit; negative values are allowed and represent net loss.
profitMinNoIn thousands of euros (EUR thousands). Minimum annual profit; negative values are allowed and represent net loss.
businessIdNoOptional company business ID filter. Normalizes dashes/spaces when matching (e.g. "1234567-8").
regionNameNoRegion/province name (case-insensitive substring match). Use the local-language name as shown in company records, e.g. "Uusimaa", "Stockholm".
turnoverMaxNoIn thousands of euros (EUR thousands). Maximum annual turnover. Example: 5000 = EUR 5M turnover.
turnoverMinNoIn thousands of euros (EUR thousands). Minimum annual turnover. Example: 5000 = EUR 5M turnover.
personnelMaxNoMaximum number of employees (headcount) as reported in company records.
personnelMinNoMinimum number of employees (headcount) as reported in company records.
targetMarketNoTarget market classification: "b2b" = B2B only (1), "b2c" = B2C only (2), "both" = both B2B and B2C (12), "unknown" = crawled but unknown (0), "not_crawled" = not yet crawled (NULL). Omitted includes every state.
industryCodesNoIndustry codes (NACE/TOL) for filtering companies and contacts. Codes match by prefix: a full code like "62010" matches one industry, while a shorter prefix like "62" matches every industry whose code starts with it. Call list_industries first to discover valid codes, then pass the returned id values here. IDs from list_industries are string-typed numeric codes, not integers — pass them as strings.
webshopStatusNoWebshop classification filter: "identified" = a webshop was found, "not_identified" = crawled and no webshop found, "not_crawled" = not yet crawled. Omitted includes all states including 0 and NULL.
foundedYearMaxNoLatest founding year to include (e.g. 2020).
foundedYearMinNoEarliest founding year to include (e.g. 2010).
jobFunctionIdsNoJob function IDs for multi-select filters. Use list_job_functions to discover valid values. Finer-grained than mainResponsibilityAreaIds.
customerListModeNoOptional customer-list mode: "exclude" removes companies on your customer list (net-new prospecting), "limit" returns only customer-list companies that match the other filters, "ignore" or omitted ignores the customer list. "exclude"/"limit" require an active customer list managed in the web app under Company lists; fails with CUSTOMER_LIST_REQUIRED otherwise. The account exclusion list always applies regardless of this setting.
industryGroupIdsNoIndustry group IDs for multi-select filters. Use list_industry_groups to discover valid values.
webshopPlatformsNoWebshop platform names (e.g. "shopify", "woocommerce"). Must be combined with webshopStatus "identified" or omitted; combining with "not_identified" or "not_crawled" is invalid. Values are normalized to lowercase/trimmed. Up to 20 values, each up to 50 characters.
contactInfoFilterNoContact-level required info filter: "email" (default) = each returned contact must have valid email, "phone" = must have phone number, "both" = must have both, "either" = must have a valid email, a phone number, or both. Use companyContactFilter on company-segment tools when filtering companies by whether they have at least one matching contact.
organizationLevelsNoHierarchy level filter; orthogonal to mainResponsibilityAreaIds/jobFunctionIds. Combine with responsibility filters for e.g. Sales + Top Management.
keywordCategoryFilterNoCompany keyword taxonomy filter. Use level "main" only with canonical name values returned by list_keyword_categories and level "sub" only with canonical name values returned by search_keyword_subcategories. Copy the returned name, not a localized labels value. any matches at least one item, all requires every item, and none excludes every item; non-empty buckets combine with AND. This filters classified company categories and subcategories, not raw keyword text.
newContactsWithinDaysNoReturns contacts created within the last N days (max 3650).
mainResponsibilityAreaIdsNoBroad functional responsibility area IDs (e.g. IT, Marketing). Use list_main_responsibility_areas to discover valid values. IDs are negative integers as stored in the database (e.g. Sales = -70, IT = -40, Marketing = -60, HR = -30, Finances = -50, Managing Director = -20). Combine with jobFunctionIds or organizationLevels to narrow further.
newResponsibilityAssignmentsWithinDaysNoReturns contacts with an assignment created within the last N days (max 3650).

TDQS

A4.5/5.0
Behavior5/5

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

Adds substantial behavior beyond the readOnly/non-destructive annotations: it is free and consumes no balance, always applies the account exclusion list, requires an active customer list for exclude/limit modes, and does not paginate (always returns a total). These are real operational traits an agent needs.

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

Conciseness4/5

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

Front-loads the core purpose and expected question type, then layers constraints. It is dense and slightly repetitive with the schema (customerListMode is restated), but each sentence carries actionable guidance rather than filler.

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?

For a 25-parameter, nested-object tool with no output schema, the description covers the return shape ('always returns a total count', no pagination), billing cost, and key filter interactions. Remaining ambiguity (e.g. count upper bounds or caching) is minor given the rich 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?

Schema coverage is 100% so the schema already documents most fields, but the description adds cross-parameter semantics (webshopPlatforms only valid with webshopStatus 'identified'), the canonical-name constraint for taxonomy values, and the automatic exclusion-list behavior. It consolidates multi-field interactions usefully, though much overlaps 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?

States a specific verb 'Count' plus the resource 'matching contacts for segment filters', and immediately distinguishes the tool from the list variant with 'without loading contact rows'. An agent knows exactly what this does versus list_contact_segment.

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?

Gives a clear use case ('how many contacts questions') and routes taxonomy lookups to list_keyword_categories and search_keyword_subcategories. It does not explicitly contrast with count_company_segment or spell out when NOT to use this tool, so routing guidance is clear but not exhaustive.

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

describe_toolsDescribe ToolsA
Read-only
Inspect

Describe MCP tool capabilities with names, operation groups, and brief usage hints so external clients can self-discover available routes before calling business endpoints.

NameRequiredDescriptionDefault
includeExamplesNoWhen true, include example calls per capability. Defaults to true.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds value by disclosing the shape of what comes back (names, operation groups, usage hints), which matters because there is no output schema.

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

Conciseness4/5

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

A single tightly packed sentence with the tool's purpose and its return framing front-loaded. No filler, though the phrasing is somewhat dense with three separate noun phrases.

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?

With no output schema, the description partially compensates by sketching return contents, and the read-only annotations remove the need to explain side effects. An agent has enough to invoke this correctly, though permissions or rate/size limits are unstated.

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 single parameter includeExamples is documented at 100% coverage in the schema, including its default. The description does not mention it or add syntax beyond the schema, so the baseline 3 for high coverage applies.

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?

States a specific verb ("Describe") and resource ("MCP tool capabilities") and frames the outcome as names, operation groups, and usage hints. It implicitly contrasts itself with the business endpoints in the sibling list (find_*, list_*, count_*), though it does not name a specific sibling.

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?

Provides clear timing guidance: call it to "self-discover available routes before calling business endpoints." This gives an agent a concrete trigger condition, but it names no explicit alternative or exclusion case, so it falls short of full 5-level routing guidance.

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

find_companiesFind CompaniesA
Read-only
Inspect

Find companies by internal companyId, business ID, website domain, or company name. companyId is the internal database ID returned as id in company records or companyId in contact rows, not the business registration ID. Use find_companies({ companyId: 12345 }) to retrieve full details for a previously returned company ID. When provided, companyId takes precedence over other identifiers; countryId still restricts the lookup. Intended for identity resolution only (typically 1-3 best matches), not bulk retrieval. Returns resolvedCompany with match score and match type for an unambiguous match, omitting candidates. Otherwise returns ranked candidates with match scores and match types and includes ambiguity detection when name-based searches have multiple plausible matches. Example: find_companies({ companyName: "Dynava", limit: 3 }). Use the domain field here when combining identifiers or when candidate ranking/ambiguity handling is needed. For direct domain-to-company lookup only, prefer resolve_company_by_domain. For bulk company retrieval use list_company_segment. Consumes the account's shared subscription balance (the same balance used by subscribed Excel exports and REST API usage: included monthly contacts first, then prepaid top-up contacts). A completed call always costs at least 1 unit. Costs 1 company unit for a resolved match, or 1 unit per returned candidate when the result is ambiguous.

NameRequiredDescriptionDefault
limitNoMaximum number of candidate companies to return. Defaults to 10. Use a small value such as 3 when only sample rows are needed.
domainNoWebsite domain to match exactly, e.g. "acme.com".
companyIdNoCompany internal database ID returned as id in company records or companyId in contact rows; not the business registration ID. Matches exactly and takes precedence over businessId, domain, and companyName.
countryIdNoOptional country ID limiting the search to one country. Get IDs from list_countries.
businessIdNoBusiness registration ID to match exactly when companyId is not provided.
companyNameNoCompany name fragment to match when business ID is not known.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare a safe read, but the description adds material behavior: precedence order among identifiers, countryId still constraining the lookup, the shared subscription balance being consumed, a minimum cost of 1 unit, and the exact cost rules for resolved vs ambiguous results. Return shapes (resolvedCompany with match score/type vs ranked candidates with ambiguity detection) are also disclosed.

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

Conciseness4/5

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

Front-loaded with the lookup keys and an inline example, and every sentence carries routing, precedence, return-shape, or cost information. It is dense and long, with the cost sentences arriving late, but nothing is filler.

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?

For a 6-parameter lookup tool with no output schema, the description supplies the missing return semantics (resolved match vs ranked candidates, ambiguity detection) plus billing behavior. An agent has everything needed to call it correctly and predict the outcome.

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 coverage is already 100%, and much of the description restates it, but it adds genuine interpretation: companyId is the internal ID appearing as id/companyId, not a registration ID, and it takes precedence over the other identifiers. The precedence and cost-per-parameter implications go beyond the schema text.

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?

States a specific verb (find) and resource (companies) plus the four identifier types it accepts, then explicitly contrasts itself with resolve_company_by_domain and list_company_segment. An agent can distinguish it from every sibling without opening a schema.

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?

Gives explicit routing: domain-only lookups go to resolve_company_by_domain, bulk retrieval to list_company_segment, and this tool is scoped to identity resolution of 1-3 matches. It also states when to use the domain field here versus elsewhere.

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

find_contact_by_emailFind Contact by EmailA
Read-only
Inspect

Find one individual contact from a known email address. Always returns at most 1 row. Consumes the account's shared subscription balance (the same balance used by subscribed Excel exports and REST API usage: included monthly contacts first, then prepaid top-up contacts). A completed call always costs at least 1 unit. Costs exactly 1 contact unit per completed call.

NameRequiredDescriptionDefault
emailYesThe contact email address to resolve.

TDQS

A4.2/5.0
Behavior5/5

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

Goes well beyond the readOnly/non-destructive/closed-world annotations by disclosing the billing model: it draws on the shared account subscription balance (same pool as Excel exports and REST API), with monthly included units consumed before prepaid top-ups. It also caps the result set at one row, which annotations cannot convey.

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

Conciseness3/5

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

The purpose and row-limit are correctly front-loaded, but the cost section is repetitive and slightly self-undermining: 'always costs at least 1 unit' followed by 'costs exactly 1 contact unit per completed call' leaves the agent unsure whether a call can cost more than one unit. Two sentences could be collapsed into one.

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?

For a one-parameter lookup with no output schema, the description covers input precondition, result cardinality, and cost. The notable gap is the not-found case: since cost is emphasized, an agent needs to know whether a no-match call still charges a unit and whether it returns an empty result or an error.

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 coverage is 100% and the single parameter already carries a description plus format and regex pattern, so the schema does the heavy lifting. The description adds only that the email must be 'known', which is marginal beyond what the schema provides; baseline 3 applies.

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?

States a specific verb and resource ('Find one individual contact'), the exact input class ('known email address'), and the result shape ('Always returns at most 1 row'). This cleanly separates it from the bulk listing siblings like list_company_contacts and from the company-side analog resolve_company_by_domain.

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 precondition for use is explicit: you must already have the email address, which frames it as a resolution/lookup tool rather than a search tool. It does not state when NOT to use it or name an alternative for partial-name or fuzzy contact lookups.

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

list_company_contactsList Company ContactsA
Read-only
Inspect

Retrieve contacts that belong to one company. Returns full company details once in resolvedCompany, omitting candidates, and compact contact rows with person fields and companyId only. Supports deterministic pagination with limit and offset. If companyName matches multiple companies, returns isAmbiguous=true and candidates instead of contacts; resolve by re-calling with companyId or businessId. Example: list_company_contacts({ companyName: "Dynava Oy", contactInfoFilter: "both", limit: 25, offset: 0 }). Use a small limit (e.g. 3) when fetching sample rows to minimise cost. Consumes the account's shared subscription balance (the same balance used by subscribed Excel exports and REST API usage: included monthly contacts first, then prepaid top-up contacts). A completed call always costs at least 1 unit. Costs 1 contact unit per returned contact.

NameRequiredDescriptionDefault
limitNoMaximum number of contacts to return. Uses the service default when omitted. Use a small value such as 3 when only sample rows are needed.
offsetNoZero-based offset for paginating deterministic results. Use with limit.
companyIdNoCanonical company ID if already known.
countryIdNoOptional country ID limiting the company lookup to one country. Get IDs from list_countries.
businessIdNoBusiness ID when companyId is not available.
companyNameNoCompany name fragment when companyId is not available.
contactInfoFilterNoFilter contacts by required info: "email" (default) = must have valid email, "phone" = must have phone number, "both" = must have both, "either" = must have a valid email, a phone number, or both.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only cover the read-only safety profile, yet the description adds a full cost model (shared subscription balance, included then prepaid units, minimum 1 unit per completed call, 1 unit per returned contact), deterministic pagination semantics, and the isAmbiguous/candidates fallback behavior. These are exactly the behavioral traits an agent cannot infer from 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.

Conciseness4/5

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

Front-loads the core purpose and return shape, then layers ambiguity handling, an example, a cost tip, and the billing rule. Every sentence earns its place, though the cost discussion runs three sentences and could be tightened.

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?

With no output schema, the description carries the full burden and does so: it describes the resolvedCompany payload, the omitted candidates field, the compact contact row shape, the ambiguity signal, pagination, and billing. An agent has everything needed to invoke and interpret the call.

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 coverage is 100%, so the baseline is 3, but the description adds real meaning: the companyId/businessId/companyName fallback relationship, the limit+offset pairing for deterministic paging, and the sample-fetch use of a small limit. It does not add much for countryId or contactInfoFilter beyond the schema, keeping it just under a 5.

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?

States a specific verb and resource ('Retrieve contacts that belong to one company') and immediately scopes the return shape (resolvedCompany plus compact contact rows). This clearly separates it from siblings like find_companies and list_contact_segment, which operate across companies or segments rather than within a single company.

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?

Gives concrete guidance on the ambiguous-name case (re-call with companyId or businessId) and on using a small limit for sample fetches, plus a worked example call. It never explicitly says when to prefer this over sibling tools such as list_contact_segment or find_contact_by_email, so it falls short of full alternative routing.

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

list_company_segmentList Company SegmentA
Read-only
Inspect

List companies matching the given segment criteria (country, industry, size, new contacts, webshop and target market, etc.). Consumes the account's shared subscription balance (the same balance used by subscribed Excel exports and REST API usage: included monthly contacts first, then prepaid top-up contacts). A completed call always costs at least 1 unit. Costs 1 company unit per returned company row. Returns paginated, deterministically ordered company rows with source classification attributes (hasWebshop, webshopPlatform, targetMarket). Supports webshopStatus, webshopPlatforms, and targetMarket filters. webshopPlatforms is only valid when webshopStatus is "identified" or omitted. Supports company keyword taxonomy filtering through keywordCategoryFilter. Use list_keyword_categories for broad main categories and search_keyword_subcategories for specific business activities. Pass only canonical returned name values; never pass localized labels or raw keywords. Your account exclusion list always applies automatically and cannot be disabled. Optional customerListMode: "exclude" removes companies on your customer list (net-new prospecting), "limit" returns only customer-list companies, "ignore" or omitted ignores the customer list. Exclude/limit require an active customer list managed in the web app (Company lists). Example: list_company_segment({ countryId: -2460, companyContactFilter: "email", limit: 100, offset: 0 }). For count-only questions, prefer count_company_segment.

NameRequiredDescriptionDefault
limitNoMaximum number of companies to return. Defaults to 100; cannot exceed 100. Use a small value such as 10 when only sample rows are needed.
offsetNoZero-based offset for paginating deterministic results. Use with limit.
companyIdNoOptional company ID filter. Restricts results to one company when provided.
countryIdYesCountry ID. Use list_countries to discover valid values. Note: IDs are negative integers as stored in the database (e.g. Finland = -2460, Sweden = -7520, Estonia = -2330).
profitMaxNoIn thousands of euros (EUR thousands). Maximum annual profit; negative values are allowed and represent net loss.
profitMinNoIn thousands of euros (EUR thousands). Minimum annual profit; negative values are allowed and represent net loss.
businessIdNoOptional company business ID filter. Normalizes dashes/spaces when matching (e.g. "1234567-8").
regionNameNoRegion/province name (case-insensitive substring match). Use the local-language name as shown in company records, e.g. "Uusimaa", "Stockholm".
turnoverMaxNoIn thousands of euros (EUR thousands). Maximum annual turnover. Example: 5000 = EUR 5M turnover.
turnoverMinNoIn thousands of euros (EUR thousands). Minimum annual turnover. Example: 5000 = EUR 5M turnover.
personnelMaxNoMaximum number of employees (headcount) as reported in company records.
personnelMinNoMinimum number of employees (headcount) as reported in company records.
targetMarketNoTarget market classification: "b2b" = B2B only (1), "b2c" = B2C only (2), "both" = both B2B and B2C (12), "unknown" = crawled but unknown (0), "not_crawled" = not yet crawled (NULL). Omitted includes every state.
industryCodesNoIndustry codes (NACE/TOL) for filtering companies and contacts. Codes match by prefix: a full code like "62010" matches one industry, while a shorter prefix like "62" matches every industry whose code starts with it. Call list_industries first to discover valid codes, then pass the returned id values here. IDs from list_industries are string-typed numeric codes, not integers — pass them as strings.
webshopStatusNoWebshop classification filter: "identified" = a webshop was found, "not_identified" = crawled and no webshop found, "not_crawled" = not yet crawled. Omitted includes all states including 0 and NULL.
foundedYearMaxNoLatest founding year to include (e.g. 2020).
foundedYearMinNoEarliest founding year to include (e.g. 2010).
jobFunctionIdsNoJob function IDs for multi-select filters. Use list_job_functions to discover valid values. Finer-grained than mainResponsibilityAreaIds.
customerListModeNoOptional customer-list mode: "exclude" removes companies on your customer list (net-new prospecting), "limit" returns only customer-list companies that match the other filters, "ignore" or omitted ignores the customer list. "exclude"/"limit" require an active customer list managed in the web app under Company lists; fails with CUSTOMER_LIST_REQUIRED otherwise. The account exclusion list always applies regardless of this setting.
industryGroupIdsNoIndustry group IDs for multi-select filters. Use list_industry_groups to discover valid values.
webshopPlatformsNoWebshop platform names (e.g. "shopify", "woocommerce"). Must be combined with webshopStatus "identified" or omitted; combining with "not_identified" or "not_crawled" is invalid. Values are normalized to lowercase/trimmed. Up to 20 values, each up to 50 characters.
organizationLevelsNoHierarchy level filter; orthogonal to mainResponsibilityAreaIds/jobFunctionIds. Combine with responsibility filters for e.g. Sales + Top Management.
companyContactFilterNoCompany-level contact-availability filter: "all" = include companies regardless of contact availability, "email" = at least one contact with valid email, "phone" = at least one contact with mobile phone, "both" = at least one contact with both valid email and phone, "either" = at least one contact with a valid email, a phone number, or both. Defaults to "email". Compare with contactInfoFilter on contact tools, which filters each returned contact directly.
keywordCategoryFilterNoCompany keyword taxonomy filter. Use level "main" only with canonical name values returned by list_keyword_categories and level "sub" only with canonical name values returned by search_keyword_subcategories. Copy the returned name, not a localized labels value. any matches at least one item, all requires every item, and none excludes every item; non-empty buckets combine with AND. This filters classified company categories and subcategories, not raw keyword text.
newContactsWithinDaysNoReturns companies that have at least one contact created within the last N days (max 3650).
mainResponsibilityAreaIdsNoBroad functional responsibility area IDs (e.g. IT, Marketing). Use list_main_responsibility_areas to discover valid values. IDs are negative integers as stored in the database (e.g. Sales = -70, IT = -40, Marketing = -60, HR = -30, Finances = -50, Managing Director = -20). Combine with jobFunctionIds or organizationLevels to narrow further.
newResponsibilityAssignmentsWithinDaysNoReturns companies that have at least one contact with such an assignment (max 3650).

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only cover the safety profile (readOnly/non-destructive), but the description discloses the cost model (shared subscription balance, minimum 1 unit per call, 1 unit per company row), deterministic pagination, and the fact that the account exclusion list always applies and cannot be disabled. These are materially important traits an agent cannot infer from the schema.

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

Conciseness4/5

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

It is long, but for a 27-parameter nested-object tool most sentences earn their place and the purpose is front-loaded. Minor redundancy where customerListMode behavior is restated nearly verbatim from the schema, which could be trimmed.

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?

With no output schema, the description still characterizes the return payload (paginated, deterministically ordered rows with hasWebshop/webshopPlatform/targetMarket attributes) and covers cost, auth/setup prerequisites, and filter interactions. Nothing an agent needs to call this correctly is missing.

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 coverage is 100%, so the schema carries the per-parameter burden and baseline is 3. The description nonetheless adds cross-parameter semantics the schema cannot express: keyword filters must use canonical returned names (never localized labels or raw keywords) and that keywordCategoryFilter operates on classified taxonomy rather than raw text.

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?

States a specific verb (List) and resource (companies matching segment criteria), then enumerates the filter surface (country, industry, size, new contacts, webshop, target market). It explicitly differentiates from the sibling count_company_segment at the end of the description.

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?

Names alternatives and the conditions that select them: count_company_segment for count-only questions, list_keyword_categories for broad categories, search_keyword_subcategories for specific activities. It also states when webshopPlatforms is valid and requires customer-list setup for exclude/limit modes.

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

list_contact_segmentList Contact SegmentA
Read-only
Inspect

Return a filtered contact segment using the same criteria as the web search page. Consumes the account's shared subscription balance (the same balance used by subscribed Excel exports and REST API usage: included monthly contacts first, then prepaid top-up contacts). A completed call always costs at least 1 unit. Costs 1 contact unit per returned contact row. Results are deterministically ordered and support limit/offset pagination. Response meta includes companyCount (number of distinct companies represented by matching contacts). Returned contact rows include person fields (name, title, email, phone, responsibility areas), compact employer context (companyId, companyName, countryName, region, city, wwwpage, industryName), and source classification attributes (hasWebshop, webshopPlatform, targetMarket). Full company descriptions, financials, and address details are omitted; use find_companies or list_company_segment for full company details. Supports webshopStatus, webshopPlatforms, and targetMarket filters. webshopPlatforms is only valid when webshopStatus is "identified" or omitted. Supports company keyword taxonomy filtering through keywordCategoryFilter. Use list_keyword_categories for broad main categories and search_keyword_subcategories for specific business activities. Pass only canonical returned name values; never pass localized labels or raw keywords. Your account exclusion list always applies automatically and cannot be disabled. Optional customerListMode: "exclude" removes companies on your customer list (net-new prospecting), "limit" returns only customer-list companies, "ignore" or omitted ignores the customer list. Exclude/limit require an active customer list managed in the web app (Company lists). For count-only questions, prefer count_contact_segment. Example: list_contact_segment({ countryId: -2460, contactInfoFilter: "both", organizationLevels: ["Top Management"], limit: 50, offset: 0 }).

NameRequiredDescriptionDefault
limitNoMaximum number of contacts to return. Defaults to 100; cannot exceed 100. Use a small value such as 3 when only sample rows are needed.
offsetNoZero-based offset for paginating deterministic results. Use with limit.
companyIdNoOptional company ID filter. Restricts results to one company when provided.
countryIdYesCountry ID. Use list_countries to discover valid values. Note: IDs are negative integers as stored in the database (e.g. Finland = -2460, Sweden = -7520, Estonia = -2330).
profitMaxNoIn thousands of euros (EUR thousands). Maximum annual profit; negative values are allowed and represent net loss.
profitMinNoIn thousands of euros (EUR thousands). Minimum annual profit; negative values are allowed and represent net loss.
businessIdNoOptional company business ID filter. Normalizes dashes/spaces when matching (e.g. "1234567-8").
regionNameNoRegion/province name (case-insensitive substring match). Use the local-language name as shown in company records, e.g. "Uusimaa", "Stockholm".
turnoverMaxNoIn thousands of euros (EUR thousands). Maximum annual turnover. Example: 5000 = EUR 5M turnover.
turnoverMinNoIn thousands of euros (EUR thousands). Minimum annual turnover. Example: 5000 = EUR 5M turnover.
personnelMaxNoMaximum number of employees (headcount) as reported in company records.
personnelMinNoMinimum number of employees (headcount) as reported in company records.
targetMarketNoTarget market classification: "b2b" = B2B only (1), "b2c" = B2C only (2), "both" = both B2B and B2C (12), "unknown" = crawled but unknown (0), "not_crawled" = not yet crawled (NULL). Omitted includes every state.
industryCodesNoIndustry codes (NACE/TOL) for filtering companies and contacts. Codes match by prefix: a full code like "62010" matches one industry, while a shorter prefix like "62" matches every industry whose code starts with it. Call list_industries first to discover valid codes, then pass the returned id values here. IDs from list_industries are string-typed numeric codes, not integers — pass them as strings.
webshopStatusNoWebshop classification filter: "identified" = a webshop was found, "not_identified" = crawled and no webshop found, "not_crawled" = not yet crawled. Omitted includes all states including 0 and NULL.
foundedYearMaxNoLatest founding year to include (e.g. 2020).
foundedYearMinNoEarliest founding year to include (e.g. 2010).
jobFunctionIdsNoJob function IDs for multi-select filters. Use list_job_functions to discover valid values. Finer-grained than mainResponsibilityAreaIds.
customerListModeNoOptional customer-list mode: "exclude" removes companies on your customer list (net-new prospecting), "limit" returns only customer-list companies that match the other filters, "ignore" or omitted ignores the customer list. "exclude"/"limit" require an active customer list managed in the web app under Company lists; fails with CUSTOMER_LIST_REQUIRED otherwise. The account exclusion list always applies regardless of this setting.
industryGroupIdsNoIndustry group IDs for multi-select filters. Use list_industry_groups to discover valid values.
webshopPlatformsNoWebshop platform names (e.g. "shopify", "woocommerce"). Must be combined with webshopStatus "identified" or omitted; combining with "not_identified" or "not_crawled" is invalid. Values are normalized to lowercase/trimmed. Up to 20 values, each up to 50 characters.
contactInfoFilterNoContact-level required info filter: "email" (default) = each returned contact must have valid email, "phone" = must have phone number, "both" = must have both, "either" = must have a valid email, a phone number, or both. Use companyContactFilter on company-segment tools when filtering companies by whether they have at least one matching contact.
organizationLevelsNoHierarchy level filter; orthogonal to mainResponsibilityAreaIds/jobFunctionIds. Combine with responsibility filters for e.g. Sales + Top Management.
keywordCategoryFilterNoCompany keyword taxonomy filter. Use level "main" only with canonical name values returned by list_keyword_categories and level "sub" only with canonical name values returned by search_keyword_subcategories. Copy the returned name, not a localized labels value. any matches at least one item, all requires every item, and none excludes every item; non-empty buckets combine with AND. This filters classified company categories and subcategories, not raw keyword text.
newContactsWithinDaysNoReturns contacts created within the last N days (max 3650).
mainResponsibilityAreaIdsNoBroad functional responsibility area IDs (e.g. IT, Marketing). Use list_main_responsibility_areas to discover valid values. IDs are negative integers as stored in the database (e.g. Sales = -70, IT = -40, Marketing = -60, HR = -30, Finances = -50, Managing Director = -20). Combine with jobFunctionIds or organizationLevels to narrow further.
newResponsibilityAssignmentsWithinDaysNoReturns contacts with an assignment created within the last N days (max 3650).

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the readOnly/non-destructive annotations by disclosing billing behavior (consumes shared subscription balance, minimum 1 unit per call, 1 unit per returned row), determinism, pagination support, the always-on account exclusion list, and the CUSTOMER_LIST_REQUIRED failure mode. These are material operational facts an agent cannot infer from 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.

Conciseness4/5

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

Dense but well-ordered: purpose first, then cost/return semantics, then filter constraints, then routing to siblings, closing with a concrete example. A few statements (customerListMode, webshopPlatforms validity) restate schema text verbatim and could be trimmed, so it is efficient rather than lean.

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?

For a 27-parameter tool with no output schema, the description supplies the missing pieces: what each returned row contains, what response meta includes (companyCount), cost model, and how to reach sibling discovery tools for enum values. Nothing essential for a correct call is left unstated.

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 coverage is 100%, so baseline is 3, but the description adds cross-parameter semantics and discovery routing not fully spelled out in the schema (taxonomy level usage, canonical-vs-localized name rule, customer-list mode trade-offs) plus a worked example call. Some of this duplicates schema text, keeping it below a 5.

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?

States a specific verb and resource ('Return a filtered contact segment'), scopes it as contact-level output, and explicitly contrasts with siblings: find_companies/list_company_segment for full company details and count_contact_segment for count-only questions. It also enumerates the returned row shape (person fields, employer context, classification attributes), so an agent knows exactly what this returns.

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?

Names alternatives and the conditions that select them: count_contact_segment for count-only questions, find_companies/list_company_segment for full company details, list_keyword_categories vs search_keyword_subcategories for taxonomy level. It also states hard validity constraints (webshopPlatforms only with webshopStatus 'identified' or omitted; exclude/limit require an active customer list).

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

list_countriesList CountriesA
Read-only
Inspect

List available supported countries (Finland, Sweden, Estonia) with IDs to use in countryId filters. Use when building geography-based segments before calling segment/count tools. Free to call; does not consume account balance.

NameRequiredDescriptionDefault
limitNoMaximum number of rows to return. Defaults to 200.
searchNoOptional case-insensitive name filter.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds useful cost context ('Free to call; does not consume account balance'), which goes beyond annotations. However, it doesn't describe pagination behavior for the limit parameter or how results are ordered.

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 the core purpose and the specific values, followed by usage timing and cost note. Every clause earns its place with no filler.

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?

For a simple, read-only lookup tool with a fully documented schema, the description covers purpose, context, and cost. Minor gaps like return ordering or the absence of an output schema note are acceptable given the tool's simplicity.

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 coverage is 100% with clear descriptions for both limit (defaults to 200, max 500) and search (case-insensitive name filter). The description adds no parameter-specific detail beyond the schema, so the baseline of 3 is correct.

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 states a specific verb and resource ('List available supported countries') and even enumerates the known values (Finland, Sweden, Estonia) with their purpose (IDs for countryId filters). This distinguishes it from lookup siblings like list_industries or list_job_functions.

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?

It clearly states when to use it ('when building geography-based segments before calling segment/count tools'), naming the downstream tools. It doesn't give explicit exclusions, but the 'before segment/count tools' framing establishes the workflow context well.

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

list_industriesList IndustriesA
Read-only
Inspect

List detailed industry codes for a specific country. Each country uses its own classification system: Finland (countryId -2460) uses TOL 2025, Sweden (countryId -7520) uses SNI 2025, Estonia (countryId -2330) uses EMTAK 2025. Always pass countryId matching the country you are segmenting — the code sets differ between countries. Returns string IDs (e.g. "62100" = Computer programming in Finland) required for the industryCodes filter on segment tools. The industryCodes filter matches by prefix, so shorter IDs (e.g. "62") match every industry whose code starts with them. Use offset to paginate large result sets (e.g. first call offset: 0, next offset: 200) or search by English names, codes, and Finnish/Swedish names where available (e.g. "programming", "ohjelmisto", or "datakonsult"). Free to call; does not consume account balance.

NameRequiredDescriptionDefault
limitNoMaximum number of rows to return. Defaults to 200.
offsetNoZero-based offset for paginating deterministic results. Use with limit.
searchNoOptional case-insensitive filter on the country's English and localized Finnish or Swedish industry names, plus industry codes (e.g. "programming", "ohjelmisto", or "datakonsult").
countryIdYesCountry whose industry classification to return. Each country uses a different system: -2460 = Finland (TOL 2025), -7520 = Sweden (SNI 2025), -2330 = Estonia (EMTAK 2025). Use list_countries to get valid country IDs.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds meaningful non-annotation behavior: prefix-matching semantics of the returned codes, pagination via offset/limit, and the cost profile ('Free to call; does not consume account balance').

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

Conciseness4/5

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

Front-loaded with purpose, then rules, examples, and cost. It is dense and slightly long, but nearly every sentence carries actionable information and none is redundant with the schema.

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?

With no output schema, the description carries the return-shape burden and does so by specifying string IDs and an example. It also covers the pagination, search, and cost concerns an agent needs before calling.

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 coverage is 100%, so the baseline is 3, but the description adds real value: it explains the downstream purpose of countryId, gives concrete code examples ('62100' = Computer programming in Finland), and shows search terms and offset stepping that go beyond the schema's field docs.

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?

States a specific verb+resource ('List detailed industry codes for a specific country') and immediately scopes it by country classification system. It is clearly distinguishable from siblings like list_industry_groups and list_countries through the classification-system detail.

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?

Explains when to use it (to obtain IDs required for the industryCodes filter on segment tools) and gives a hard rule ('Always pass countryId matching the country you are segmenting'). It stops short of explicitly naming list_industry_groups as the alternative for grouped views, so it's clear context without full alternative routing.

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

list_industry_groupsList Industry GroupsA
Read-only
Inspect

List available high-level industry groups with IDs to use in industryGroupIds filters (e.g. Information and communication). Use when broad sector filtering is needed. Free to call; does not consume account balance.

NameRequiredDescriptionDefault
limitNoMaximum number of rows to return. Defaults to 200.
searchNoOptional case-insensitive name filter.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely new operational context — 'Free to call; does not consume account balance' — which an agent needs when choosing between candidate calls. It does not describe pagination or default page size behavior, though the schema covers limit.

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?

Three short sentences, front-loaded with the resource and the reason for calling, with the cost note last. No filler and nothing that restates 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?

There is no output schema, so the description usefully sketches the return shape (groups plus their IDs) and gives an example. It does not mention that results may be large or paginated via limit, but for a simple free lookup this is nearly complete.

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 both limit and search fully documented in the schema, so the baseline is 3. The description adds no filter syntax, matching rules, or search behavior beyond what the schema already states.

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?

States a specific verb (List) and resource (high-level industry groups) and explains what the returned IDs are for ('use in industryGroupIds filters'), with a concrete example value. The implicit contrast with the finer-grained list_industries sibling is present via 'high-level' but never made explicit.

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?

Gives a clear condition: 'Use when broad sector filtering is needed.' That tells the agent when this tool fits, but it does not name the alternative (list_industries) or state when to prefer that one instead, so the routing decision is left partly to inference.

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

list_job_functionsList Job FunctionsA
Read-only
Inspect

List available job functions with IDs to use in jobFunctionIds filters. These are role/function categories (e.g. Sales, IT, HR) and are typically more specific than main responsibility areas. Free to call; does not consume account balance.

NameRequiredDescriptionDefault
limitNoMaximum number of rows to return. Defaults to 200.
searchNoOptional case-insensitive name filter.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral context not present in structured fields: 'Free to call; does not consume account balance,' which matters for an agent budgeting calls.

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?

Three tight sentences: purpose and output first, then the specificity clarification, then the cost note. No filler, and the most important information (what it returns and why) is front-loaded.

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?

For a simple, zero-required-param read tool with a fully documented schema and no output schema, the description covers purpose, category semantics, and cost. Minor gaps like ordering or pagination behavior are handled by the schema's limit parameter, so nothing essential is missing.

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%, so limit and search are already fully documented in the schema. The description adds no syntax or format detail beyond that, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('List available job functions with IDs') and explains the downstream purpose (use in jobFunctionIds filters). It also distinguishes itself conceptually from the related sibling category by noting these are 'typically more specific than main responsibility areas.'

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?

Explains the context in which the output is consumed ('IDs to use in jobFunctionIds filters') and positions it relative to main responsibility areas, giving the agent a clear sense of when this list is the right one. It stops short of naming an explicit alternative tool to call instead.

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

list_keyword_categoriesList Keyword CategoriesA
Read-only
Inspect

List all customer-facing company keyword categories (the main taxonomy level) with canonical names and Finnish, Swedish, and English labels. Call this when the user requests a broad business category or when you need to narrow a subcategory search. Copy a returned name into keywordCategoryFilter with level "main". Do not use a localized label as the filter name. This tool does not return internal classification keywords. Free to call; does not consume account balance.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations cover the read-only/non-destructive profile, and the description adds real behavioral context beyond them: it excludes internal classification keywords from the result, and it states the call is free and does not consume account balance. It also discloses what is returned (canonical names plus Finnish/Swedish/English labels).

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?

Front-loaded with what is returned, then when to call it, then the filter-usage caveat, then the exclusions and cost note. Every sentence carries actionable information with no padding.

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?

There is no output schema, so the description carries the burden of describing results, and it does so (taxonomy level, canonical names, three label languages). For a zero-parameter lookup with annotations already covering safety, nothing an agent needs is missing.

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 tool takes zero parameters, so the schema has nothing to document and 4 is the baseline. The description does usefully explain how a returned name feeds keywordCategoryFilter with level "main", but that concerns other tools rather than this one's inputs.

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?

States a specific verb (List) and resource (customer-facing company keyword categories) and pins down the scope as 'the main taxonomy level,' with the three label languages named. An agent can distinguish this from search_keyword_subcategories without opening either schema.

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?

Gives a clear triggering condition: user asks for a broad business category, or you need to narrow a subcategory search. It also warns against using a localized label as the filter name. The sibling search_keyword_subcategories is only alluded to ('subcategory search') rather than named, so routing is slightly less explicit than a 5.

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

list_main_responsibility_areasList Main Responsibility AreasA
Read-only
Inspect

List available main responsibility areas with IDs to use in mainResponsibilityAreaIds filters (e.g. Sales, IT, Marketing). Use for broad functional-role filtering. Free to call; does not consume account balance.

NameRequiredDescriptionDefault
limitNoMaximum number of rows to return. Defaults to 200.
searchNoOptional case-insensitive name filter.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so the safety profile is known. The description adds the non-obvious behavioral fact that the call is free and does not consume account balance, which is valuable purchasing-related context an agent could not infer from annotations. It doesn't describe pagination or result ordering, but that is a minor gap.

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 tight sentences, zero waste. The core purpose and downstream use case are front-loaded, with the cost note trailing. Every sentence earns its place.

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?

For a simple read-only lookup list with full schema coverage and no output schema, the description covers purpose, usage context, and cost behavior sufficiently. The main omission is any indication of result format or ordering, but this is minor given the tool's simplicity.

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 coverage is 100% and both parameters (limit, search) are fully documented in the schema including defaults and bounds. The description adds no parameter-level detail beyond what the schema provides, so baseline 3 applies.

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?

States a specific verb and resource ('List available main responsibility areas'), explains they carry IDs for filtering, and gives examples (Sales, IT, Marketing). It is clearly distinguishable from siblings like list_industries or list_job_functions by its functional-role scope.

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?

Explicitly says when to use it ('Use for broad functional-role filtering.') and how the returned IDs feed into 'mainResponsibilityAreaIds filters', making the downstream usage pattern concrete. It also states the cost condition ('Free to call').

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

resolve_company_by_domainResolve Company by DomainA
Read-only
Inspect

Resolve companies by exact website domain. Use when you have a verified, exact domain and want a direct lookup. Returns a single resolved company if exactly one match is found (resolvedCompany field set, candidates omitted); if multiple companies share the domain, returns isAmbiguous: true with candidates array. Returns empty results if domain doesn't match exactly. If you need ranking across multiple criteria or have ambiguous input, use find_companies instead. Example: resolve_company_by_domain({ domain: "dynava.com", limit: 5 }). Consumes the account's shared subscription balance (the same balance used by subscribed Excel exports and REST API usage: included monthly contacts first, then prepaid top-up contacts). A completed call always costs at least 1 unit. Costs 1 company unit per returned company.

NameRequiredDescriptionDefault
limitNoMaximum number of companies to return. Defaults to 20 and is capped at 20. Use a small value such as 3 when only sample rows are needed.
domainYesThe domain to search for, e.g. "acme.com". Matched against company website URLs.
countryIdNoOptional country ID limiting the search to one country. Useful when the same domain exists on companies in several countries. Get IDs from list_countries.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnlyHint, destructiveHint false), and the description adds substantial behavior beyond them: exact-match-only semantics, the single-match vs. ambiguous-candidate vs. empty-result outcomes with field names, and a detailed cost model (shared subscription balance, minimum 1 unit, 1 unit per returned company). This is unusually rich disclosure for a read tool.

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

Conciseness4/5

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

Front-loaded with the core purpose and routing, then return semantics, then cost. Dense but every clause carries information. Slightly long due to the cost-model sentence and example, but nothing is wasted.

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?

With no output schema, the description compensates by describing return shape (resolvedCompany set, candidates omitted, isAmbiguous flag), empty-result behavior, and billing impact. Nothing an agent needs to invoke it correctly is missing.

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%, so all three parameters are already documented in the schema. The description adds only a usage example ('domain: dynava.com, limit: 5') and no syntax or format detail beyond it, so baseline 3 is appropriate.

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?

States a specific verb+resource (resolve companies by exact website domain) and explicitly scopes it as a direct exact-match lookup. It names the sibling find_companies and the condition that differentiates them, so an agent can distinguish it from alternatives without opening the schema.

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?

Explicitly states when to use ('verified, exact domain... direct lookup') and when not to ('if you need ranking across multiple criteria or have ambiguous input, use find_companies instead'). The alternative and the selecting condition are both named.

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

search_keyword_subcategoriesSearch Keyword SubcategoriesA
Read-only
Inspect

Search customer-facing company keyword subcategories using canonical, Finnish, Swedish, or English wording. Use search for a specific business activity such as "sopimusvalmistus". Optionally pass canonical mainCategories from list_keyword_categories to narrow ambiguous or broad searches. Copy a returned name into keywordCategoryFilter with level "sub". mainCategories restrict discovery only; do not add them to the segment filter unless the user also requested those broad categories. This tool does not search or return raw keyword text. Free to call; does not consume account balance.

NameRequiredDescriptionDefault
limitNoMaximum subcategories to return. Defaults to 200 and cannot exceed 500.
offsetNoZero-based offset for deterministic pagination. Defaults to 0.
searchNoOptional business-activity term matched against canonical, Finnish, Swedish, and English subcategory labels. At least search or mainCategories is required.
mainCategoriesNoOptional canonical main-category names returned by list_keyword_categories. Matches subcategories under any supplied category. This narrows discovery only and does not add category filters.

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, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds genuinely useful non-obvious traits beyond the annotations: it does not return raw keyword text, and it is free to call and does not consume account balance. It does not, however, address pagination behavior despite exposing limit/offset.

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

Conciseness4/5

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

The description is dense but front-loaded, leading with what the tool searches and what terms it accepts before moving to narrowing options and caveats. Every sentence carries information, though the workflow sentence about keywordCategoryFilter and level "sub" is a slight expansion beyond the tool's own boundary.

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?

With no output schema, the description compensates by telling the agent what is and is not returned (names suitable for keywordCategoryFilter, no raw keyword text) and by covering cost. What remains thin is pagination and result-shape detail, which the agent would have to infer from the limit/offset parameters.

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 coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema by clarifying the interaction between search and mainCategories ('mainCategories restrict discovery only; do not add them to the segment filter unless the user also requested those broad categories'). This disambiguates a genuinely easy-to-misuse parameter relationship.

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?

States a specific verb ('Search') and resource ('customer-facing company keyword subcategories') and immediately notes the multilingual matching capability. It is clearly distinguishable from the sibling list_keyword_categories, which supplies the mainCategories input rather than the subcategory results.

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?

Gives explicit when-to-use guidance ('Use search for a specific business activity such as "sopimusvalmistus"') and names the alternative input path (mainCategories from list_keyword_categories) for ambiguous or broad searches. It also prescribes the downstream workflow: copy the returned name into keywordCategoryFilter with level "sub".

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

service_infoService InformationA
Read-only
Inspect

Return service pricing, setup steps, multi-user policy, and the authenticated account subscription/quota status.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered by structured data. The description adds genuinely useful context beyond that: it discloses the return payload categories and flags that the quota/subscription portion is scoped to the authenticated account.

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?

A single dense sentence with zero filler, front-loaded on the verb and listing the four payload categories in priority order. Every clause earns its place.

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?

With no parameters and no output schema, the description carries the burden of describing the response, and it does so by naming the four data categories returned. It is close to sufficient; minor gaps remain about whether these are separate sections, formatting, or how quota values are expressed.

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 tool takes zero parameters, which sets the baseline at 4. Nothing in the schema needs clarifying, and the description correctly spends no words on inputs.

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 uses a specific verb ('Return') and enumerates exactly what is returned: pricing, setup steps, multi-user policy, and account subscription/quota status. This clearly distinguishes it from every sibling (which are all list/find/count lookups over company, contact, or taxonomy data), though it never names an alternative to route against.

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?

Usage is implied by the content list — an agent can infer it should call this when it needs pricing, onboarding steps, or the account's quota/subscription state. There is no explicit when-to-use statement, no preconditions, and no mention of alternatives (e.g., describe_tools) for related information.

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. 1 tool update
    • Changedfind_contact_by_email1 field changed
      • changedInput schema / properties / email / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
  2. 5 tool updates
    • Changedcount_company_segment2 fields changed
      • changedInput schema / properties / companyContactFilter / description
        Previous value: -"Company-level contact-availability filter: \"all\" = include companies regardless of contact availability, \"email\" = at least one contact with valid email, \"phone\" = at least one contact with mobile phone, \"both\" = at least one contact with both valid email and phone. Defaults to \"email\". Compare with contactInfoFilter on contact tools, which filters each returned contact directly."New value: +"Company-level contact-availability filter: \"all\" = include companies regardless of contact availability, \"email\" = at least one contact with valid email, \"phone\" = at least one contact with mobile phone, \"both\" = at least one contact with both valid email and phone, \"either\" = at least one contact with a valid email, a phone number, or both. Defaults to \"email\". Compare with contactInfoFilter on contact tools, which filters each returned contact directly."
      • changedInput schema / properties / companyContactFilter / enum
        Previous value: -[
        -  "all",
        -  "email",
        -  "phone",
        -  "both"
        -]New value: +[
        +  "all",
        +  "email",
        +  "phone",
        +  "both",
        +  "either"
        +]
    • Changedcount_contact_segment2 fields changed
      • changedInput schema / properties / contactInfoFilter / description
        Previous value: -"Contact-level required info filter: \"email\" (default) = each returned contact must have valid email, \"phone\" = must have phone number, \"both\" = must have both. Use companyContactFilter on company-segment tools when filtering companies by whether they have at least one matching contact."New value: +"Contact-level required info filter: \"email\" (default) = each returned contact must have valid email, \"phone\" = must have phone number, \"both\" = must have both, \"either\" = must have a valid email, a phone number, or both. Use companyContactFilter on company-segment tools when filtering companies by whether they have at least one matching contact."
      • changedInput schema / properties / contactInfoFilter / enum
        Previous value: -[
        -  "email",
        -  "phone",
        -  "both"
        -]New value: +[
        +  "email",
        +  "phone",
        +  "both",
        +  "either"
        +]
    • Changedlist_company_contacts2 fields changed
      • changedInput schema / properties / contactInfoFilter / description
        Previous value: -"Filter contacts by required info: \"email\" (default) = must have valid email, \"phone\" = must have phone number, \"both\" = must have both."New value: +"Filter contacts by required info: \"email\" (default) = must have valid email, \"phone\" = must have phone number, \"both\" = must have both, \"either\" = must have a valid email, a phone number, or both."
      • changedInput schema / properties / contactInfoFilter / enum
        Previous value: -[
        -  "email",
        -  "phone",
        -  "both"
        -]New value: +[
        +  "email",
        +  "phone",
        +  "both",
        +  "either"
        +]
    • Changedlist_company_segment2 fields changed
      • changedInput schema / properties / companyContactFilter / description
        Previous value: -"Company-level contact-availability filter: \"all\" = include companies regardless of contact availability, \"email\" = at least one contact with valid email, \"phone\" = at least one contact with mobile phone, \"both\" = at least one contact with both valid email and phone. Defaults to \"email\". Compare with contactInfoFilter on contact tools, which filters each returned contact directly."New value: +"Company-level contact-availability filter: \"all\" = include companies regardless of contact availability, \"email\" = at least one contact with valid email, \"phone\" = at least one contact with mobile phone, \"both\" = at least one contact with both valid email and phone, \"either\" = at least one contact with a valid email, a phone number, or both. Defaults to \"email\". Compare with contactInfoFilter on contact tools, which filters each returned contact directly."
      • changedInput schema / properties / companyContactFilter / enum
        Previous value: -[
        -  "all",
        -  "email",
        -  "phone",
        -  "both"
        -]New value: +[
        +  "all",
        +  "email",
        +  "phone",
        +  "both",
        +  "either"
        +]
    • Changedlist_contact_segment2 fields changed
      • changedInput schema / properties / contactInfoFilter / description
        Previous value: -"Contact-level required info filter: \"email\" (default) = each returned contact must have valid email, \"phone\" = must have phone number, \"both\" = must have both. Use companyContactFilter on company-segment tools when filtering companies by whether they have at least one matching contact."New value: +"Contact-level required info filter: \"email\" (default) = each returned contact must have valid email, \"phone\" = must have phone number, \"both\" = must have both, \"either\" = must have a valid email, a phone number, or both. Use companyContactFilter on company-segment tools when filtering companies by whether they have at least one matching contact."
      • changedInput schema / properties / contactInfoFilter / enum
        Previous value: -[
        -  "email",
        -  "phone",
        -  "both"
        -]New value: +[
        +  "email",
        +  "phone",
        +  "both",
        +  "either"
        +]
  3. 17 tool updates
    • First observedcount_company_segment
    • First observedcount_contact_segment
    • First observeddescribe_tools
    • First observedfind_companies
    • First observedfind_contact_by_email
    • First observedlist_company_contacts
    • First observedlist_company_segment
    • First observedlist_contact_segment
    • First observedlist_countries
    • First observedlist_industries
    • First observedlist_industry_groups
    • First observedlist_job_functions
    • First observedlist_keyword_categories
    • First observedlist_main_responsibility_areas
    • First observedresolve_company_by_domain
    • First observedsearch_keyword_subcategories
    • First observedservice_info

Publisher details

Operator
Vine Oy · Publisher source
Vendor relationship
First-party · Publisher source
Restrictions
Free trial, paid plans · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for Nordic company registries. Verify companies, check board members, signing authority, and financial data across Norway, Denmark, Finland, and Sweden using official public APIs. 23 tools covering search, details, roles, and batch lookups.
    19
    14
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to search B2B people and companies, enrich contacts with verified emails and mobile phone numbers via waterfall enrichment across 25+ providers, and export results as CSV or JSON. Supports prospecting, org mapping, candidate sourcing, and outreach workflows through OAuth-authenticated remote access from any MCP-compatible client.
    10
    MIT
  • A
    license
    Not graded
    quality
    D
    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.
    6 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources