Skip to main content
Glama

getsonar-mcp

PyPI version MCP Registry License: MIT

MCP server for SONAR: KYB due diligence on vendors, partners and resellers, callable from your AI assistant.

Ask Claude, Cursor or Windsurf to check a company and it gets back registry records, sanctions and PEP matches, ICIJ Offshore Leaks hits and adverse media, each with a link to the source.

SONAR is a due-diligence aid built on public records. It is not a regulated AML/KYC provider and its output is not a compliance decision: a human reviews the findings.

Features

  • Company registries: 13 national business registries (UK Companies House and 12 more) for legal name, number, status, address and officers

  • Sanctions and PEP screening: native OFAC, UN, UK OFSI and Swiss SECO lists plus the OpenSanctions aggregator

  • ICIJ Offshore Leaks: Panama, Paradise and Pandora Papers, Bahamas Leaks

  • Regulatory registers: UK FCA Register, UK Disqualified Directors, The Gazette insolvency notices

  • Adverse media: 10-year lookback on news, complaints and reviews

  • Two call shapes: fast structured findings (sync, 30-90 s) or a full written report (async, about 3 min)

Works with Claude Desktop, Claude Code, Cursor, Windsurf and any other Model Context Protocol client. Listed in the official MCP Registry as io.github.Ivanolegvak/sonar-mcp.

Related MCP server: Concept-4 Compliance Engine

Pricing

The API is pay per call:

Call

Price

/findings (kyb_findings, adverse_media)

€0.40

/run (kyb_run_submit)

€2.00

check_report_status, account_balance

free

Your first API call is free (any endpoint). After that, calls are paid from a prepaid balance: top up from €5 at getsonar.report/developer/keys. Plans and the web app's free tier are on getsonar.report/pricing.

Get an API key

  1. Sign up at getsonar.report

  2. Open Developer → API keys

  3. Click Create API Key and copy the sk-sonar-... key

Installation

You need uv (it provides uvx). Nothing else to install: uvx getsonar-mcp fetches and runs the latest release. With pipx instead: pipx install getsonar-mcp, then use getsonar-mcp as the command.

The key goes in the SONAR_API_KEY environment variable of the server process.

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "sonar": {
      "command": "uvx",
      "args": ["getsonar-mcp"],
      "env": {
        "SONAR_API_KEY": "sk-sonar-YOUR_KEY_HERE"
      }
    }
  }
}

Restart Claude Desktop. The five SONAR tools appear in the tools menu.

Claude Code

claude mcp add sonar --env SONAR_API_KEY=sk-sonar-YOUR_KEY_HERE -- uvx getsonar-mcp

Add --scope user to make it available in every project. Check it with claude mcp list.

Cursor

Edit ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):

{
  "mcpServers": {
    "sonar": {
      "command": "uvx",
      "args": ["getsonar-mcp"],
      "env": {
        "SONAR_API_KEY": "sk-sonar-YOUR_KEY_HERE"
      }
    }
  }
}

Windsurf

Edit ~/.codeium/windsurf/mcp_config.json (or Windsurf Settings → Cascade → MCP servers → View raw config):

{
  "mcpServers": {
    "sonar": {
      "command": "uvx",
      "args": ["getsonar-mcp"],
      "env": {
        "SONAR_API_KEY": "sk-sonar-YOUR_KEY_HERE"
      }
    }
  }
}

Other clients (Continue.dev, Zed, Cline, ...) take the same command, args and env; see your client's MCP docs for where the config lives.

Configuration

Variable

Default

Purpose

SONAR_API_KEY

(required)

Your sk-sonar-... API key

SONAR_API_BASE

https://api.getsonar.report

Override for staging or self-hosted SONAR

SONAR_API_TIMEOUT

120

Per-request timeout in seconds

SONAR_MCP_LOG_LEVEL

INFO

DEBUG for verbose logs (stderr)

Tools

Tool

What it does

Price

kyb_findings

Fast KYB check: structured findings with sources

€0.40

kyb_run_submit

Submit a full KYB report, returns a run_id

€2.00

adverse_media

Negative news, complaints and reviews

€0.40

check_report_status

Poll a report submitted with kyb_run_submit

free

account_balance

Balance and free trial calls remaining

free

All tools return Markdown for the model to read.

kyb_findings

Input:

{ "company_name": "Tesco PLC", "website": "https://www.tesco.com" }

company_name is required. website is optional but strongly recommended: it separates the company from unrelated ones sharing the name.

Output (abridged, values illustrative):

# KYB Quick Lookup: Tesco PLC
Sources checked: 42 · Processing time: 41250ms
**Found data**: registry, regulatory, adverse_media
**Checked, clean** (no findings — collector ran): sanctions, offshore_leaks

## Registry (confidence: HIGH)
- **TESCO PLC (00445790), active**
  Public limited company
  Source: https://find-and-update.company-information.service.gov.uk/company/00445790

kyb_run_submit

Input: same as kyb_findings. Output:

Report submitted.
- Run ID: `3f6c...`
- Status: pending
- Estimated time: 90 seconds

Call `check_report_status` with run_id='3f6c...' and agent_type='kyb-diligence' in 30-60 seconds to get the result.

check_report_status

Input:

{ "run_id": "3f6c...", "agent_type": "kyb-diligence" }

agent_type is kyb-diligence (default) or adverse-media. While the report runs it answers Report status: running. Still processing — check again in 15-30 seconds.; when done it returns a compact summary: overall verdict and risk level, company details, a PASS / REVIEW / FLAG table of checks, risk flags, directors and sanctions coverage.

adverse_media

Input: same as kyb_findings. Output: the same Markdown shape as kyb_findings, limited to news, complaints and review sites (no sanctions or PEP screening).

account_balance

Input: none. Output:

# Account usage — 2026-10
- Calls this month: **0**
- Free trial calls remaining: **1** (granted once at signup)
- Pre-paid balance: **€5.00**

Example prompts

"Run a KYB check on Tesco PLC (tesco.com) and tell me if anything needs a closer look."

The model calls kyb_findings, reads the structured findings and points out sanctions, register or adverse-media hits with their sources.

"Get a full KYB report on Wise Payments Limited and summarise it when it's done."

The model calls kyb_run_submit, then check_report_status until the report is complete.

"How many free trial calls do I have left?"

The model calls account_balance.

Verify your install

The MCP Inspector starts the server and lists its tools:

SONAR_API_KEY=sk-sonar-YOUR_KEY_HERE npx @modelcontextprotocol/inspector uvx getsonar-mcp

Listing tools works without a key; calling one needs a valid key.

Use the API without MCP

The MCP server is a thin client over the SONAR REST API. To call it directly:

export SONAR_API_KEY=sk-sonar-YOUR_KEY_HERE

# Structured findings: sync, 30-90 s, €0.40
curl -X POST 'https://api.getsonar.report/v1/agents/kyb-diligence/findings' \
  -H "X-API-Key: $SONAR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"company_name":"Tesco PLC","website":"https://www.tesco.com"}'

# Full report: async, about 3 min, €2.00; returns {"run_id": ..., "status": "pending"}
curl -X POST 'https://api.getsonar.report/v1/agents/kyb-diligence/run' \
  -H "X-API-Key: $SONAR_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"company_name":"Tesco PLC","website":"https://www.tesco.com"}'

# Poll until status is "completed"
curl 'https://api.getsonar.report/v1/agents/kyb-diligence/run/RUN_ID' -H "X-API-Key: $SONAR_API_KEY"

# Usage, balance and free trial calls left
curl 'https://api.getsonar.report/v1/usage' -H "X-API-Key: $SONAR_API_KEY"

Agents: kyb-diligence (registries, sanctions, PEP, UBOs, adverse media) and adverse-media (negative news only). The website field must be an http:// or https:// URL. Full OpenAPI spec: api.getsonar.report/docs. Developer guide: getsonar.report/developers.

Troubleshooting

Tools don't appear: check the config file is valid JSON, restart the client, and run uvx --version in a terminal to confirm uv is installed.

401 Unauthorized: SONAR_API_KEY is missing or wrong. Check it at getsonar.report/developer/keys.

402 Payment Required: your free first call is used and your balance is €0. Top up from €5 at getsonar.report/developer/keys.

Timeouts: raise SONAR_API_TIMEOUT. A full report can take 3+ minutes; poll with check_report_status rather than waiting on one call.

uvx getsonar-mcp runs an old version: uvx caches environments. Run uvx getsonar-mcp@latest once, or uv cache clean getsonar-mcp.

Wrong company in the results: pass website. Short brand names collide with unrelated companies in news search; SONAR drops those collisions when it knows the domain.

Development

uv sync
uv run pytest        # stdio smoke test against a fake API, no network

Maintainers: ARCHITECTURE.md covers the module layout and the stdio / HTTP transports; DIRECTORIES.md covers releasing and listing in MCP directories.

Support

Email ivan@getsonar.report or open an issue on GitHub.

License

MIT, see LICENSE.

Available Tools

5 tools
account_balanceA
Read-only

Check API usage, free trial calls remaining and pre-paid balance.

Useful for AI agents to decide whether the next call will be free, paid, or fail with insufficient balance. Every new account gets 3 free trial API calls (any endpoint, granted once at signup, not monthly). After that, /findings calls deduct EUR 0.40 and /run calls deduct EUR 2.00 from the balance. Free (no charge).

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/openWorldHint=false/destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral facts the annotations cannot convey: the 3-call trial is granted once at signup and is not monthly, per-endpoint pricing (EUR 0.40 for /findings, EUR 2.00 for /run), and that this call itself is free.

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 purpose and decision guidance are front-loaded, and the pricing/trial details that follow are the reason to read further. Minor waste in the trailing 'Free (no charge).' fragment and inconsistent formatting keep it from a 5.

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 an output schema present, the description needn't describe return values, and it covers the remaining unknowns an agent needs: what is measured, the cost model, and the one-time trial rule. Nothing material is missing for correct invocation or interpretation.

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 baseline of 4 applies and the schema fully covers the empty argument object. Nothing in the description is needed to clarify 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?

The description names a specific verb and resource set ('Check API usage, free trial calls remaining and pre-paid balance'), which is immediately distinguishable from the KYB/findings/adverse-media siblings. An agent knows exactly what information this returns 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 Guidelines4/5

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

It gives explicit decision context: 'Useful for AI agents to decide whether the next call will be free, paid, or fail with insufficient balance.' That is a clear when-to-use trigger, though it names no alternatives or exclusions (e.g., no guidance on whether to cache the result).

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

adverse_mediaA
Read-only

Screen a company for negative news, complaints and bad reviews.

    Checks news sources (Google News + adverse-media search, 10-year
    lookback), BBB, Clutch.co, Yelp, App Store, Facebook and Reddit.
    No sanctions/PEP screening: use kyb_findings for that.
    EUR 0.40 per call after the 3 free trial API calls.

    Args:
        company_name: Company to screen
        website: Company website URL for accuracy
    
NameRequiredDescriptionDefault
websiteNo
company_nameYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (readOnly/openWorld/non-destructive), the description discloses the source set, the 10-year lookback window, the cost per call and the free-trial quota — commercial and scope behavior the agent could not infer from structured fields. It also names the coverage boundary (no sanctions/PEP), preventing false assumptions of completeness.

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 purpose and the exclusion, then sources, then cost, then args — a logical order with no filler sentences. The Args block is slightly redundant for a two-parameter tool, but it is genuinely compensating for an undocumented schema.

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?

Annotations cover safety, an output schema covers return values, and the description adds scope, sources, lookback and pricing, so an agent has what it needs to call correctly. The only residual gap is how to interpret or act on borderline findings, which the output schema partly handles.

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 0%, so the description must carry the parameter burden, and it does explain both: company_name as the entity to screen and website as an accuracy aid. The guidance is functional but thin — it doesn't say what input format the website expects (full URL vs domain) or what happens when company_name is ambiguous.

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 ('Screen a company for negative news, complaints and bad reviews') and enumerates the concrete sources checked, so an agent knows exactly what evidence the tool gathers. It also explicitly separates itself from kyb_findings, making it distinguishable from its closest sibling without opening any 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 an explicit exclusion plus a redirect: 'No sanctions/PEP screening: use kyb_findings for that,' which is exactly the when-not/alternative guidance an agent needs. The pricing note ('EUR 0.40 per call after the 3 free trial API calls') further informs the decision to invoke it.

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

check_report_statusA
Read-only

Poll the status of an async report submitted via kyb_run_submit.

    Returns a compact summary of the report when status='completed'.
    Reports typically complete in 60-180s. Free (no charge).

    Args:
        run_id: The run_id returned by kyb_run_submit
        agent_type: One of "kyb-diligence", "adverse-media"
    
NameRequiredDescriptionDefault
run_idYes
agent_typeNokyb-diligence

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/destructive=false, so the safety profile is covered; the description adds genuinely new behavior: no charge, typical 60-180s completion, and that a compact summary is returned only at status='completed'. It omits the set of possible status values, which would be the natural next disclosure for a polling 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 purpose, then timing/cost, then args — efficient and appropriately sized. Minor redundancy in "Free (no charge)" and the Args block restates the schema keys, but nothing is bloated.

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 lightweight read-only poll with an output schema (which relieves it of explaining return shape), the description covers cost, latency, and both parameters. Only the status lifecycle (what values exist, which are terminal) is missing for full completeness.

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 0%, so the description must carry the load and largely does: run_id is identified as coming from kyb_run_submit, and agent_type's accepted values ("kyb-diligence", "adverse-media") are supplied even though the schema has no enum. It doesn't explain what agent_type changes in the response or whether it must match the original submission.

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 (poll) and resource (status of an async report) and ties it directly to the producing tool, kyb_run_submit. An agent can distinguish this from kyb_findings/adverse_media, which retrieve results rather than poll submission state.

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?

Makes the usage context explicit: only for runs submitted via kyb_run_submit, and gives the expected wait window (60-180s) that governs polling. It does not name when to stop polling or point to the sibling result tools once status is completed, so it stops short of full routing guidance.

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

kyb_findingsA
Read-only

Run a fast KYB (Know Your Business) check on a company.

    Returns structured findings with source links: registry record
    (legal name, number, status, address, officers), sanctions and PEP
    matches, ICIJ Offshore Leaks hits, regulatory registers (e.g. FCA
    for UK firms) and adverse media. Synchronous, 30-90s, no AI-written
    summary. EUR 0.40 per call after the 3 free trial API calls.

    Args:
        company_name: Legal name of the company (e.g. "Tesco PLC")
        website: Company website URL, strongly recommended for disambiguation
    
NameRequiredDescriptionDefault
websiteNo
company_nameYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnly/openWorld annotations, it discloses latency (30-90s synchronous), pricing (EUR 0.40/call after 3 free trial calls), that no AI-written summary is produced, and the exact finding categories returned with source links. That cost and timing profile is precisely the operational context an agent needs before invoking a paid external call.

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 the action, then the returned findings, then operational facts (latency, price), then Args. Each block adds distinct information with no filler or repetition of 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?

For a paid external lookup with an output schema already covering return shape, the description supplies everything else an agent needs: what is checked, expected duration, cost model, trial allowance, and both parameter meanings. Nothing material is left ambiguous.

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 0%, so the description carries the burden and it does: it labels company_name as the legal name with a concrete example ("Tesco PLC") and explains website's purpose as disambiguation plus that it is strongly recommended. It stops short of specifying accepted URL formats or what happens if a wrong-name match occurs, which keeps it from 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 ("Run a fast KYB check on a company") and enumerates exactly what the check produces (registry record, sanctions/PEP, ICIJ, regulatory registers, adverse media). The word "Synchronous" plus the per-call pricing signals that this is the direct-run tool rather than the async sibling kyb_run_submit, so an agent can separate them 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 Guidelines3/5

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

It implies usage (a company lookup with a legal name and an optional disambiguating website, "strongly recommended") but never says when to pick this over kyb_run_submit or check_report_status, and there are no exclusions. The trial/quota note hints at cost-sensitive routing but leaves the sibling choice to inference.

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

kyb_run_submitA

Submit a full KYB due-diligence report (async).

    Returns a run_id immediately. Poll with check_report_status after
    1-3 minutes. The report has everything kyb_findings returns plus a
    PASS / REVIEW / FLAG verdict per check, risk flags, a written
    summary and recommended next steps for a human reviewer.
    EUR 2.00 per call after the 3 free trial API calls.

    Args:
        company_name: Legal name of the company
        website: Company website URL, strongly recommended
    
NameRequiredDescriptionDefault
websiteNo
company_nameYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Beyond the annotations (readOnly=false, openWorld=true, destructive=false), the description discloses the async contract, the 1-3 minute polling latency, and per-call billing — real behavioral traits the annotations do not carry. It doesn't say whether a failed run is charged or how long run_ids stay valid, which keeps it from a 5.

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 action and the async/polling contract before listing args, and every sentence carries information. The docstring-style 'Args:' block is slightly redundant formatting but not wasteful.

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?

Even though an output schema exists, the description usefully previews the report contents (verdicts, risk flags, summary, next steps) and completes the async workflow picture with the polling step. An agent has everything needed to call it and handle the result correctly.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate, and it does document both parameters: company_name as 'Legal name' and website as the URL, plus the useful qualifier 'strongly recommended' for a parameter that is optional with an empty-string default. Only minor format guidance (e.g., scheme/domain expectations) is missing.

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 ('Submit a full KYB due-diligence report') and immediately marks it async. It also distinguishes itself from the sibling kyb_findings by explaining the report contains 'everything kyb_findings returns plus' verdicts, so an agent can tell the two apart 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 Guidelines5/5

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

Explicitly routes follow-up behavior: 'Poll with check_report_status after 1-3 minutes', naming the alternative tool and the timing condition. It also discloses the pricing gate (EUR 2.00 per call after 3 free trial calls), which tells the agent when the call is costly to invoke.

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. 5 tool updates
    • First observedaccount_balance
    • First observedadverse_media
    • First observedcheck_report_status
    • First observedkyb_findings
    • First observedkyb_run_submit

TDQS

A4.3/5.0

Scored across 5 tools

Disambiguation4/5

The tools mostly target distinct workflows: fast synchronous findings, async full report submission, adverse media screening, status polling, and balance checking. The main possible confusion is between kyb_findings and kyb_run_submit, since both perform KYB checks, though their descriptions clarify speed, cost, and async-report differences.

Naming Consistency3/5

Names are readable but follow mixed conventions: kyb_run_submit and check_report_status are verb-oriented, while kyb_findings, adverse_media, and account_balance are noun-oriented. The shared kyb_ prefix helps only partially, so the set lacks a single predictable pattern.

Tool Count5/5

Five tools is well scoped for a KYB API: submission, fast findings, adverse media, polling, and balance. Each tool has a clear role and there are no redundant or filler endpoints.

Completeness4/5

The core KYB lifecycle is covered: fast checks, async report submission, polling, adverse media, and billing awareness. Minor gaps exist around retrieving a full completed report beyond a compact summary and around cancellation or listing runs, but agents can work around these for the main workflow.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers