ukintel.uk — UK company, tender and grant intelligence

Companies House, Find a Tender and Find a Grant as paid JSON for agents. USDC via x402, no signup.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
91%
Naming quality
80%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,761Tokens (tool definitions)
~1.6 KBTypical response size
Significant attention impact (2.94% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "ukintel": {
      "url": "https://api.ukintel.uk/mcp"
    }
  }
}

Remote endpoints

https://api.ukintel.uk/mcpstreamable-http

What it can do

Tool inventory

Tools (13)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡uk_preview(wing)

A genuine, freshly-computed sample so an agent can see the exact response shape before spending anything. Default: a real company verdict, rotating daily. Add ?wing=tenders for a real live-tender brief, or ?wing=grants for a real grant eligibility verdict - all rotating daily. Every response carries the same envelope: query, result, verdict, confidence, as_of, sources, attribution, notice, cost. Free. Returns: The identical envelope returned by the paid endpoints: /v1/company/{number}/verdict by default, /v1/tenders/{ocid}/brief with ?wing=tenders, /v1/grants/{id}/eligibility with ?wing=grants.

Input Schema

{
  "type": "object",
  "properties": {
    "wing": {
      "type": "string",
      "enum": [
        "company",
        "tenders",
        "grants"
      ],
      "description": "Which product family to sample: company (default), tenders or grants."
    }
  },
  "additionalProperties": false
}
⚪uk_health

Liveness and upstream health. Free, because frameworks probe before they route money. Free. Returns: status, version, network, upstreams{}, rules_version, warnings[].

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢uk_company_search(q, limit)

Find a UK company by name. Returns the top 5 matches from the Companies House register with number, name, status and incorporation date. Taster tier - cheap enough to try on a whim before paying for a full profile or verdict. Costs $0.005 USDC per call (x402, Base mainnet). Returns: results[] of { company_number, name, status, incorporated, address_snippet }, plus total_matches.

Input Schema

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "minLength": 2,
      "maxLength": 160,
      "description": "Company name or fragment to search for."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 5,
      "default": 5,
      "description": "Number of matches to return, 1-5. Defaults to 5."
    }
  },
  "required": [
    "q"
  ],
  "additionalProperties": false
}
⚪uk_company_profile(number, detail)

One UK company as clean structured JSON: status, incorporation date, company type, SIC codes, registered office, accounts and confirmation-statement due dates with overdue booleans, and officer counts. Sourced live from Companies House. Costs $0.02 USDC per call (x402, Base mainnet). Returns: result = { name, company_number, status, type, incorporated, registered_office, sic_codes[], accounts{}, confirmation_statement{}, officers{ active, total, resigned_last_12m }, age_years }.

Input Schema

{
  "type": "object",
  "properties": {
    "number": {
      "type": "string",
      "pattern": "^([A-Z]{2})?[0-9]{6,8}$",
      "description": "UK company number. 8 characters; two-letter prefixes are supported (SC = Scotland, NI = Northern Ireland, OC = LLP)."
    },
    "detail": {
      "type": "string",
      "enum": [
        "full"
      ],
      "description": "Set to 'full' to add filing history (last 10) and anonymised officer records, and to lift the ~800 token response cap."
    }
  },
  "required": [
    "number"
  ],
  "additionalProperties": false
}
⚪uk_company_verdict(number, detail)

Should an agent trust this UK company? Returns a 0-100 verdict and low_risk/caution/high_risk band, with every rule that fired named in the response and the register value that triggered it: STATUS_DISSOLVED, STRIKE_OFF_ACTIVE, ACCOUNTS_OVERDUE, NO_ACTIVE_DIRECTORS, OFFICER_CHURN, FS_SIC_NOT_FCA and 9 more. Rules are deterministic and published, so you can audit the verdict or re-weight it. Never model-scored. Costs $0.10 USDC per call (x402, Base mainnet). Returns: Everything the profile returns, plus verdict = { score 0-100, band low_risk|caution|high_risk, flags[{code,detail}], fca{}, narrative }.

Input Schema

{
  "type": "object",
  "properties": {
    "number": {
      "type": "string",
      "pattern": "^([A-Z]{2})?[0-9]{6,8}$",
      "description": "UK company number. 8 characters; two-letter prefixes are supported (SC = Scotland, NI = Northern Ireland, OC = LLP)."
    },
    "detail": {
      "type": "string",
      "enum": [
        "full"
      ],
      "description": "Set to 'full' to add filing history (last 10) and anonymised officer records, and to lift the ~800 token response cap."
    }
  },
  "required": [
    "number"
  ],
  "additionalProperties": false
}
⚪uk_company_fca(number)

Is this UK company regulated by the Financial Conduct Authority? Returns register status, a permissions summary and any warnings - sold separately from the full verdict because fintech-vetting agents often want only this. Costs $0.02 USDC per call (x402, Base mainnet). Returns: result.fca = { checked, regulated, frn, firm_name, status, permissions_summary, warnings[], note }. When the register is unavailable, checked=false and the reason is named - never a 500.

Input Schema

{
  "type": "object",
  "properties": {
    "number": {
      "type": "string",
      "pattern": "^([A-Z]{2})?[0-9]{6,8}$",
      "description": "UK company number. 8 characters; two-letter prefixes are supported (SC = Scotland, NI = Northern Ireland, OC = LLP)."
    }
  },
  "required": [
    "number"
  ],
  "additionalProperties": false
}
🟢uk_tenders_search(q, cpv, region, value_min, value_max, ...)

Live UK public-sector tenders from Find a Tender and Contracts Finder in one call. Returns the top 10 matching notices as one-paragraph plain-English briefs with buyer, value, deadline, CPV codes (honest null when the notice carries none) and the official notice link. Searches a 6-hourly refreshed index - no signup with either portal needed. Costs $0.05 USDC per call (x402, Base mainnet). Returns: result = { total_matched, returned, notices[] of { ocid, title, buyer, value, stage, published, deadline, days_remaining, region, cpv, summary, source{name, notice_url} }, excluded{} } - excluded{} reports notices honest-nulled out by cpv/region/value/deadline filters.

Input Schema

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 200,
      "description": "Keywords, synonym-expanded (e.g. 'cleaning' also finds janitorial and hygiene services). At least one of q, cpv or region is required."
    },
    "cpv": {
      "type": "string",
      "description": "CPV code prefix filter, comma-separated (e.g. 909,45233). Notices without CPV codes are excluded and counted."
    },
    "region": {
      "type": "string",
      "description": "UK nation or English region: scotland, wales, northern-ireland, london, north-east, north-west, yorkshire, east-midlands, west-midlands, east-of-england, south-east, south-west, england."
    },
    "value_min": {
      "type": "integer",
      "minimum": 0,
      "description": "Minimum stated contract value in GBP."
    },
    "value_max": {
      "type": "integer",
      "minimum": 0,
      "description": "Maximum stated contract value in GBP."
    },
    "deadline_after": {
      "type": "string",
      "format": "date",
      "description": "Only notices whose submission deadline is on or after this date (YYYY-MM-DD)."
    },
    "stage": {
      "type": "string",
      "enum": [
        "tender",
        "planning"
      ],
      "description": "tender (open competitions, default both) or planning (early engagement)."
    }
  },
  "additionalProperties": false
}
⚪uk_tender_brief(ocid)

One tender as a full agent-ready dossier: parsed requirements summary, buyer, value, complete timeline with working-days-remaining, lots, document links, submission route and the official notice URL. CPV codes are null when the source release carries none - we report the register, we never guess. Costs $0.10 USDC per call (x402, Base mainnet). Returns: result = { ocid, title, buyer, value, stage, published, deadline, days_remaining, region, cpv, summary, description, lots, documents[], submission_url, timeline{}, source{} }.

Input Schema

{
  "type": "object",
  "properties": {
    "ocid": {
      "type": "string",
      "pattern": "^ocds-[a-z0-9]{6}-[A-Za-z0-9][A-Za-z0-9-]{0,80}$",
      "description": "The OCDS contracting-process id, e.g. ocds-h6vhtk-06df8b (FTS) or ocds-b5fd17-… (Contracts Finder). Exactly as returned by /v1/tenders/search."
    }
  },
  "required": [
    "ocid"
  ],
  "additionalProperties": false
}
🟡uk_tenders_fit_score(supplier, filters, top)

Send a supplier profile (what you do, keywords, regions, value band, certifications) and get the best-fitting live UK tenders, each scored 0-100 by deterministic published rules across five factors - relevance, value fit, geography, timeline, buyer history - each with its numerator AND denominator so you can re-weight client-side, plus a what-to-emphasise note on the top matches. Rules score; a model never does. Costs $0.20 USDC per call (x402, Base mainnet). Returns: result = { considered, matches[] of { ...notice brief..., fit: { score, band strong|possible|weak, factors{ relevance/of, value_fit/of_v, geography/of_g, timeline/of_t, buyer_history/of_b }, flags[], rules_version }, emphasise } }.

Input Schema

{
  "type": "object",
  "properties": {
    "supplier": {
      "type": "object",
      "description": "The supplier profile to match against live tenders.",
      "properties": {
        "what_we_do": {
          "type": "string",
          "description": "Plain-English capability statement"
        },
        "keywords": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "regions": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "UK nations/regions served"
        },
        "value_band": {
          "type": "array",
          "items": {
            "type": "integer"
          },
          "minItems": 2,
          "maxItems": 2,
          "description": "[min, max] comfortable contract value in GBP"
        },
        "certifications": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "cpv": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "CPV code prefixes you deliver against"
        }
      },
      "required": [
        "what_we_do"
      ]
    },
    "filters": {
      "type": "object",
      "description": "Optional pre-filters (same fields as /v1/tenders/search)."
    },
    "top": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "default": 5
    }
  },
  "required": [
    "supplier"
  ],
  "additionalProperties": false
}
🟢uk_grants_search(q, region, org_type, min, max, ...)

Live UK grant funding calls from GOV.UK Find a Grant in one call: name, funder, amount range, opening/closing dates, who can apply, one-line summary and the official source link. Filter by keywords, nation, applicant type and amount band. Indexed daily from the official listing - the service has no API of its own, so this is the machine-readable version. Costs $0.10 USDC per call (x402, Base mainnet). Returns: result = { total_matched, returned, grants[] of { id, name, funder, amounts{min,max,text}, window{opens,closes,open_now,days_to_close}, who_can_apply, org_types, regions, summary, criteria_parsed, criteria_basis seed|llm|listing|null, source_url }, excluded{} }.

Input Schema

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 200,
      "description": "Keywords matched against grant names, summaries, funders and descriptions (light stemming). At least one criterion is required."
    },
    "region": {
      "type": "string",
      "description": "UK nation: england, scotland, wales, northern-ireland (or uk for UK-wide only)."
    },
    "org_type": {
      "type": "string",
      "description": "Applicant type: individual, business, charity, community_group, public_body, local_authority, education (synonyms like sole-trader, cic, council are mapped)."
    },
    "min": {
      "type": "integer",
      "minimum": 0,
      "description": "Only grants whose maximum award is at least this many GBP."
    },
    "max": {
      "type": "integer",
      "minimum": 0,
      "description": "Only grants whose minimum award is at most this many GBP."
    },
    "open_now": {
      "type": "string",
      "enum": [
        "true",
        "false"
      ],
      "description": "Default true: only grants currently open for applications. Set to false to include closed/not-yet-open listings."
    }
  },
  "additionalProperties": false
}
🟡uk_grants_match(project, top)

Send a project profile (what it is, who you are, where, how much you need) and get back the live UK grants it could actually get - ranked eligible-first with a per-criterion pass/fail table for every match, from criteria parsed once at ingest from each grant's own eligibility text. Ineligible grants are excluded and counted, never dressed up as options. Deterministic rules; no language model touches the verdicts. Costs $0.15 USDC per call (x402, Base mainnet). Returns: result = { considered, matches[] of { grant summary + eligibility { band eligible|uncertain, score, criteria[{code,requirement,pass,detail}], missing[], flags[] } , relevance }, excluded{ineligible, closed} }.

Input Schema

{
  "type": "object",
  "properties": {
    "project": {
      "type": "object",
      "description": "The project profile to match against live grants.",
      "properties": {
        "description": {
          "type": "string",
          "description": "Plain-English project description"
        },
        "keywords": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "org_type": {
          "type": "string",
          "description": "individual | business | charity | community_group | public_body | local_authority | education"
        },
        "region": {
          "type": "string",
          "description": "england | scotland | wales | northern-ireland"
        },
        "amount_needed": {
          "type": "integer",
          "description": "Funding sought, GBP"
        },
        "params": {
          "type": "object",
          "description": "Numeric facts criteria may reference, e.g. { land_ha: 3.5, employees: 12 }",
          "additionalProperties": {
            "type": "number"
          }
        }
      },
      "required": [
        "org_type"
      ]
    },
    "top": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "default": 5
    }
  },
  "required": [
    "project"
  ],
  "additionalProperties": false
}
🟢uk_grant_eligibility(id, org_type, region, declare)

One grant, one project: a deterministic eligibility verdict with the full criteria table - each criterion quoted from the grant's own eligibility text, marked pass/fail/undeclared - plus what is missing to firm it up and indicative funding. Criteria are parsed once at ingest, never guessed at request time; if the full text is not parsed yet the verdict uses Find a Grant's listing fields, flagged PARTIAL_CRITERIA, and criteria_provenance says so. Costs $0.15 USDC per call (x402, Base mainnet). Returns: result = { grant{name,funder,window,amounts,source_url}, criteria[{code,requirement,pass,detail}], missing[], failed[], indicative_funding, criteria_provenance{source,complete,parsed_at,eligibility_text_available} }, verdict = { score, band eligible|uncertain|ineligible, flags[] }.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^[a-z0-9][a-z0-9-]{1,120}$",
      "description": "Grant id: the Find a Grant slug exactly as returned by /v1/grants/search (e.g. england-woodland-creation-offer-ewco-1), or a curated short alias like ewco."
    },
    "org_type": {
      "type": "string",
      "description": "Applicant type slug (individual, business, charity, community_group, public_body, local_authority, education)."
    },
    "region": {
      "type": "string",
      "description": "Where the project is: england, scotland, wales, northern-ireland."
    },
    "declare": {
      "type": "object",
      "additionalProperties": {
        "type": [
          "string",
          "number",
          "boolean"
        ]
      },
      "description": "Extra facts this grant's criteria ask for, as declared key/values (e.g. { \"land_ha\": 3.5, \"management_control\": true }). Each criterion names the parameter it reads, so a first call tells you what to declare on the second."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
🟢uk_funder_dossier(name)

Who actually funds things like yours: one UK funder's giving history aggregated from the 360Giving open-data corpus - grants made, total and typical award, size distribution, yearly pattern, most recent named awards - plus any of their grant schemes live on Find a Grant right now. Licences are respected per dataset (share-alike data is excluded from the numbers, and every recent-award row carries its source licence). Costs $0.20 USDC per call (x402, Base mainnet). Returns: result = { funder{name,ids}, match_quality, giving { grants_made, total_awarded_gbp, years, size_distribution_gbp{min,p25,median,p75,max,mean}, yearly{}, typical_award_gbp }, recent_awards[] (each with licence + publisher), live_grants_now[], coverage }.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 120,
      "description": "Funder name or slug, e.g. national-lottery-heritage-fund, \"Esmée Fairbairn Foundation\", or a GB-CHC-… org id."
    }
  },
  "required": [
    "name"
  ],
  "additionalProperties": false
}

Recommended Prompts

search_research
Search for information about [topic] using ukintel.uk — UK company, tender and grant intelligence
Expected tools: uk_company_search
find_specific
Find [specific item] using ukintel.uk — UK company, tender and grant intelligence
Expected tools: uk_company_search

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded13 tools
verifiedversion not recorded13 tools
verifiedversion not recorded13 tools
verifiedversion not recorded13 tools
verifiedversion not recorded13 tools
verifiedversion not recorded13 tools