Skip to main content
Glama

Ausschreibungen suchen

search_tenders
Read-onlyIdempotent

Search German public tenders like vergabeweiser.de/suche. Free text in German may contain a trade and a place ("Gebäudereinigung Rosenheim", "Dach 25 km um 90402"). Returns 20 results per page with deadline, buyer, place, estimated value and the page URL. result.framework_max is the ceiling of a framework agreement, never an award sum.

Input Schema

NameRequiredDescriptionDefault
landNoBundesland slug from list_categories, e.g. bayern
pageNoResult page, 20 per page
sortNofrist: next deadline first, neu: newest, wert: highest value, treffer: relevance
placeNoPlace: city, postcode or its first digits, Kreis or Bundesland (name or code), e.g. "Rosenheim", "90402", "904", "Bayern", "BY". Also as people write it: with a radius ("München 25 km", "50 km um München"), with words around it ("Raum Stuttgart", "Nürnberg und Umgebung"), postcode and city ("80331 München"), the Stadt or Landkreis of a name ("Fürth Stadt", "München Land"), part of a city ("Berlin-Mitte" = Berlin), a list ("Köln/Bonn" = Köln). "Deutschland" and "bundesweit" mean no place. A name several places share usually means the larger town ("Halle" = Halle (Saale)) or the Landkreis of that name ("Harburg"); another one with its Kreis, Land or qualifier: "Halle (Landkreis Holzminden)", "Halle (Westf.)", "Halle NRW", "Auerbach (Oberpfalz)". understood.place in the result says how it was read, understood.unknown_place that it was not
queryNoFree text in German: trade, subject, buyer name, optionally a place, e.g. "Unterhaltsreinigung Schule München"
gewerkNoTrade slug from list_categories, e.g. gebaeudereinigung
statusNooffen: open (default), bald: deadline within 7 days, ergebnisse: awarded or ended, alle: all
procedureNotw: with Teilnahmewettbewerb, einladung: by invitation only
radius_kmNoRadius around place in km, default 50. Goes before a radius written into place
with_valueNoOnly tenders with an estimated value or award sum
buyer_groupNoOnly tenders of a buyer group: bund (federal bodies incl. Bundeswehr and Autobahn GmbH), bundeswehr, autobahn-gmbh, deutsche-bahn, fraunhofer, aok, deutsche-rentenversicherung, krankenhaeuser (hospitals), hochschulen (universities), polizei, stadtwerke; by title: schulen (schools), kitas; eu-weit: only tenders with an EU-wide notice

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / place / description
      Previous value: -"Place: city, postcode, Kreis or Bundesland, e.g. \"Rosenheim\", \"90402\", \"Bayern\". A name several places share usually means the larger town (\"Halle\" = Halle (Saale)) or the Landkreis of that name (\"Harburg\"); another one with its Kreis or qualifier: \"Halle (Landkreis Holzminden)\", \"Halle (Westf.)\", \"Auerbach (Oberpfalz)\""New value: +"Place: city, postcode or its first digits, Kreis or Bundesland (name or code), e.g. \"Rosenheim\", \"90402\", \"904\", \"Bayern\", \"BY\". Also as people write it: with a radius (\"München 25 km\", \"50 km um München\"), with words around it (\"Raum Stuttgart\", \"Nürnberg und Umgebung\"), postcode and city (\"80331 München\"), the Stadt or Landkreis of a name (\"Fürth Stadt\", \"München Land\"), part of a city (\"Berlin-Mitte\" = Berlin), a list (\"Köln/Bonn\" = Köln). \"Deutschland\" and \"bundesweit\" mean no place. A name several places share usually means the larger town (\"Halle\" = Halle (Saale)) or the Landkreis of that name (\"Harburg\"); another one with its Kreis, Land or qualifier: \"Halle (Landkreis Holzminden)\", \"Halle (Westf.)\", \"Halle NRW\", \"Auerbach (Oberpfalz)\". understood.place in the result says how it was read, understood.unknown_place that it was not"
    • changedInput schema / properties / radius_km / description
      Previous value: -"Radius around place in km, default 50"New value: +"Radius around place in km, default 50. Goes before a radius written into place"
  2. First observed

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds valuable non-obvious context: results are paginated at 20 per page, include deadline, buyer, place, estimated value and URL, and 'result.framework_max' is explicitly a framework ceiling, never an award sum. It does not cover rate limits or auth, but for a read-only search that is a minor gap.

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?

Four sentences, front-loaded with the core action and scope. Each sentence adds distinct value: the analogue, free-text examples, return format, and the framework_max caveat. No waste or repetition.

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

Completeness4/5

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

With 11 optional parameters, 100% schema coverage and no output schema, the description does a good job explaining the search surface and key return fields. It is nearly complete, though it could say a bit more about pagination limits or output fields such as understood.place, which currently live only inside the place schema description.

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?

Schema description coverage is 100%, so the schema already documents all 11 parameters in detail, including the nuanced place interpretation rules. The description only restates that free text may contain a trade and a place, which the query and place schema fields already explain; it adds no parameter syntax or edge-case behavior beyond the structured fields.

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 opens with a specific verb and resource: 'Search German public tenders', and clarifies scope with the real-world analogue 'like vergabeweiser.de/suche'. An agent can immediately tell this is the free-text search tool, distinct from siblings like get_tender or expiring_contracts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

It gives useful examples of free-text structure ('Gebäudereinigung Rosenheim', 'Dach 25 km um 90402') and explains the return format, which implies usage. However, it never explicitly says when to choose this over sibling tools such as get_tender, expiring_contracts, or list_categories, and offers no exclusions or prerequisites.

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