Skip to main content
Glama

Zephior Discovery

Search public tenders

search_public_tenders
Read-onlyIdempotent

Search published tender notices by text, country, sector, category, CPV prefix, status, buyer, deadline window, estimated value and place. Returns compact hits with canonical citations, 20 per page by default (limit up to 50); read get_public_tender for notice text, facts, related notices and history. total counts notices and procedures counts them once per procedure where one is published on several portals; read each nextPage before calling a list complete. q matches every word, in the source language or the visitor copy, with or without accents; words of five or more letters also match longer compounds. For broad needs prefer sectors or cpv over category IDs, and add q keywords. sort deadline orders date-only deadlines by their day. A zero result can mean no coverage, a narrow filter or different wording: widen filters or try source-language keywords before concluding nothing exists.

Input Schema

NameRequiredDescriptionDefault
qNo
cpvNoCPV code prefixes, such as 45 (construction work) or 72 (IT services). Matches notices whose source lists such a code.
pageNo
sortNorelevance
viewNocompact returns what is needed to choose and cite a notice; full returns whole records (notice text, facts, history), at most 20 per page.compact
buyerNo
limitNo
placeNoPart of the place of performance or buyer location as published, such as Genève or Zürich. Spelling matters; many notices name only a region.
localeNoen
sectorsNoBroad sectors grouping every category and CPV code, such as construction or it-telecoms. Prefer this to category IDs for broad needs.
currencyNoCurrency of valueMin and valueMax, such as CHF or EUR. Only notices stating an estimated value in this currency match; amounts are not converted.
statusesNoOmit for active statuses (open, closing-soon, upcoming, unconfirmed). An explicit empty array includes all statuses. closing-soon is an open notice whose deadline is within 7 days (168 hours); a passed deadline shows as closed. OR within each filter, AND between filters and text search.
valueMaxNoHighest estimated value; needs currency.
valueMinNoLowest estimated value; needs currency.
countriesNo
categoriesNo
deadlineToNoLatest submission deadline: an ISO date (to its end, UTC) or a time with a timezone. Notices without a deadline are excluded once either bound is set.
deadlineFromNoEarliest submission deadline: an ISO date (from its start, UTC) or a time with a timezone. Date-only deadlines count as the end of their day.

Output Schema

NameRequiredDescriptionDefault
urlYes
pageYes
itemsYes
limitYes
totalYes
localeYesen
filtersYes
nextPageYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changed
    • addedInput schema / properties / cpv
      Added value: +{
      +  "description": "CPV code prefixes, such as 45 (construction work) or 72 (IT services). Matches notices whose source lists such a code.",
      +  "items": {
      +    "pattern": "^\\d{2,8}$",
      +    "type": "string"
      +  },
      +  "maxItems": 50,
      +  "type": "array",
      +  "uniqueItems": true
      +}
    • addedInput schema / properties / currency
      Added value: +{
      +  "description": "Currency of valueMin and valueMax, such as CHF or EUR. Only notices stating an estimated value in this currency match; amounts are not converted.",
      +  "pattern": "^[A-Z]{3}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / deadlineFrom
      Added value: +{
      +  "description": "Earliest submission deadline: an ISO date (from its start, UTC) or a time with a timezone. Date-only deadlines count as the end of their day.",
      +  "maxLength": 40,
      +  "pattern": "^\\d{4}-\\d{2}-\\d{2}(T[0-9:.]+(Z|[+-]\\d{2}:\\d{2}))?$",
      +  "type": "string"
      +}
    • addedInput schema / properties / deadlineTo
      Added value: +{
      +  "description": "Latest submission deadline: an ISO date (to its end, UTC) or a time with a timezone. Notices without a deadline are excluded once either bound is set.",
      +  "maxLength": 40,
      +  "pattern": "^\\d{4}-\\d{2}-\\d{2}(T[0-9:.]+(Z|[+-]\\d{2}:\\d{2}))?$",
      +  "type": "string"
      +}
    • addedInput schema / properties / place
      Added value: +{
      +  "description": "Part of the place of performance or buyer location as published, such as Genève or Zürich. Spelling matters; many notices name only a region.",
      +  "maxLength": 100,
      +  "minLength": 3,
      +  "type": "string"
      +}
    • addedInput schema / properties / sectors
      Added value: +{
      +  "description": "Broad sectors grouping every category and CPV code, such as construction or it-telecoms. Prefer this to category IDs for broad needs.",
      +  "items": {
      +    "enum": [
      +      "construction",
      +      "medical",
      +      "it-telecoms",
      +      "energy",
      +      "environment",
      +      "transport",
      +      "facilities",
      +      "food",
      +      "engineering",
      +      "consulting",
      +      "education",
      +      "office",
      +      "culture",
      +      "machinery",
      +      "materials",
      +      "agriculture"
      +    ],
      +    "type": "string"
      +  },
      +  "maxItems": 16,
      +  "type": "array",
      +  "uniqueItems": true
      +}
    • changedInput schema / properties / statuses / description
      Previous value: -"Omit for active statuses. An explicit empty array includes all statuses. OR within each filter, AND between filters and text search."New value: +"Omit for active statuses (open, closing-soon, upcoming, unconfirmed). An explicit empty array includes all statuses. closing-soon is an open notice whose deadline is within 7 days (168 hours); a passed deadline shows as closed. OR within each filter, AND between filters and text search."
    • addedInput schema / properties / valueMax
      Added value: +{
      +  "description": "Highest estimated value; needs currency.",
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / valueMin
      Added value: +{
      +  "description": "Lowest estimated value; needs currency.",
      +  "minimum": 0,
      +  "type": "number"
      +}
  2. Changed14 schema fields changed
    • addedInput schema / properties / limit
      Added value: +{
      +  "default": 20,
      +  "maximum": 50,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / view
      Added value: +{
      +  "default": "compact",
      +  "description": "compact returns what is needed to choose and cite a notice; full returns whole records (notice text, facts, history), at most 20 per page.",
      +  "enum": [
      +    "compact",
      +    "full"
      +  ],
      +  "type": "string"
      +}
    • removedOutput schema / properties / items / items / properties / originalSource
      Removed value: -{
      -  "additionalProperties": true,
      -  "type": "object"
      -}
    • removedOutput schema / properties / items / items / properties / recordedStatus
      Removed value: -{
      -  "enum": [
      -    "open",
      -    "closing-soon",
      -    "closed",
      -    "awarded",
      -    "cancelled",
      -    "suspended",
      -    "upcoming",
      -    "unconfirmed"
      -  ],
      -  "type": "string"
      -}
    • removedOutput schema / properties / items / items / properties / revision
      Removed value: -{
      -  "type": "integer"
      -}
    • removedOutput schema / properties / items / items / properties / sourceCheckedAt
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / items / items / properties / sourceStatus
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / items / items / properties / sources
      Removed value: -{
      -  "items": {
      -    "additionalProperties": true,
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • removedOutput schema / properties / items / items / properties / stale
      Removed value: -{
      -  "type": "boolean"
      -}
    • changedOutput schema / properties / items / items / required
      Previous value: -[
      -  "id",
      -  "url",
      -  "title",
      -  "summary",
      -  "status",
      -  "recordedStatus",
      -  "locale",
      -  "deadline",
      -  "originalSource",
      -  "sources",
      -  "modifiedAt"
      -]New value: +[
      +  "id",
      +  "url",
      +  "title",
      +  "summary",
      +  "status",
      +  "locale",
      +  "deadline",
      +  "modifiedAt"
      +]
    • changedOutput schema / properties / items / maxItems
      Previous value: -20New value: +50
    • removedOutput schema / properties / limit / enum
      Removed value: -[
      -  20
      -]
    • addedOutput schema / properties / limit / maximum
      Added value: +50
    • addedOutput schema / properties / limit / minimum
      Added value: +1
  3. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds substantial behavior: default/max page size, the requirement to read each nextPage before treating a list as complete, the total-vs-procedures counting semantics, how sort=deadline treats date-only deadlines, and how q tokenizes and matches accents/compounds. That is real context beyond the structured fields.

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

Conciseness4/5

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

The purpose and scope lead, followed by pagination, semantics, and recovery advice in roughly descending importance. It is dense and on the long side for a search tool, but nearly every sentence carries non-redundant information; only minor trimming would be possible.

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?

For an 18-parameter, all-optional search tool with an output schema and full annotation coverage, the description supplies the filtering semantics, pagination contract, result-counting caveats, and zero-result interpretation. Nothing an agent needs to call it correctly is missing.

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 only 56%, so the description must compensate, and it does for the highest-risk parameters: q's word/compound/accents matching, the sectors-vs-cpv-vs-categories preference, and sort=deadline behavior. A few parameters (buyer, countries, page) get no additional explanation, but the ambiguous ones are clarified well above baseline.

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 precise verb (Search) plus resource (published tender notices) and enumerates the filterable facets, then explicitly routes the agent to get_public_tender for notice text and history. An agent can distinguish it from the get_/list_ siblings without opening any 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 concrete when-to-use routing ('read get_public_tender for notice text, facts, related notices and history'), selection advice among filters ('for broad needs prefer sectors or cpv over category IDs'), and even failure recovery ('a zero result can mean no coverage, a narrow filter or different wording: widen filters or try source-language keywords'). This is exactly the guidance an agent needs before choosing filters.

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