Public tenders (EU TED, Armenia) for AI agents: search, details, watchlists, alerts.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer token with your TenderScope MCP key, format: Bearer tsk_mcp_… (create it in the dashboard).
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.
Save a query and filters as a watchlist for ongoing monitoring; new, amended and closing-soon matching tenders are then sent by email (Free plan: daily digest) and/or a signed HTTPS webhook (Pro plan). Returns watchlistId and how many open tenders match right now. Each call creates a new watchlist (the number per plan is limited); manage or delete watchlists in the dashboard.
Watchlist name
Which tenders to watch: the same query and filters as search_tenders (q, countries, cpv, budget, deadlineAfter); filters that match every tender are rejected
Where alerts go: email (default) and/or an HTTPS webhook; webhooks need the Pro plan, Free gets a daily email digest
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Tool list last changed Oct 25, 2026.
Save a query and filters as a watchlist for ongoing monitoring; new, amended and closing-soon matching tenders are then sent by email (Free plan: daily digest) and/or a signed HTTPS webhook (Pro plan). Returns watchlistId and how many open tenders match right now. Each call creates a new watchlist (the number per plan is limited); manage or delete watchlists in the dashboard.
| Argument | Type | Description |
|---|---|---|
| name* | string | Watchlist name |
| filters* | object | Which tenders to watch: the same query and filters as search_tenders (q, countries, cpv, budget, deadlineAfter); filters that match every tender are rejected |
| channels | object | Where alerts go: email (default) and/or an HTTPS webhook; webhooks need the Pro plan, Free gets a daily email digest |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"name",
"filters"
],
"properties": {
"name": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Watchlist name"
},
"filters": {
"type": "object",
"properties": {
"q": {
"type": "string",
"maxLength": 500,
"description": "Free-text query (any language), e.g. \"IT services, Armenia\""
},
"cpv": {
"type": "array",
"items": {
"type": "string",
"pattern": "^\\d{2,8}(-\\d)?$"
},
"maxItems": 50,
"description": "CPV codes or prefixes (e.g. [\"72\", \"48\"])"
},
"countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z]{2}$"
},
"maxItems": 50,
"description": "Buyer countries, ISO 3166-1 alpha-2 (e.g. [\"DE\", \"AM\"])"
},
"maxBudget": {
"type": "number",
"minimum": 0,
"description": "Maximum estimated budget, in the tender currency"
},
"minBudget": {
"type": "number",
"minimum": 0,
"description": "Minimum estimated budget, in the tender currency"
},
"deadlineAfter": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
}
],
"description": "Only tenders whose deadline is after this ISO 8601 date/datetime"
},
"budgetCurrency": {
"enum": [
"EUR",
"USD",
"GBP",
"CHF",
"NOK",
"ISK",
"SEK",
"DKK",
"PLN",
"CZK",
"HUF",
"RON",
"BGN",
"AMD",
"RUB"
],
"type": "string",
"description": "Currency of minBudget/maxBudget (ISO 4217). When set, each tender budget is converted at fixed reference rates (updated quarterly), so EU (EUR, PLN, SEK…), Armenian (AMD) and Russian (RUB) tenders compare fairly; tenders in other currencies are skipped. When omitted, budgets are compared in each tender's own currency."
}
},
"description": "Which tenders to watch: the same query and filters as search_tenders (q, countries, cpv, budget, deadlineAfter); filters that match every tender are rejected"
},
"channels": {
"type": "object",
"default": {
"email": true
},
"properties": {
"email": {
"type": "boolean",
"default": true,
"description": "Send alerts by email"
},
"webhook": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "HTTPS endpoint for signed JSON alerts"
}
},
"description": "Where alerts go: email (default) and/or an HTTPS webhook; webhooks need the Pro plan, Free gets a daily email digest"
}
}
}List alerts from your watchlists for the last 30 days on tenders that are still open, nearest deadline first (up to 50). Does not mark alerts as read. Empty until you create a watchlist with add_to_watchlist.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Get the full card of one tender: status, deadline, budget, what is procured (subject), lots with prices and CPV codes, links to tender documents. Use the id from search_tenders results. On the Free plan, CPV codes, lots and document links are omitted.
| Argument | Type | Description |
|---|---|---|
| id* | string | Tender id from search_tenders results |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Tender id from search_tenders results"
}
}
}Search open public procurement tenders (government tenders, госзакупки, тендеры) from official portals: EU TED and Armenia ARMEPS (armeps.am, gnumner.am). Free text in English, Russian or Armenian, optional filters: country, CPV/OKPD2 codes, budget, deadline. Returns up to 20 short cards; "subject" lists the lot names when the title alone does not say what is procured. Words are matched in the title, lot names and buyer. Budgets are in each tender's own currency (Armenia: AMD, from the invitation document); to compare budgets across countries, set budgetCurrency (e.g. "EUR") with minBudget/maxBudget.
| Argument | Type | Description |
|---|---|---|
| q* | string | Free-text query in English, Russian or Armenian, e.g. "IT services, deadline > week" |
| cpv | array | CPV codes or prefixes (e.g. ["72", "48"]) |
| limit | integer | Number of results, 1–20 (default 10) |
| countries | array | Buyer countries, ISO 3166-1 alpha-2 (e.g. ["DE", "AM"]) |
| maxBudget | number | Maximum estimated budget, in the tender currency |
| minBudget | number | Minimum estimated budget, in the tender currency |
| deadlineAfter | any |
| Only tenders whose deadline is after this ISO 8601 date/datetime |
| budgetCurrency | string | Currency of minBudget/maxBudget (ISO 4217). When set, each tender budget is converted at fixed reference rates (updated quarterly), so EU (EUR, PLN, SEK…), Armenian (AMD) and Russian (RUB) tenders compare fairly; tenders in other currencies are skipped. When omitted, budgets are compared in each tender's own currency. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"maxLength": 500,
"description": "Free-text query in English, Russian or Armenian, e.g. \"IT services, deadline > week\""
},
"cpv": {
"type": "array",
"items": {
"type": "string",
"pattern": "^\\d{2,8}(-\\d)?$"
},
"maxItems": 50,
"description": "CPV codes or prefixes (e.g. [\"72\", \"48\"])"
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 20,
"minimum": 1,
"description": "Number of results, 1–20 (default 10)"
},
"countries": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z]{2}$"
},
"maxItems": 50,
"description": "Buyer countries, ISO 3166-1 alpha-2 (e.g. [\"DE\", \"AM\"])"
},
"maxBudget": {
"type": "number",
"minimum": 0,
"description": "Maximum estimated budget, in the tender currency"
},
"minBudget": {
"type": "number",
"minimum": 0,
"description": "Minimum estimated budget, in the tender currency"
},
"deadlineAfter": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
}
],
"description": "Only tenders whose deadline is after this ISO 8601 date/datetime"
},
"budgetCurrency": {
"enum": [
"EUR",
"USD",
"GBP",
"CHF",
"NOK",
"ISK",
"SEK",
"DKK",
"PLN",
"CZK",
"HUF",
"RON",
"BGN",
"AMD",
"RUB"
],
"type": "string",
"description": "Currency of minBudget/maxBudget (ISO 4217). When set, each tender budget is converted at fixed reference rates (updated quarterly), so EU (EUR, PLN, SEK…), Armenian (AMD) and Russian (RUB) tenders compare fairly; tenders in other currencies are skipped. When omitted, budgets are compared in each tender's own currency."
}
}
}