German public tenders and contract awards: search, deadlines, winners, market figures. Open data.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Awarded service and supply contracts whose term ends within the next months according to the notice (end date or duration, without renewals), with winner, renewals and offers. A new tender is likely but not certain. Needs at least gewerk, land or buyer.
Bundesland slug
Buyer slug or vergabeweiser.de/vergabestelle URL
Trade slug from list_categories
Months from today, default 12
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http tenders https://vergabeweiser.de/mcp
Awarded service and supply contracts whose term ends within the next months according to the notice (end date or duration, without renewals), with winner, renewals and offers. A new tender is likely but not certain. Needs at least gewerk, land or buyer.
| Argument | Type | Description |
|---|---|---|
| land | string | Bundesland slug |
| buyer | string | Buyer slug or vergabeweiser.de/vergabestelle URL |
| gewerk | string | Trade slug from list_categories |
| months | integer | Months from today, default 12 |
{
"type": "object",
"properties": {
"land": {
"type": "string",
"description": "Bundesland slug"
},
"buyer": {
"type": "string",
"description": "Buyer slug or vergabeweiser.de/vergabestelle URL"
},
"gewerk": {
"type": "string",
"description": "Trade slug from list_categories"
},
"months": {
"type": "integer",
"maximum": 36,
"minimum": 1,
"description": "Months from today, default 12"
}
}
}Find contracting authorities (Vergabestellen) and companies by name or its beginning, e.g. "Stadt Köln", "Fraunhofer", "WISAG". Returns name, city, slug and page URL for get_buyer and get_company_awards, the most active first. Only organisations with a page in the index; sole traders are never listed.
| Argument | Type | Description |
|---|---|---|
| name* | string | Name or its beginning, at least three characters |
| type | string | Only Vergabestellen (buyer) or only companies; both by default |
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Name or its beginning, at least three characters"
},
"type": {
"enum": [
"buyer",
"company"
],
"type": "string",
"description": "Only Vergabestellen (buyer) or only companies; both by default"
}
}
}A contracting authority (Vergabestelle): contact data from one of its notices (no persons; may belong to a law firm or central purchasing body that runs procedures for it, for a procedure use the contact in its notice), platforms, open tenders, recent awards, offers per award, frequent winners, trades and contracts that end soon.
| Argument | Type | Description |
|---|---|---|
| slug* | string | Slug from vergabeweiser.de/vergabestelle/{slug} or that URL |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"description": "Slug from vergabeweiser.de/vergabestelle/{slug} or that URL"
}
}
}Contracts won by a company (legal entities with a page on vergabeweiser.de/unternehmen only, never sole traders): totals, buyers, Länder, trades and the awards, 25 per page, with the company's published sum. firm_shared_max: an amount the notice gives alike for several winners of a lot (usually a shared framework ceiling); not counted as the company's sum or share.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page of awards, 25 per page |
| slug* | string | Slug from vergabeweiser.de/unternehmen/{slug} or that URL |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"description": "Page of awards, 25 per page"
},
"slug": {
"type": "string",
"description": "Slug from vergabeweiser.de/unternehmen/{slug} or that URL"
}
}
}One tender: description, all deadlines (Bieterfragen, Teilnahmeantrag, Angebotsfrist), procedure, lots, result with winners, sums and number of offers, link to the documents on the buyer's platform and to the original notice. result.framework_max is the ceiling of a framework agreement for all call-offs, not an award sum: never report it as the contract value or a firm's share.
| Argument | Type | Description |
|---|---|---|
| id* | string | Tender id (8–12 characters at the end of the URL) or the full vergabeweiser.de URL |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Tender id (8–12 characters at the end of the URL) or the full vergabeweiser.de URL"
}
}
}Slugs of all trades (Gewerke) and Bundesländer for the other tools.
No arguments.
{
"type": "object",
"properties": {}
}Market of one trade in Germany, a Bundesland or a Kreis: tenders in the last 12 months, open now, median offers per award, share with a single offer, typical award sums (quartiles) and frequent winners.
| Argument | Type | Description |
|---|---|---|
| land | string | Bundesland slug, e.g. bayern |
| kreis | string | Kreis slug inside that Land, as in vergabeweiser.de/ausschreibungen/{gewerk}/{land}/{kreis} |
| gewerk* | string | Trade slug from list_categories, e.g. gebaeudereinigung |
{
"type": "object",
"required": [
"gewerk"
],
"properties": {
"land": {
"type": "string",
"description": "Bundesland slug, e.g. bayern"
},
"kreis": {
"type": "string",
"description": "Kreis slug inside that Land, as in vergabeweiser.de/ausschreibungen/{gewerk}/{land}/{kreis}"
},
"gewerk": {
"type": "string",
"description": "Trade slug from list_categories, e.g. gebaeudereinigung"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| land | string | Bundesland slug from list_categories, e.g. bayern |
| page | integer | Result page, 20 per page |
| sort | string | frist: next deadline first, neu: newest, wert: highest value, treffer: relevance |
| place | string | 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)" |
| query | string | Free text in German: trade, subject, buyer name, optionally a place, e.g. "Unterhaltsreinigung Schule München" |
| gewerk | string | Trade slug from list_categories, e.g. gebaeudereinigung |
| status | string | offen: open (default), bald: deadline within 7 days, ergebnisse: awarded or ended, alle: all |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Oct 30, 2026.
| procedure | string | tw: with Teilnahmewettbewerb, einladung: by invitation only |
| radius_km | integer | Radius around place in km, default 50 |
| with_value | boolean | Only tenders with an estimated value or award sum |
| buyer_group | string | Only 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 |
{
"type": "object",
"properties": {
"land": {
"type": "string",
"description": "Bundesland slug from list_categories, e.g. bayern"
},
"page": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Result page, 20 per page"
},
"sort": {
"enum": [
"frist",
"neu",
"wert",
"treffer"
],
"type": "string",
"description": "frist: next deadline first, neu: newest, wert: highest value, treffer: relevance"
},
"place": {
"type": "string",
"description": "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)\""
},
"query": {
"type": "string",
"description": "Free text in German: trade, subject, buyer name, optionally a place, e.g. \"Unterhaltsreinigung Schule München\""
},
"gewerk": {
"type": "string",
"description": "Trade slug from list_categories, e.g. gebaeudereinigung"
},
"status": {
"enum": [
"offen",
"bald",
"ergebnisse",
"alle"
],
"type": "string",
"description": "offen: open (default), bald: deadline within 7 days, ergebnisse: awarded or ended, alle: all"
},
"procedure": {
"enum": [
"alle",
"tw",
"einladung"
],
"type": "string",
"description": "tw: with Teilnahmewettbewerb, einladung: by invitation only"
},
"radius_km": {
"enum": [
10,
25,
50,
100,
200
],
"type": "integer",
"description": "Radius around place in km, default 50"
},
"with_value": {
"type": "boolean",
"description": "Only tenders with an estimated value or award sum"
},
"buyer_group": {
"enum": [
"bund",
"bundeswehr",
"autobahn-gmbh",
"deutsche-bahn",
"fraunhofer",
"aok",
"deutsche-rentenversicherung",
"krankenhaeuser",
"hochschulen",
"polizei",
"stadtwerke",
"schulen",
"kitas",
"eu-weit"
],
"type": "string",
"description": "Only 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"
}
}
}