SONAR KYB
SONAR KYB is an MCP server for AI assistants to run public-record KYB due-diligence checks on companies, partners, vendors and resellers.
Run fast synchronous KYB checks (
kyb_findings) with structured findings and source links: company registry records, sanctions/PEP matches, ICIJ Offshore Leaks, regulatory registers and adverse media; optional website helps disambiguate.Submit a full async KYB due-diligence report (
kyb_run_submit) and poll it (check_report_status) for verdict/risk level, PASS/REVIEW/FLAG checks, risk flags, directors, sanctions coverage and recommended next steps.Screen a company for adverse media (
adverse_media): negative news, complaints and reviews with a 10-year lookback; no sanctions/PEP screening.Check API usage, remaining free trial calls and prepaid balance (
account_balance).Integrates with Claude Desktop/Code, Cursor, Windsurf and other MCP clients, returning Markdown; results are due-diligence aids requiring human review, not compliance decisions.
getsonar-mcp
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 |
| €0.40 |
| €2.00 |
| 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
Sign up at getsonar.report
Open Developer → API keys
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-mcpAdd --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 |
| (required) | Your |
|
| Override for staging or self-hosted SONAR |
|
| Per-request timeout in seconds |
|
|
|
Tools
Tool | What it does | Price |
| Fast KYB check: structured findings with sources | €0.40 |
| Submit a full KYB report, returns a | €2.00 |
| Negative news, complaints and reviews | €0.40 |
| Poll a report submitted with | free |
| 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/00445790kyb_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-mcpListing 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 networkMaintainers: 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 toolsaccount_balanceARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_mediaARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| website | No | ||
| company_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_statusARead-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"
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| agent_type | No | kyb-diligence |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_findingsARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| website | No | ||
| company_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| website | No | ||
| company_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
5 tool updates
- First observed
account_balance - First observed
adverse_media - First observed
check_report_status - First observed
kyb_findings - First observed
kyb_run_submit
This server cannot be deployed
TDQS
Scored across 5 tools
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.
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.
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.
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
Related MCP Connectors
KYB due diligence for agents: sanctions screening, EU VAT/VIES, LEI, IBAN in one verdict.
Sanctions screening, KYB, identifier validation, jurisdiction risk & secret scanning for AI agents
Screen counterparties and enrich companies for AI agents — sanctions checks, cited sources.
KYB for AI agents: verify business registrations from MCP clients.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to perform identity verification, KYC/KYB, PEP & sanctions screening, bank statement analysis, and workflow automation via the Model Context Protocol.MIT
- AlicenseBqualityBmaintenanceAutonomous M2M compliance and trust APIs for AI agents (KYB, OFAC, VAT, Sanctions checking).5MIT
- AlicenseAqualityBmaintenanceEnables AI agents to screen business partners against EU/US/HADDEX sanctions and PEP lists, and maintain the easycompliance daily monitoring list.61 npmMIT
- AlicenseAqualityAmaintenanceEnables AI agents to investigate corporate ownership, trace ultimate beneficial owners, screen sanctions, detect offshore exposure, and access fully cited dossiers from 130M+ entities across 31 global registries.2196 npm1MIT