Blog › A KYB MCP server for AI agents: setup and limits
A KYB MCP server for AI agents: setup and limits
Bosco Labs ·
Add https://api.boscolabs.dev/mcp to your MCP client with an API key in the Authorization header. Your agent gets a counterparty_check tool that takes a company name or number and returns a checklist from official sources. If you want to look around before getting a key, https://api.boscolabs.dev/mcp/free works without one and gives the agent our planner and tool descriptions, plus free LEI and SEC company lookups.
The rest of this post covers setup in a few clients, what the agent gets back, and how to stop it from reading a missing answer as a clean one.
Setup
In Claude Code, the free server needs no key:
claude mcp add --transport http bosco-labs-free https://api.boscolabs.dev/mcp/free
For the paid tools, add the main server with your key:
claude mcp add --transport http bosco-labs https://api.boscolabs.dev/mcp \
--header "Authorization: Bearer $BOSCO_API_KEY"
In Cursor, put this in .cursor/mcp.json:
{
"mcpServers": {
"bosco-labs": {
"url": "https://api.boscolabs.dev/mcp",
"headers": { "Authorization": "Bearer YOUR_KEY" }
}
}
}
In claude.ai and the Claude apps, go to Settings, then Connectors, then "Add custom connector", and use https://api.boscolabs.dev/mcp/claude. Claude opens a sign-in page once, you paste your key there, and calls are billed to that key.
If you already have an Apify account, the same check runs through Apify's hosted MCP server at https://mcp.apify.com?tools=bosco_labs/counterparty-check, billed to Apify.
You can get a key here. It comes with $5 of free credit, which is 100 company checks.
What the agent sees
The main server lists three tools. counterparty_check is the one doing the work. plan_official_records_query is free and turns a question into the exact call and its maximum price, or says not_covered if we don't have the data. run_official_records_plan runs a plan, or any of our other tools by name. If you'd rather have every tool listed separately, use https://api.boscolabs.dev/mcp?tools=all. The MCP section of the API page has the details.
The input is small. query takes a company name or an identifier: a UK company number, a Danish CVR, a Norwegian org number, a French SIREN, a Finnish Business ID, an Estonian registry code, an LEI, a US ticker or an SEC CIK. country helps when a name or number is ambiguous. If the user gave a VAT number or an IBAN, the agent can pass vatNumber and iban too. For a vendor list, companies takes up to 10 at once.
A prompt like this one is enough for the agent to fill those in:
> Before we pay them: check supplier Novo Nordisk A/S (CVR 24256790), their VAT number DK24256790 and IBAN DK5000400440116243.
What comes back
One row per company. The important parts are checks and summary.
Each entry in checks has a name such as register_status, insolvency, sanctions_entity, sanctions_people, vat_number or iban, plus a status, a one-line detail, the source and a link to it. The status is pass, fail, review or unverified.
summary.needs_attention lists the checks that came back fail or review. summary.unverified_checks lists the ones we couldn't do. Those two lists are what the agent should talk about first.
Coverage isn't the same everywhere, and the row is honest about that. Officers and owners come from the UK, Polish, Norwegian and French registers, and the people are screened in the UK, Norway and France (Poland masks the names). Insolvency comes from registers or notices in the UK, Poland, France, Germany, the Netherlands, Norway, Finland and Estonia. For a Danish company, for example, the insolvency check comes back unverified with a detail saying which countries are covered. Sanctions screening of the company itself works for any company we can identify.
Teach the agent what "unverified" means
This is the part that matters most. A model that sees six passes and three unverified checks will often summarise it as "all clear". It isn't. Unverified means nobody checked.
We put a notice in every row saying exactly that, but it helps to say it in your own system prompt too. Something like:
When you check a company, call counterparty_check once per company.
Report every check in summary.needs_attention with its source_url.
List the checks in summary.unverified_checks by name and say they were not checked.
Never describe a company as clear if any check is fail, review or unverified.
A sanctions name match is a candidate until a person compares it with the official entry.
With that in place, the agent's answer for the Novo Nordisk example reads more like "everything passed except insolvency and the sanctions check on officers, which weren't verified for a Danish company" than "Novo Nordisk checks out".
Why a tool instead of web search
A model with web search can answer "is this company active" surprisingly often. In our test it slipped more on sanctions, because the lists are big structured files that search engines don't index well. Insolvency was hard for both. We wrote up a small benchmark of counterparty-check against a model using web search on 25 companies, including the cases where our tool still answered unknown and the bugs we fixed along the way.
The other difference is that every check carries a source link and a timestamp. When a compliance person asks why the agent said what it said, there's something to click.
Limits
A check takes 5 to 30 seconds, because it waits on several registers and VIES. Agents usually cope fine with that, but some clients have short tool timeouts.
It costs $0.05 per company checked. An ambiguous name returns a list of candidates instead, and that's free, so the agent can ask the user which one they meant.
It's a screening aid built from official registers and lists. It doesn't include PEP lists, adverse media or ownership chains, and it isn't a compliance decision. Every fail and review should go to a person with the linked source open.
If your agent pays its own way with a crypto wallet, the same endpoint takes x402 payments in USDC on Base with no account. The API page explains how.
Bosco Labs makes counterparty-check and the MCP server.
Bosco Labs: official-source data for AI agents, as an HTTP API, MCP server and Apify Actors. API docs.