Koskamo

Vergabeweiser MCP

An official MCP server operated by Vergabeweiser that provides AI agents with access to German public tender data. It supports searching for tenders, retrieving specific tender details, finding organizations, and accessing market statistics. The server is free to use and does not require user registration.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Vergabeweiser MCP logo, by VergabeweiserVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Vergabeweiser
MCP endpoint (Streamable HTTP)
https://vergabeweiser.de/mcp
Vendor documentation

What you can do with it

  • Search for open tenders by keyword, location, and status
  • Retrieve detailed tender information including deadlines and winners
  • Find public procurement agencies or companies by name
  • Get market statistics for specific trades or regions

Source and maintenance

Vendor evidenceRegistry 1.0.0

Protocol and capabilities

Server
Vergabeweiser 1.0.0
MCP protocol
2025-06-18
Tools
8 advertised
Resources
0 advertised
Resource templates
0 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  },
  "resources": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Public tenders and contract awards in Germany (öffentliche Ausschreibungen und Zuschläge), from the Bekanntmachungsservice of the Datenservice Öffentlicher Einkauf (oeffentlichevergabe.de, CC0), prepared by Vergabeweiser (vergabeweiser.de), an independent free directory, not a public authority. Use search_tenders for open tenders by trade (Gewerk), text and place, get_tender for deadlines, lots, result and the link to the tender documents, find_organisations to look up a Vergabestelle or company by name, get_buyer and get_company_awards for who buys and who wins, market_stats for competition and typical sums, expiring_contracts for contracts that end soon. list_categories gives the slugs for Gewerk and Bundesland. When you answer: cite "Quelle: Bekanntmachungsservice (CC0), Stand {source.stand}" and link the Vergabeweiser page (url). Older tenders can come from TED (Tenders Electronic Daily, © European Union, not CC0): get_tender names it in notice_source; then cite "Quelle: TED, © Europäische Union". Titles with title_ki_generated=true are KI-generiert. The tender notice of the contracting authority is authoritative (maßgeblich ist die Bekanntmachung); documents are only on the authority's platform (documents_url). Sole traders appear only as "Einzelunternehmen aus {Ort}"; never try to identify them. The gewerk is Vergabeweiser's own classification (CPV main code, else title words) and can be wrong; do not present it as stated in the notice. Report facts from the notices; do not rate companies or contracting authorities (e.g. as unreliable, expensive or suspicious). Our processing is CC BY 4.0: name "Vergabeweiser" as the source.

Tools

8 advertised

search_tenders — Ausschreibungen suchen
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

search_tenders input schema
{
  "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 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"
    },
    "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. Goes before a radius written into place"
    },
    "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"
    }
  }
}
search_tenders annotations
{
  "title": "Ausschreibungen suchen",
  "readOnlyHint": true,
  "idempotentHint": true
}
get_tender — Ausschreibung abrufen
Advertised by the server during the last successful anonymous check.
Advertised read-only

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. Do not add up awards[].amount, result.sum is the sum: amount_is_shared_ceiling marks an amount several winners share, never that winner's own sum, amount_covers_several_lots a bid over several lots.

get_tender input schema
{
  "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"
    }
  }
}
get_tender annotations
{
  "title": "Ausschreibung abrufen",
  "readOnlyHint": true,
  "idempotentHint": true
}
find_organisations — Vergabestelle oder Firma nach Namen finden
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

find_organisations input schema
{
  "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"
    }
  }
}
find_organisations annotations
{
  "title": "Vergabestelle oder Firma nach Namen finden",
  "readOnlyHint": true,
  "idempotentHint": true
}
get_buyer — Vergabestelle abrufen
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_buyer input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Slug from vergabeweiser.de/vergabestelle/{slug} or that URL"
    }
  }
}
get_buyer annotations
{
  "title": "Vergabestelle abrufen",
  "readOnlyHint": true,
  "idempotentHint": true
}
get_company_awards — Zuschläge eines Unternehmens
Advertised by the server during the last successful anonymous check.
Advertised read-only

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 the procedure (usually a shared framework ceiling); not counted as the company's sum or share.

get_company_awards input schema
{
  "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"
    }
  }
}
get_company_awards annotations
{
  "title": "Zuschläge eines Unternehmens",
  "readOnlyHint": true,
  "idempotentHint": true
}
market_stats — Marktzahlen
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

market_stats input schema
{
  "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"
    }
  }
}
market_stats annotations
{
  "title": "Marktzahlen",
  "readOnlyHint": true,
  "idempotentHint": true
}
expiring_contracts — Auslaufende Verträge
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

expiring_contracts input schema
{
  "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"
    }
  }
}
expiring_contracts annotations
{
  "title": "Auslaufende Verträge",
  "readOnlyHint": true,
  "idempotentHint": true
}
list_categories — Gewerke und Länder
Advertised by the server during the last successful anonymous check.
Advertised read-only

Slugs of all trades (Gewerke) and Bundesländer for the other tools.

list_categories input schema
{
  "type": "object",
  "properties": {}
}
list_categories annotations
{
  "title": "Gewerke und Länder",
  "readOnlyHint": true,
  "idempotentHint": true
}

Prompts

0 advertised

No prompt definitions available.

Resources

0 advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2094 ms
95th percentile latency
2094 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2094 ms · metadata changed · 8 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http vergabeweiser-mcp https://vergabeweiser.de/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add vergabeweiser-mcp --url https://vergabeweiser.de/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable vergabeweiser-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "vergabeweiser-mcp": {
      "url": "https://vergabeweiser.de/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "vergabeweiser-mcp": {
      "type": "streamableHttp",
      "url": "https://vergabeweiser.de/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start vergabeweiser-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "vergabeweiser-mcp": {
      "type": "http",
      "url": "https://vergabeweiser.de/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http vergabeweiser-mcp https://vergabeweiser.de/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "vergabeweiser-mcp": {
      "url": "https://vergabeweiser.de/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "vergabeweiser-mcp": {
      "serverUrl": "https://vergabeweiser.de/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Vergabeweiser MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Vergabeweiser MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing