Search public procurement notices from 17 sources across Germany, the EU and the UK. Read-only.
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.
Stored notice count per buyer country (ISO alpha-3) across the whole index. Pass min_count to drop countries with only a handful of notices.
Only return countries with at least this many stored notices.
Stored notice count per buyer country (ISO alpha-3) across the whole index. Pass min_count to drop countries with only a handful of notices.
| Argument | Type | Description |
|---|---|---|
| min_count | integer | Only return countries with at least this many stored notices. |
{
"type": "object",
"properties": {
"min_count": {
"type": "integer",
"default": 0,
"minimum": 0,
"description": "Only return countries with at least this many stored notices."
}
},
"additionalProperties": false
}Full-text search over stored tender titles, descriptions, and buyers.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| query* | string |
{
"type": "object",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"default": 5
},
"query": {
"type": "string"
}
},
"additionalProperties": false
}Fetch one tender by its id (as returned by the search tools), optionally with a cached AI summary.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| summary_lang | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"summary_lang": {
"enum": [
"en",
"de"
],
"type": "string"
}
},
"additionalProperties": false
}Search live public tender previews. Filter by ISO alpha-3 country, CPV codes (full 8-digit codes match exactly, shorter numeric prefixes such as '45' match whole divisions), deadline window and contract value. summary_lang attaches cached AI summaries in that language.
| Argument | Type | Description |
|---|---|---|
| cpv | string | Comma-separated CPV codes or division prefixes, e.g. '45' or '72000000' |
| limit | integer | |
| search | string | |
| country | string | ISO alpha-3 buyer country, e.g. FRA |
| min_score | integer | |
| summary_lang | string | |
| maximum_value_eur | number | |
| minimum_value_eur | number | |
| deadline_within_days | integer |
Live status of connected procurement sources: implementation status, last successful poll and stored notice count. Honest coverage instead of claims. Pass source to check one portal instead of all.
| Argument | Type | Description |
|---|---|---|
| source | string | Limit to one source key, e.g. 'ted', 'bund', 'doe'. |
{
"type": "object",
"properties": {
"source": {
"type": "string",
"description": "Limit to one source key, e.g. 'ted', 'bund', 'doe'."
}
},
"additionalProperties": false
}Return the AI summary (title + max two sentences) of a tender in English or German. Labelled as AI-generated; the original notice prevails. Cached per tender and language; generating a NEW summary requires an API key (free tier is enough), anonymous callers get cached ones.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| lang | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"lang": {
"enum": [
"en",
"de"
],
"type": "string",
"default": "en"
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"cpv": {
"type": "string",
"description": "Comma-separated CPV codes or division prefixes, e.g. '45' or '72000000'"
},
"limit": {
"type": "integer",
"default": 5
},
"search": {
"type": "string"
},
"country": {
"type": "string",
"default": "DEU",
"description": "ISO alpha-3 buyer country, e.g. FRA"
},
"min_score": {
"type": "integer",
"default": 60
},
"summary_lang": {
"enum": [
"en",
"de"
],
"type": "string"
},
"maximum_value_eur": {
"type": "number",
"minimum": 0
},
"minimum_value_eur": {
"type": "number",
"minimum": 0
},
"deadline_within_days": {
"type": "integer",
"maximum": 365,
"minimum": 1
}
},
"additionalProperties": false
}