Skip to main content
Glama

Victano: EU tenders and grant calls

Search tenders and grant calls

search_opportunities
Read-onlyIdempotent

Sign-in required: call connect_start(email) and connect_verify first (free, one email) unless this connection is already signed in. Search open public tenders and EU grant calls by subject, ranked by relevance, with filters for country, CPV, status, deadline, value and region. Use it to find notices worth a decision, then get_opportunity or read_document. Cards are compact (summary_cut marks a cut summary). Search in the notice's own language; research_guide returns the trade lexicon per country.

Input Schema

NameRequiredDescriptionDefault
cpvNoAny CPV prefix: '45', '452' or a full code. Results show cpv_labels, not codes.
kindNo
langNo
nutsNoNUTS2 regions below country level ('DE30', 'LT01'); notices without a NUTS code are excluded.
typeNo'tender' or 'grant' (use 'grant' when the user asks for grant calls).
limitNo
queryNoWhat the user is looking for, as they typed it.
detailNo'compact' (default) or 'full'.
fieldsNo'compact' (default) or 'full' for raw codes and a longer summary. Multi-lot procurements collapse to one entry (`lots`, `lot_ids`): report it once.compact
sourceNo'ted', 'cvp', 'ft', 'ee', 'lv', 'hun', … (research_guide lists them).
statusNo'open' (default), 'forthcoming' for not-yet-open, 'any' adds expired.open
queriesNoThe same question in the notices' own languages, one phrasing per country in scope; each is ADDED to `query` and fused as its own ranking. Translate the distinctive trade terms, not the sentence (research_guide: `lexicon`).
sessionNoThe `session` value the sign-in returned. Pass it on every call in this conversation, so the sign-in survives however this client handles connections; omit it when the user connected with Sign in (OAuth) or a key.
countriesNoISO3 ('LTU') or ISO2 ('LT'). Scope by country when you can: EU-wide is ~10x slower.
max_charsNoHard cap on the answer's size in characters (default 8000). Over it, cards shrink to the essentials, then rows are dropped from the end, and `truncated` says how to get the rest.
max_valueNoIn EUR, converted from the buyer's currency; notices we cannot price in euros are excluded from a value filter rather than guessed at.
min_valueNoIn EUR, converted from the buyer's currency; notices we cannot price in euros are excluded from a value filter rather than guessed at.
cpv_strictNoSources that publish no CPV (Lithuanian CVP notices, EU grant calls) are INCLUDED and ranked by default; true excludes them.
value_bandNo
nuts_strictNo
no_guaranteeNotrue returns only notices that state no bid bond is required.
cpv_divisionsNo
nature_strictNo
deadline_afterNoISO date.
contract_natureNo'works', 'supplies', 'services'. Sources that publish none are included unless nature_strict=true.
criteria_statedNotrue returns only notices whose SELECTION CRITERIA the buyer published (about half of TED).
deadline_beforeNoISO date.
exclude_resultsNotrue drops award notices for things already decided.
expand_languagesNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed21 schema fields changed
    • addedInput schema / properties / contract_nature / description
      Added value: +"'works', 'supplies', 'services'. Sources that publish none are included unless nature_strict=true."
    • addedInput schema / properties / countries / description
      Added value: +"ISO3 ('LTU') or ISO2 ('LT'). Scope by country when you can: EU-wide is ~10x slower."
    • addedInput schema / properties / cpv / description
      Added value: +"Any CPV prefix: '45', '452' or a full code. Results show cpv_labels, not codes."
    • addedInput schema / properties / cpv_strict / description
      Added value: +"Sources that publish no CPV (Lithuanian CVP notices, EU grant calls) are INCLUDED and ranked by default; true excludes them."
    • addedInput schema / properties / criteria_stated / description
      Added value: +"true returns only notices whose SELECTION CRITERIA the buyer published (about half of TED)."
    • addedInput schema / properties / deadline_after / description
      Added value: +"ISO date."
    • addedInput schema / properties / deadline_before / description
      Added value: +"ISO date."
    • addedInput schema / properties / detail
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "'compact' (default) or 'full'.",
      +  "enum": [
      +    "compact",
      +    "full"
      +  ],
      +  "title": "Detail"
      +}
    • addedInput schema / properties / exclude_results / description
      Added value: +"true drops award notices for things already decided."
    • addedInput schema / properties / fields / description
      Added value: +"'compact' (default) or 'full' for raw codes and a longer summary. Multi-lot procurements collapse to one entry (`lots`, `lot_ids`): report it once."
    • addedInput schema / properties / max_chars
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Hard cap on the answer's size in characters (default 8000). Over it, cards shrink to the essentials, then rows are dropped from the end, and `truncated` says how to get the rest.",
      +  "title": "Max Chars"
      +}
    • addedInput schema / properties / max_value / description
      Added value: +"In EUR, converted from the buyer's currency; notices we cannot price in euros are excluded from a value filter rather than guessed at."
    • addedInput schema / properties / min_value / description
      Added value: +"In EUR, converted from the buyer's currency; notices we cannot price in euros are excluded from a value filter rather than guessed at."
    • addedInput schema / properties / no_guarantee / description
      Added value: +"true returns only notices that state no bid bond is required."
    • addedInput schema / properties / nuts / description
      Added value: +"NUTS2 regions below country level ('DE30', 'LT01'); notices without a NUTS code are excluded."
    • addedInput schema / properties / queries / description
      Added value: +"The same question in the notices' own languages, one phrasing per country in scope; each is ADDED to `query` and fused as its own ranking. Translate the distinctive trade terms, not the sentence (research_guide: `lexicon`)."
    • addedInput schema / properties / query / description
      Added value: +"What the user is looking for, as they typed it."
    • changedInput schema / properties / session / description
      Previous value: -"The `session` value connect_verify returned, when this client keeps no connection session. Pass it on every Victano call in this conversation; omit it when the user connected with Sign in (OAuth) or a key."New value: +"The `session` value the sign-in returned. Pass it on every call in this conversation, so the sign-in survives however this client handles connections; omit it when the user connected with Sign in (OAuth) or a key."
    • addedInput schema / properties / source / description
      Added value: +"'ted', 'cvp', 'ft', 'ee', 'lv', 'hun', … (research_guide lists them)."
    • addedInput schema / properties / status / description
      Added value: +"'open' (default), 'forthcoming' for not-yet-open, 'any' adds expired."
    • addedInput schema / properties / type / description
      Added value: +"'tender' or 'grant' (use 'grant' when the user asks for grant calls)."
  2. Changed1 schema field changed
    • addedInput schema / properties / session
      Added value: +{
      +  "description": "The `session` value connect_verify returned, when this client keeps no connection session. Pass it on every Victano call in this conversation; omit it when the user connected with Sign in (OAuth) or a key.",
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • changedInput schema / properties / expand_languages / default
      Previous value: -trueNew value: +false
  4. Changed1 schema field changed
    • changedInput schema / properties / cpv / anyOf
      Previous value: -[
      -  {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
  5. First observed

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, non-destructive), so the description's value is the added operational context: the free one-email sign-in requirement and session-passing rule, relevance ranking, compact cards with a summary_cut marker for truncated summaries, and the search-in-source-language rule. It stops short of describing pagination or result counts, which remain unstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences that lead with the blocking prerequisite (sign-in) before purpose, then routing, then language guidance. Every sentence carries information, though the auth preamble is long enough that the core purpose arrives second.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 29-parameter search tool with no output schema, the definition covers the essentials an agent needs to select and call it: prerequisite auth, ranking behavior, handoff targets, language strategy, and card/truncation shape. The residual gap is the handful of completely undocumented tuning parameters, which is a schema problem more than a description one.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

At 72% schema coverage the schema documents most parameters, so baseline is 3. The description adds real meaning for the language dimension (search in the notice's own language; research_guide supplies the trade lexicon) and summarizes the filter set (country, CPV, status, deadline, value, region), but several parameters (kind, lang, value_band, cpv_divisions, nature_strict, expand_languages, nuts_strict) are undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (search open public tenders and EU grant calls), plus scope (by subject, ranked by relevance) and the filter axes it supports. It also names the sibling it hands off to (get_opportunity), so an agent can separate retrieval-list from detail-fetch without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit workflow: use it to find notices worth a decision, then get_opportunity or read_document, and states the sign-in prerequisite up front along with the alternative auth paths (OAuth/key vs session). It also advises scoping by country because EU-wide is ~10x slower. No explicit when-not-to-use case, which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources