tender-radar-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TENDER_RADAR_TODAY | No | Injectable clock date so "open tender" and "deadline within 7 days" mean the same thing on live data and the frozen test fixture. | |
| TENDER_RADAR_DATA_DIR | No | Data directory used by the server/warehouse; for evals this can point at the frozen fixture warehouse (e.g. $PWD/fixtures). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Unified UK (Find a Tender, Contracts Finder) and EU (TED) public tender intelligence. Use search_tenders/get_tender for records, match_profile and upcoming_deadlines for fit, and query_metric for any aggregate number. Aggregates are governed: read the semantic://layer resource for what exists. Cite tenders by tender_ref and url.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_tendersB | Search tenders by keyword and filters. Args: query: keyword matched against title and description. source: fts | contracts_finder | ted (empty = all). country: ISO alpha-2 buyer country, e.g. GB. cpv_division: 2-digit CPV division, e.g. 72. open_only: only tenders whose deadline has not passed. max_results: at most 50. |
| get_tenderB | Full detail for one tender by tender_ref, including cross-portal links. |
| match_profileB | Rank tenders fitting a company profile (profiles/*.yaml), with reasons. Available profiles can be listed by passing an unknown name. |
| upcoming_deadlinesC | Open tenders with deadlines within horizon_days, optionally for a profile. |
| query_metricB | Run a governed metric from the semantic layer (see semantic://layer). This is the only way to aggregate. Free SQL does not exist on this server. GovernanceError messages explain how to correct a refused query. |
| list_company_profilesB | Names of the company profiles available to match_profile. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| semantic_layer | The governed metric surface: every queryable metric and dimension. |
TDQS
Scored across 6 tools
Each tool has a distinguishable role: keyword search, ref-based detail, profile ranking, profile listing, deadline windows, and governed aggregation. The only mild overlap is that search_tenders, match_profile, and upcoming_deadlines all return tender lists, but the descriptions make the distinguishing dimension (keywords vs. profile fit vs. deadline horizon) clear.
Five of six names follow a clean verb_noun pattern (search_tenders, get_tender, match_profile, list_company_profiles, query_metric). upcoming_deadlines breaks the pattern as a bare noun phrase, a minor but noticeable deviation.
Six tools is well-scoped for a tender discovery service: discovery, detail, profiling, and aggregation each get one entry point. No redundant or filler tools are present.
The surface covers the core read-only lifecycle: find tenders, inspect one in full with cross-portal links, rank by profile, track deadlines, and aggregate via a governed metric. Minor gaps exist around exporting/saving results or listing available sources, but these are workarounds rather than dead ends.