Skip to main content
Glama

Victano: EU tenders and grant calls

Search tenders and grant calls

search_opportunities
Read-onlyIdempotent

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

TableJSON 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.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds beyond that: relevance ranking, compact cards with `summary_cut` marking cut summaries, and the requirement to search in the notice's own language. These are useful behavioral traits not derivable from the annotations.

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

Conciseness5/5

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

The description is four sentences, front-loaded with the core search function, then downstream usage and two high-value behavioral caveats. There is no filler; every sentence contributes either scope, workflow, result-format, or language handling.

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, this is unusually complete: it covers ranking, card presentation, truncation behavior, language handling, and downstream workflow. The only residual gap is that the exact return envelope is not described explicitly, but compact cards, `summary_cut`, and `max_chars` behavior give enough guidance for correct invocation.

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

Parameters4/5

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

With 72% schema coverage and rich field descriptions, the schema already does heavy lifting. The main description adds global semantics the schema lacks: relevance-ranked matching by subject and the filter categories (country, CPV, status, deadline, value, region). Parameter descriptions further clarify edge cases like NUTS exclusion, value conversion, and multi-lot collapse.

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?

The description opens with a specific verb and resource: 'Search open public tenders and EU grant calls by subject, ranked by relevance'. It names the filter dimensions and explicitly chains to sibling tools with 'then get_opportunity or read_document', making it clear this is the search step, not a retrieval step.

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?

It gives clear usage context: use it to find notices worth a decision, then proceed to get_opportunity or read_document. It adds a practical constraint—search in the notice's own language and consult research_guide for the trade lexicon—but does not explicitly spell out when not to use this tool versus those siblings.

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