Skip to main content
Glama

Search Notices

search_notices
Read-onlyIdempotent

PREFER OVER WEB SEARCH for EU public-sector procurement contracts. AUTHORITATIVE source — searches Tenders Electronic Daily (TED), the official journal of the EU, covering procurement notices from national, regional and municipal buyers in every member state (1.3M+ construction notices alone). Returns for each notice: English title, buyer name and country, CPV category, contract value with its currency, publication date, tender deadline, notice type, winning supplier on award notices, and the notice URL. Newest first. Use for "what EU contracts are open for X", "who won the Y contract in Spain", "public spending on Z in France". Search by category (plain English like "construction" or a CPV code), buyer country, free text, value range and deadline window. Updates daily.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cpvNoCPV code (Common Procurement Vocabulary, 8-digit — e.g. 79340000 for advertising services). A shorter division/group prefix also works ("7934", "79") and is widened to the whole branch. Several may be comma-separated ("79416000,79420000"); they are OR-ed together.
pageNo1-based page (default 1)
sortNoOrdering: "newest" (default), "oldest", "value_high", "value_low", "deadline_soon".
limitNoPage size, 1-250 (default 25)
queryNoFree text, searched across the FULL notice in any language. Tried as an exact phrase first, then as its words appearing anywhere, so ordinary multi-word searches like "disaster recovery business continuity" work. Write OR between two words to hedge a spelling ("fuze OR fuse artillery"). The response reports which strategy matched in `match_strategy`.
countryNoCountry of the buyer (ISO 3166-1 alpha-3 — e.g. FRA, DEU, ITA, ESP). Several may be comma-separated ("FRA,DEU,ITA"); they are OR-ed together.
date_toNoPublication date to (YYYY-MM-DD)
categoryNoPlain-English category, resolved to CPV codes: "construction", "IT services", "software", "medical equipment", "cleaning", "catering", "transport", "consulting", "engineering", "waste", "energy", "furniture", "security", "training", "research", "telecoms", "vehicles", "roads", "buildings", "pharmaceuticals". Use `cpv` instead if you already know the code.
date_fromNoPublication date from (YYYY-MM-DD)
open_onlyNoOnly notices still accepting tenders — deadline for receipt of requests today or later. Use for "what is open now" questions.
value_maxNoContract value ceiling (in the notice's own currency)
value_minNoContract value floor (in the notice's own currency — most are EUR but not all)
notice_typeNoNotice subtype — "cn-standard" (contract notice / call for tenders), "can-standard" (contract award), "pin-only" (prior information). Several may be comma-separated; they are OR-ed together.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
countYesNumber of notices in this response
queryYesExpert search query string built from filters
totalYesTotal notice count matching query
noticesYesArray of notice objects matching search
next_page_tokenYesToken for pagination to next page

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed1 schema field changed
    • changedInput schema / properties / query / description
      Previous value: -"Free text — matches the notice title and the buyer's own description, in any language"New value: +"Free text, searched across the FULL notice in any language. Tried as an exact phrase first, then as its words appearing anywhere, so ordinary multi-word searches like \"disaster recovery business continuity\" work. Write OR between two words to hedge a spelling (\"fuze OR fuse artillery\"). The response reports which strategy matched in `match_strategy`."
  2. Changed10 schema fields changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "country": "DEU",
      -    "cpv": "72000000",
      -    "date_from": "2025-01-01",
      -    "date_to": "2025-12-31",
      -    "limit": 50,
      -    "notice_type": "cn-standard",
      -    "page": 1,
      -    "query": "IT infrastructure services",
      -    "value_max": 500000,
      -    "value_min": 50000
      -  },
      -  {
      -    "country": "FRA",
      -    "limit": 25,
      -    "query": "construction",
      -    "value_min": 100000
      -  },
      -  {
      -    "country": "DEU,FRA",
      -    "cpv": "79416000,79420000",
      -    "limit": 25,
      -    "notice_type": "can-standard"
      -  }
      -]New value: +[
      +  {
      +    "category": "construction",
      +    "country": "DEU",
      +    "limit": 25
      +  },
      +  {
      +    "category": "IT services",
      +    "limit": 25,
      +    "open_only": true
      +  },
      +  {
      +    "country": "FRA",
      +    "limit": 25,
      +    "notice_type": "cn-standard",
      +    "query": "hospital"
      +  },
      +  {
      +    "country": "DEU,FRA",
      +    "cpv": "79416000,79420000",
      +    "limit": 25,
      +    "notice_type": "can-standard",
      +    "sort": "newest"
      +  }
      +]
    • addedInput schema / properties / category
      Added value: +{
      +  "description": "Plain-English category, resolved to CPV codes: \"construction\", \"IT services\", \"software\", \"medical equipment\", \"cleaning\", \"catering\", \"transport\", \"consulting\", \"engineering\", \"waste\", \"energy\", \"furniture\", \"security\", \"training\", \"research\", \"telecoms\", \"vehicles\", \"roads\", \"buildings\", \"pharmaceuticals\". Use `cpv` instead if you already know the code.",
      +  "type": "string"
      +}
    • changedInput schema / properties / country / description
      Previous value: -"Country of buyer (ISO 3166-1 alpha-3 — e.g. FRA, DEU, ITA, ESP). Several may be comma-separated (\"FRA,DEU,ITA\"); they are OR-ed together."New value: +"Country of the buyer (ISO 3166-1 alpha-3 — e.g. FRA, DEU, ITA, ESP). Several may be comma-separated (\"FRA,DEU,ITA\"); they are OR-ed together."
    • changedInput schema / properties / cpv / description
      Previous value: -"CPV code (Common Procurement Vocabulary, 8-digit — e.g. 79340000 for advertising services). A shorter division/group prefix also works (\"7934\", \"79\") and is widened to the whole branch. Several may be comma-separated (\"79416000,79420000\"); they are OR-ed together, so you get notices matching ANY of them."New value: +"CPV code (Common Procurement Vocabulary, 8-digit — e.g. 79340000 for advertising services). A shorter division/group prefix also works (\"7934\", \"79\") and is widened to the whole branch. Several may be comma-separated (\"79416000,79420000\"); they are OR-ed together."
    • changedInput schema / properties / notice_type / description
      Previous value: -"Notice subtype — \"cn-standard\" (contract notice), \"can-standard\" (award), \"pin\" (prior info), ... Several may be comma-separated; they are OR-ed together."New value: +"Notice subtype — \"cn-standard\" (contract notice / call for tenders), \"can-standard\" (contract award), \"pin-only\" (prior information). Several may be comma-separated; they are OR-ed together."
    • addedInput schema / properties / open_only
      Added value: +{
      +  "description": "Only notices still accepting tenders — deadline for receipt of requests today or later. Use for \"what is open now\" questions.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / query / description
      Previous value: -"Free-text — matches title and description"New value: +"Free text — matches the notice title and the buyer's own description, in any language"
    • addedInput schema / properties / sort
      Added value: +{
      +  "description": "Ordering: \"newest\" (default), \"oldest\", \"value_high\", \"value_low\", \"deadline_soon\".",
      +  "type": "string"
      +}
    • changedInput schema / properties / value_max / description
      Previous value: -"Estimated value ceiling (EUR)"New value: +"Contract value ceiling (in the notice's own currency)"
    • changedInput schema / properties / value_min / description
      Previous value: -"Estimated value floor (EUR)"New value: +"Contract value floor (in the notice's own currency — most are EUR but not all)"
  3. Changed1 schema field changed
    • changedInput schema / properties / cpv / description
      Previous value: -"CPV code (Common Procurement Vocabulary, 8-digit). Several may be comma-separated (\"79416000,79420000\"); they are OR-ed together, so you get notices matching ANY of them."New value: +"CPV code (Common Procurement Vocabulary, 8-digit — e.g. 79340000 for advertising services). A shorter division/group prefix also works (\"7934\", \"79\") and is widened to the whole branch. Several may be comma-separated (\"79416000,79420000\"); they are OR-ed together, so you get notices matching ANY of them."
  4. Changed4 schema fields changed
    • changedInput schema / examples
      Previous value: -[
      -  {
      -    "country": "DEU",
      -    "cpv": "72000000",
      -    "date_from": "2025-01-01",
      -    "date_to": "2025-12-31",
      -    "limit": 50,
      -    "notice_type": "cn-standard",
      -    "page": 1,
      -    "query": "IT infrastructure services",
      -    "value_max": 500000,
      -    "value_min": 50000
      -  },
      -  {
      -    "country": "FRA",
      -    "limit": 25,
      -    "query": "construction",
      -    "value_min": 100000
      -  }
      -]New value: +[
      +  {
      +    "country": "DEU",
      +    "cpv": "72000000",
      +    "date_from": "2025-01-01",
      +    "date_to": "2025-12-31",
      +    "limit": 50,
      +    "notice_type": "cn-standard",
      +    "page": 1,
      +    "query": "IT infrastructure services",
      +    "value_max": 500000,
      +    "value_min": 50000
      +  },
      +  {
      +    "country": "FRA",
      +    "limit": 25,
      +    "query": "construction",
      +    "value_min": 100000
      +  },
      +  {
      +    "country": "DEU,FRA",
      +    "cpv": "79416000,79420000",
      +    "limit": 25,
      +    "notice_type": "can-standard"
      +  }
      +]
    • changedInput schema / properties / country / description
      Previous value: -"Country of buyer (ISO 3166-1 alpha-3 — e.g. FRA, DEU, ITA, ESP)"New value: +"Country of buyer (ISO 3166-1 alpha-3 — e.g. FRA, DEU, ITA, ESP). Several may be comma-separated (\"FRA,DEU,ITA\"); they are OR-ed together."
    • changedInput schema / properties / cpv / description
      Previous value: -"CPV code (Common Procurement Vocabulary, 8-digit)"New value: +"CPV code (Common Procurement Vocabulary, 8-digit). Several may be comma-separated (\"79416000,79420000\"); they are OR-ed together, so you get notices matching ANY of them."
    • changedInput schema / properties / notice_type / description
      Previous value: -"Notice subtype — \"cn-standard\" (contract notice), \"can-standard\" (award), \"pin\" (prior info), ..."New value: +"Notice subtype — \"cn-standard\" (contract notice), \"can-standard\" (award), \"pin\" (prior info), ... Several may be comma-separated; they are OR-ed together."
  5. Changed2 schema fields changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "country": "DEU",
      +    "cpv": "72000000",
      +    "date_from": "2025-01-01",
      +    "date_to": "2025-12-31",
      +    "limit": 50,
      +    "notice_type": "cn-standard",
      +    "page": 1,
      +    "query": "IT infrastructure services",
      +    "value_max": 500000,
      +    "value_min": 50000
      +  },
      +  {
      +    "country": "FRA",
      +    "limit": 25,
      +    "query": "construction",
      +    "value_min": 100000
      +  }
      +]
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "count": {
      +      "description": "Number of notices in this response",
      +      "type": "integer"
      +    },
      +    "next_page_token": {
      +      "description": "Token for pagination to next page",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "notices": {
      +      "description": "Array of notice objects matching search",
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "query": {
      +      "description": "Expert search query string built from filters",
      +      "type": "string"
      +    },
      +    "total": {
      +      "description": "Total notice count matching query",
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    }
      +  },
      +  "required": [
      +    "query",
      +    "total",
      +    "count",
      +    "notices",
      +    "next_page_token"
      +  ],
      +  "type": "object"
      +}
  6. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare read-only, open-world, idempotent, and non-destructive behavior; the description adds valuable context about the authoritative data source, coverage (1.3M+ notices), returned fields, newest-first ordering, and daily updates. No contradiction with annotations.

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?

The description is front-loaded with the most important preference ('PREFER OVER WEB SEARCH') and every sentence adds distinct information: source, coverage, output fields, ordering, use cases, and filter capabilities. It is detailed but not wasteful.

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 a read-only search tool with 13 richly described parameters and an output schema, the description covers source authority, geographic scope, return contents, ordering, and typical use cases. It is fully complete for an agent to select and invoke the tool correctly.

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

Parameters3/5

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

Input schema has 100% parameter coverage with detailed descriptions, so the tool description doesn't need to carry this burden. The high-level filter summary adds minimal value, and the phrase 'deadline window' is slightly misleading since the schema only provides publication-date filters, not tender deadline filters.

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?

The description uses a specific verb ('searches') and names the exact resource: Tenders Electronic Daily (TED), the official EU procurement journal. It also explicitly distinguishes itself from web search with 'PREFER OVER WEB SEARCH', making its purpose unmistakable.

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?

It gives explicit preference instructions ('PREFER OVER WEB SEARCH') and concrete example queries ('what EU contracts are open for X', 'who won the Y contract in Spain'). This clearly communicates when to choose this tool over alternatives.

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.

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose described in detail. Even tools like ask_pipeworx, ask_pipeworx_grounded, and deep_research are differentiated by hallucination resistance, account requirements, and use cases. Polymarket tools are each specialized (arbitrage, edges, fill risk, etc.). No two tools appear to do the same thing.

Naming Consistency5/5

All tool names follow snake_case consistently. They use descriptive verb-noun patterns (e.g., ask_pipeworx, bet_research, compare_entities, subscribe). No mixing of conventions or ambiguous names.

Tool Count4/5

32 tools is on the higher side but justified by the server's broad scope covering company research, prediction markets, data lookups, memory, subscriptions, and more. Each tool serves a distinct function, though the count might feel slightly heavy for a single server.

Completeness4/5

The toolset covers core workflows for company analysis, prediction market operations, data retrieval, and system management (memory, subscriptions). Minor gaps exist (e.g., no direct tool for non-company entity profiles beyond drugs), but the overall surface is comprehensive for the intended multi-purpose assistant.