Skip to main content
Glama

Search public tenders

search_tenders
Read-only

Use this to find public sector contracts to bid for in the UK, Canada, the United States, Germany, France and the rest of the EU: open tenders, frameworks and upcoming notices from any public buyer. Searches the user's own countries unless they name one; get_coverage lists every source and when it was last read. Answers give the total; pass nextCursor back as cursor for more. Not for past winners (use search_contract_awards) or jobs. Example: {"query":"school cleaning","region":"North West","closing_within_days":30}

Input Schema

NameRequiredDescriptionDefault
sortNo"best", the default: best fit first for a user with a saved company profile, otherwise the closest match; "closing": soonest deadline first; "newest": latest published first; "value": highest value first.
buyerNoOnly tenders from a buyer whose name holds these words, e.g. "Leeds City Council" or "NHS Lothian".
codesNoOnly tenders with one of these classification codes, or a code under one: CPV in the UK and EU, e.g. "90910000" for cleaning or "909" for all cleaning and sanitation; NAICS or PSC on SAM.gov; UNSPSC or GSIN on CanadaBuys.
limitNoHow many to show, up to 50. Defaults to 8.
queryNoWhat the buyer is buying, in the user's words, e.g. "grounds maintenance", "cyber security consultancy", "school catering". Tenders with the words come first, then any close in meaning that share none of them, marked match "meaning". Leave it out to list every tender the other filters allow.
stageNo"open" for tenders taking bids now, "upcoming" for pipeline and preliminary market engagement notices about future tenders.
cursorNoThe nextCursor from an earlier answer, with the same search, for its next page.
detailNo"short" for just each result's IDs, title, buyer, value, dates and link, e.g. to go through many pages; "full", the default, for everything.
regionNoWhere the work or delivery happens: a UK nation or English region, e.g. "North West" for Manchester or Liverpool; a Canadian province or territory, e.g. "Ontario" for Toronto; a US state, e.g. "Virginia"; a German Land by its German name, e.g. "Bayern" for Munich; a French region, e.g. "Île-de-France" for Paris; or another EU member state, e.g. "Poland". Omit for nationwide contracts or when the user names no place.
countryNoThe country to look in, when the user names one, e.g. "Canada", "UK" or "Spain" (an EU member state searches the rest of the EU there). Omit to use the user's own countries (the UK when they aren't signed in). Winquill covers the UK, Canada, the United States, Germany, France and the rest of the EU.
procedureNoHow the buyer is buying, e.g. "framework" for framework agreements, "dynamic_market" for dynamic markets suppliers can join at any time.
buyer_typeNoKind of public buyer, e.g. "local_authority" for councils, "nhs" for NHS trusts and ICBs, "education" for schools, academy trusts and universities.
suitable_forNoOnly notices the buyer marked as suitable for small and medium-sized enterprises or for voluntary, community and social enterprises.
contract_typeNoWhat is being bought, e.g. "works" for construction and refurbishment.
max_value_gbpNoHighest estimated contract value in the country's own currency (pounds for the UK, Canadian dollars for Canada, US dollars for the US, euros for Germany, France and the rest of the EU), e.g. 100000 for "under £100k".
min_value_gbpNoLowest estimated contract value in the country's own currency (pounds for the UK, Canadian dollars for Canada, US dollars for the US, euros for Germany, France and the rest of the EU), e.g. 50000 for "over £50k".
published_sinceNoOnly tenders published on or after this date, e.g. "2026-10-01".
closing_within_daysNoOnly tenders closing within this many days, e.g. 30 for "this month".

Output Schema

NameRequiredDescriptionDefault
asOfNoEvery source searched had read its notices at or after this time, in ISO 8601.
noteNo
totalYesHow many tenders match in all, across every page.
creditNo
resultsYes
summaryYes
countriesNo
nextCursorNoPass it back as cursor, with the same search, for the next page. Absent on the last page.
interpretedAsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / country / description
      Previous value: -"The country to look in, when the user names one, e.g. \"Canada\", \"UK\" or \"Spain\" (an EU member state searches the rest of the EU there). Omit to use the user's own countries (the UK when they aren't signed in). Tenda covers the UK, Canada, the United States, Germany, France and the rest of the EU."New value: +"The country to look in, when the user names one, e.g. \"Canada\", \"UK\" or \"Spain\" (an EU member state searches the rest of the EU there). Omit to use the user's own countries (the UK when they aren't signed in). Winquill covers the UK, Canada, the United States, Germany, France and the rest of the EU."
  2. First observed

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real behavioural context beyond that: default country resolution (falls back to the UK when not signed in), a default limit of 8, total count plus nextCursor for paging, and the fact that meaning-based matches are marked match "meaning". It stops short of describing result ordering nuances already handled by the sort enum.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads scope, then defaults, then pagination, then exclusions to siblings, ending with a compact example. Every sentence carries distinct information; nothing is repeated from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, yet the description still flags the total and nextCursor which matter for chaining calls. For an 18-parameter, all-optional search tool, the coverage of scope, defaults, exclusions and pagination is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already carries the parameter burden and the baseline would be 3. The description goes further by showing a concrete call with query, region and closing_within_days, and by connecting cursor to the nextCursor field in answers, which clarifies the pagination contract in a way the schema alone does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (find public sector contracts to bid for) plus the exact geographic scope (UK, Canada, US, Germany, France, rest of EU) and the notice types covered (open tenders, frameworks, upcoming notices). It explicitly names the sibling it is not (search_contract_awards) and rules out jobs, so an agent can distinguish it 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use and when-not-to-use: past winners go to search_contract_awards, source coverage goes to get_coverage. It also states the default behaviour (searches the user's own countries unless one is named) and how to paginate, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources