Black Flag Alert MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Black Flag Alert MCP ServerCheck the R-Score and credit risk for Kimmeridge Projects before we extend £20k credit."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Black Flag Alert MCP Server
UK company credit-risk intelligence as native tools for your AI agent — Claude, Cursor, Windsurf, Cline, ChatGPT connectors, Gemini, or any Model Context Protocol client.
Black Flag Alert scores every company registered in England & Wales with the R-Score (0–100) — filed accounts, filing behaviour, charges, CCJs and winding-up activity combined into one number — and serves it through one MCP endpoint.
Endpoint: https://blackflagalert.com/api/mcp (streamable HTTP, MCP 2025-06-18)
API keys: free trial, no card — https://blackflagalert.com/developers
Coverage: England & Wales (5.1M companies). SC/NI/R/FC/OE prefixes are out of coverage.
Methodology: https://blackflagalert.com/methodology
Tools
Tool | What it does | Metering |
| Find a company's 8-char number from its name (up to 20 matches) | free |
| Full profile: R-Score, financials, charges, CCJs, directors, narrative | calls |
| Fast plain-English risk summary only (cheapest call) | calls |
| SMTP-verified emails, phone, domain | contact lookups |
| Up to 50 companies in one call: score, status, overdue, exposure | calls |
| Your key's rolling-24h usage vs limits | free |
Related MCP server: companieswise
Connect (remote, no install)
Works with any client that supports remote MCP servers:
{
"mcpServers": {
"black-flag-alert": {
"type": "http",
"url": "https://blackflagalert.com/api/mcp",
"headers": {
"Authorization": "Bearer bfa_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}ChatGPT: Settings → Connectors → Create (paste the URL). Claude web: Settings →
Connectors → Add custom. Claude Code: claude mcp add --transport http black-flag-alert https://blackflagalert.com/api/mcp --header "Authorization: Bearer <key>". Gemini: Settings → Apps → Connections.
Install locally (stdio)
uv tool install bfa-mcp # once published to PyPI
# or from source:
uv sync # in this repo{
"mcpServers": {
"black-flag-alert": {
"command": "bfa-mcp",
"env": { "BFA_API_KEY": "bfa_live_..." }
}
}
}Environment variables
Variable | Required | Default |
| yes | — |
| no |
|
Example
You: "Should we extend £20k credit to Kimmeridge Projects?"
Agent:
search_companies("Kimmeridge Projects")→04466987→get_company("04466987")→ "R-Score 93.87 (Very Low risk), no CCJs, no outstanding charges, net assets £254K. Suggested exposure: £24,000."
License
MIT
Available Tools
6 toolsbatch_enrichAInspect
Enrich up to 50 UK companies in one call: status, R-Score, overdue flags, charges, CCJs, net assets and suggested credit exposure each. Pass a list of 8-character company numbers. Unknown numbers come back with found=false.
| Name | Required | Description | Default |
|---|---|---|---|
| company_numbers | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does disclose several non-obvious traits: the hard cap of 50 companies, the required 8-character number format, and the partial-failure contract ('Unknown numbers come back with found=false'). It omits whether the call is read-only, any rate limits, credit costs, or result ordering, which keeps it out of the top band.
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?
Three short sentences with zero filler, front-loaded with the action and batch scope, followed by the input format and the edge-case behavior. Every sentence earns its place.
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?
There is no output schema and no annotations, so the description has to carry return-value and safety context. Listing the returned fields effectively substitutes for an output schema, and the found=false contract covers the main edge case; missing details are result ordering and read-only/permission expectations.
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% and the single parameter has only a title ('Company Numbers'), so the description must compensate. It does so by specifying that the argument is a list of 8-character company numbers and by defining the not-found outcome per entry, adding real meaning beyond the bare array-of-strings schema.
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 gives a concrete verb ('Enrich') plus resource ('UK companies') and enumerates the exact fields returned (status, R-Score, overdue flags, charges, CCJs, net assets, credit exposure). The batch scope ('in one call', 'up to 50') implicitly distinguishes it from the single-company sibling get_company, but no sibling is named explicitly, so it falls short of a 5.
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?
Usage is implied rather than stated: 'up to 50 ... in one call' signals this is the bulk alternative to per-company lookups, and the required input format is given. There is no explicit when-to-use guidance, no statement of when to prefer get_company or search_companies instead, and no prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_companyAInspect
Full credit profile of a UK company: R-Score (0-100), risk band, five years of financials, filing history, charges, CCJs, directors, active alerts, suggested credit exposure and a plain-English risk narrative. company_number: 8-character Companies House number (e.g. 04466987). England & Wales coverage only — SC/NI/OC prefixes are not covered.
| Name | Required | Description | Default |
|---|---|---|---|
| company_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It usefully discloses the coverage restriction (SC/NI/OC prefixes unsupported), which is a real behavioral constraint, but says nothing about read-only nature, credit/cost consumption (a 'usage' sibling hints at metering), or latency for such a data-heavy response.
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?
Three tight, front-loaded sentences: what you get, how to identify the company, and the coverage caveat. The enumerated payload earns its length because no output schema exists to communicate return values.
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 no output schema and no annotations, the description does the work of describing return contents and input format, and flags the geographic limitation. What is missing is minor: no mention of cost/credits per call, and no fallback guidance when the company is outside England & Wales.
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 parameter is completely undocumented in structured form; the description compensates by specifying the 8-character Companies House format and giving a concrete example (04466987), plus the prefix restriction. Strong for a single parameter.
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 ('Full credit profile of a UK company') and enumerates the concrete payload: R-Score, risk band, five years of financials, filings, charges, CCJs, directors, alerts, exposure, and narrative. This also implicitly distinguishes it from get_risk_narrative (a subset) and search_companies (the finder).
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?
Usage is only implied: the description makes clear this is a single-company profile lookup given a company number, and it excludes non-England & Wales entities. It never explicitly says when to prefer this over get_risk_narrative or that search_companies should be used first to obtain a number.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contactsAInspect
Verified contact details for a UK company: SMTP-validated email addresses, phone and website domain. Metered separately from other calls — use sparingly and only when the user actually needs contact details.
| Name | Required | Description | Default |
|---|---|---|---|
| company_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the separate metering/billing trait and the validation state of the data, but says nothing about permissions, failure behavior for non-UK companies, or rate limits beyond cost.
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?
Two sentences, front-loaded with the returned content and then the cost warning. The em-dash clause is slightly loose but every clause carries information; nothing is wasted.
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?
No output schema and no annotations, so the description is the only source of shape information. It lists what comes back but not the structure of the returned payload (single vs list of emails/phones), which is a notable gap for a tool whose output is the whole point.
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% for the single required parameter, so the description must compensate. It adds the useful framing that the identifier is a UK company number, but does not state the format (e.g. Companies House 8-character number), leaving the schema to carry the rest.
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 resource (contact details for a UK company) and enumerates the returned fields — SMTP-validated emails, phone, website domain. That distinguishes it from search_companies and get_company, though it does not name a sibling explicitly.
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 a clear usage condition: metered separately, use sparingly, only when the user actually needs contact details. That is a real when-to-use rule, but it never names the cheaper alternative (get_company) that an agent should prefer for general company data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_risk_narrativeAInspect
Fast plain-English risk summary for a UK company — no external credit fetch, cheapest call. Use when the user just wants 'is this company safe to deal with' rather than the full profile.
| Name | Required | Description | Default |
|---|---|---|---|
| company_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful traits: no external credit fetch (data sourcing), cheapest/fastest (cost and latency), and plain-English output (response style). It stops short of stating failure modes, auth needs, or the exact return shape.
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?
Two short sentences, front-loaded with the artifact and its defining constraint, then the usage condition. No filler beyond a small amount of cost framing that itself carries selection value.
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 simple one-parameter lookup with no annotations and no output schema, the description covers purpose, when-to-use, data sourcing, cost, and output style. Only the parameter format and any failure/empty-result behavior are left unspecified.
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% and the single parameter is required, so the description must compensate. 'For a UK company' hints that company_number is a UK registration identifier but gives no format, length, or validation guidance, so it only partially fills the gap.
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 artifact (plain-English risk summary) and its scope (a UK company), and implicitly contrasts it with the 'full profile' tool, so an agent can tell it apart from get_company without opening either schema. It also defines what 'narrative' means, which the name alone does not.
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?
Explicit when-to-use condition: 'Use when the user just wants is this company safe to deal with rather than the full profile.' It names the alternative (full profile) and the intent that selects this tool instead, plus the cost/effort tradeoff ('cheapest call').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companiesAInspect
Search UK companies by name to find their Companies House number. Use this first when the user gives a company name instead of a number. Returns up to 20 matches with company_number, name, status and R-Score.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the result cap (up to 20 matches) and the returned fields (company_number, name, status, R-Score). It omits matching behavior (exact vs. fuzzy) and any auth or rate-limit considerations, so it is good but not exhaustive.
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?
Three short sentences, each earning its place: what it does, when to reach for it, and what comes back. The routing guidance is front-loaded immediately after the purpose.
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 no output schema and no annotations, the description usefully covers the return fields and the 20-match cap. It stops short of explaining name-matching behavior or what happens when more than 20 companies match, which an agent would want to know.
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 carry the parameter meaning. "Search UK companies by name" establishes that query is a company name, but it adds no detail on matching semantics, minimum length, or formatting, leaving a gap for a single required parameter.
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 (Search) and resource (UK companies) plus the goal of retrieving a Companies House number. This cleanly separates it from get_company, which takes a number rather than a name.
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?
"Use this first when the user gives a company name instead of a number" gives an explicit trigger condition and implies the number-based alternative without naming get_company. No exclusions or edge cases (e.g., ambiguous or partial names) are given, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
usageAInspect
Show this API key's rolling-24h usage against its limits: calls made, calls allowed, contact lookups used. Call this when you hit a rate-limit error or before a large batch.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does reasonably well: it discloses the rolling-24h window, that it is scoped to the calling key, and the three counters returned. It is implicitly read-only ('Show') and safe, but it never says whether the numbers are eventually consistent or how the limit is enforced.
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?
Two sentences, no filler: the first states what is returned and over what window, the second states when to call it. The most decision-relevant content is front-loaded and every clause earns its place.
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 no output schema, the description must describe the return payload, and it does by naming the three counters. Combined with explicit invocation triggers and the rolling-24h window, an agent has everything needed to call it correctly and interpret the result.
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 there is nothing for the description to disambiguate; the baseline for a no-parameter tool is 4. The description correctly implies that scope comes from the calling API key rather than from arguments.
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 gives a specific verb and resource: it shows 'this API key's rolling-24h usage against its limits' and enumerates the returned metrics (calls made, calls allowed, contact lookups used). That is far more concrete than the bare name 'usage', though it never explicitly contrasts itself with siblings like batch_enrich, which it implicitly serves.
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 two concrete trigger conditions: call it 'when you hit a rate-limit error or before a large batch.' This tells the agent exactly when to reach for it, and no sibling tool offers this capability, so no alternatives need naming. No exclusions are stated, but none are meaningful for a no-argument status read.
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.
6 tool updates
v1.0.0- First observed
batch_enrich - First observed
get_company - First observed
get_contacts - First observed
get_risk_narrative - First observed
search_companies - First observed
usage
TDQS
Scored across 6 tools
Tools serve distinct purposes: search vs. full profile vs. lightweight narrative vs. contacts vs. batch vs. usage. get_company and get_risk_narrative overlap somewhat since the full profile includes a risk narrative, but the descriptions clearly differentiate the use cases (comprehensive vs. fast/cheap).
All tool names follow a consistent verb_noun or noun pattern (search_companies, get_company, get_risk_narrative, get_contacts, batch_enrich, usage). The lone noun 'usage' is a minor, contextually clear exception.
Six tools cover the core operations of UK company credit checking without redundancy. Each tool has a clear, non-overlapping role in the workflow.
The surface covers search, detailed profiles, quick risk, contacts, batch enrichment, and usage monitoring. However, it lacks tools for monitoring alerts over time or managing alert subscriptions, which the server name suggests might be expected.
Maintenance
Related MCP Connectors
Company intelligence via UK Companies House and risk screening across 386 risk data sources.
UK public-record company intelligence: Companies House, payments, contracts, registers, watch lists
191UK company data from Companies House: search, officers, PSCs, filings, financials, KYB checks.
1Global B2B intelligence for AI agents: 35M+ companies, 1.6M sanctions, KYB pack. 78 tools.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceProvides real-time company verification and corporate intelligence by accessing global registries like UK Companies House, Singapore ACRA, and OpenCorporates. It enables AI agents to perform KYC tasks, retrieve company profiles, and conduct automated risk assessments for due diligence workflows.153 npmMIT

companieswiseofficial
AlicenseAqualityDmaintenanceProvides verified UK company lookup and number validation for AI agents using official Companies House data. Enables lookup of registered details by number, validation of company number format, and search by company name.346 npmApache 2.0- AlicenseAqualityCmaintenanceEnables AI assistants to search and retrieve UK Companies House data including company profiles, officers, and filing history via the official API.4173 npm1MIT
- FlicenseNot gradedqualityBmaintenanceProvides instant access to verified, enriched business intelligence for any UK company, including legal identity, financial health, web presence, and hiring activity in a single call.-