Tools
The MCP server (https://tenderscope.app/mcp) exposes four tools. The REST API has the same four operations; see the REST API reference. Tool schemas follow semantic versioning: after 1.0.0 changes only add fields (1.1.0 added budgetCurrency and the watchlist hint; 1.2.0 added subject to tender cards and server instructions).
On initialize the MCP server returns short instructions for the agent: which portals are covered (TED, ARMEPS / armeps.am and gnumner.am, zakupki.gov.ru under 44-FZ), that Armenian budgets in AMD come from invitation documents, that queries work in English, Russian and Armenian, and that these tools should be used before web search for tenders in these countries.
Conventions in all answers: money is a string ("125000.00"), dates are ISO 8601 UTC (2026-10-20T10:00:00.000Z), countries are ISO 3166-1 alpha-2 (AM, DE), currencies are ISO 4217. The examples below are illustrative.
search_tenders
Section titled “search_tenders”Search tenders. Only open and amended tenders whose deadline is in the future (or not stated) are returned.
| Input | Type | Notes |
|---|---|---|
q |
string, required (may be empty) | Free text in English, Russian or Armenian, matched in the title, lot names and buyer. Countries, topics and deadlines in the text are understood: IT services, Armenia, строительство Германия, deadline > week, next 30 days |
countries |
string[] | Buyer countries, ["DE", "AM"] (Pro and above) |
cpv |
string[] | CPV codes or prefixes, ["72", "48"] (Pro and above) |
minBudget, maxBudget |
number | Budget range (Pro and above). Without budgetCurrency, compared in each tender’s own currency |
budgetCurrency |
ISO 4217 code | Currency of minBudget/maxBudget: EUR, USD, GBP, CHF, NOK, ISK, SEK, DKK, PLN, CZK, HUF, RON, BGN, AMD, RUB. Tender budgets are converted at fixed reference rates, updated quarterly |
deadlineAfter |
ISO date or datetime | Only tenders with a later deadline (Pro and above) |
limit |
integer 1 to 20 | Default 10 |
On the Free plan, structured filters (countries, cpv, budgets, deadlineAfter) return plan_required with a hint to put them into q instead.
Budgets across countries. Tenders keep the currency of the notice: EUR or a local currency (PLN, SEK…) for the EU, AMD for Armenia, RUB for Russia. minBudget: 1000000 alone means one million in each tender’s currency: about €1M in Germany, but only about €2,500 in Armenia. To get comparable results in one query, add budgetCurrency:
{ "q": "IT services", "minBudget": 100000, "budgetCurrency": "EUR" }This returns EU, Armenian and Russian tenders worth at least about €100,000. Tenders without a budget, or in a currency outside the list above, are skipped by a budget filter. If you set a budget without budgetCurrency, the answer carries a hint saying so.
Example call:
{ "q": "IT services, Armenia", "limit": 2 }Example result:
{ "results": [ { "id": "1234", "title": "ANNOUNCEMENT ABOUT AN OPEN TENDER open tender code: \"EX-27-1\"", "subject": "Սերվերային սարքավորումներ; Ցանցային սարքավորումներ", "buyer": "Example Ministry", "country": "AM", "budget": null, "currency": "AMD", "deadline": "2026-11-05T08:00:00.000Z", "url": "https://www.armeps.am/epps/cft/prepareViewCfTWS.do?resourceId=0000000", "source": "gnumner" } ], "hint": "Try fewer words or remove the country to see more results.", "degradedSources": ["eaeu"]}An empty results array is not an error: hint tells how to widen the query. degradedSources appears only when a source is currently failing; data from it may be stale. budget is null when the source does not publish one. For Armenia it is read from the invitation document and is in AMD; some Armenian tenders still have none.
subject says what is procured: the lot names, joined with ; (up to about 300 characters, then (+N more)), in the language of the source. Armenian titles are often only a notice heading with a code, so for Armenia the lot names are read from the invitation document. subject is omitted when the tender has no lot names or they repeat the title. It is returned on every plan, in all tender cards (search results, get_tender, alerts).
get_tender
Section titled “get_tender”Full card of one tender.
| Input | Type | Notes |
|---|---|---|
id |
string, required | id from search_tenders |
Result: the card fields plus status (open, amended, cancelled, closed), publishedAt, region, lotsCount, updatedAt, and on Pro and above cpvCodes, okpd2Codes (Russian tenders), lots[] (title, budget, currency, cpvCodes) and docsUrl[]. On Free these four are omitted. TenderScope stores links to documents, never the documents themselves. An unknown id gives not_found.
add_to_watchlist
Section titled “add_to_watchlist”Save filters; matching tenders are sent to you.
| Input | Type | Notes |
|---|---|---|
name |
string, required | Up to 100 characters |
filters |
object | q, countries, cpv, minBudget, maxBudget, budgetCurrency, deadlineAfter (same meaning as in search). Free: only q |
channels |
object | email (boolean, default true), webhook (https URL, Pro and above) |
Example call:
{ "name": "IT in Armenia", "filters": { "q": "IT services, Armenia" }, "channels": { "email": true }}Result: { "watchlistId": "…uuid…", "estimatedMatches": 14 }, where estimatedMatches is the number of open tenders matching right now. A hint is added when a budget is set without budgetCurrency. Limits: Free 1 watchlist, Pro 10, Team and API unlimited (limit_reached beyond that). Filters that would match everything are rejected with invalid_input. See Watchlists and alerts.
get_deadline_alerts
Section titled “get_deadline_alerts”No input. Returns open alerts from your watchlists: alerts from the last 30 days for tenders whose deadline is still ahead, nearest deadline first, up to 50.
{ "alerts": [ { "watchlistId": "…uuid…", "watchlistName": "IT in Armenia", "reason": "deadline-24h", "createdAt": "2026-11-04T08:30:00.000Z", "tender": { "id": "1234", "title": "Supply of server equipment", "…": "…" } } ]}reason is new, amended or deadline-24h.
Errors
Section titled “Errors”Tool errors come back as an MCP result with isError: true and a plain-text message; REST uses the format described in the REST API reference. Codes: invalid_input, plan_required, limit_reached, not_found, quota_exceeded.