# Victano: EU tenders and grant calls (remote · mcp.victano.com)

EU tenders and grant calls, matched to your company and qualified, inside the AI you already use

- Trust score: 78/100 (medium)
- Change this week: 0
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-04

## Components

- remote · `mcp.victano.com`: 78/100 (this document), [markdown](https://verifymcp.io/servers/com-victano-victano/mcp.md), [page](https://verifymcp.io/servers/com-victano-victano/mcp)

## Channel facts

- Endpoint: `https://mcp.victano.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.4.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-04.

- **Endpoint Security**: 63/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (delete_account).
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 72/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 9855 tokens (~447/item across 22 items; 22 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 100/100
  - No destabilizing schema changes in the last 30 days.
- **Tool Coverage**: 75/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 26% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 23 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the Victano: EU tenders and grant calls MCP server?

Victano: EU tenders and grant calls is a hosted endpoint at https://mcp.victano.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http com-victano-victano 'https://mcp.victano.com/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "com-victano-victano": {
      "url": "https://mcp.victano.com/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-victano-victano": {
      "type": "http",
      "url": "https://mcp.victano.com/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.com-victano-victano]
url = "https://mcp.victano.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-victano-victano": {
      "type": "remote",
      "url": "https://mcp.victano.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-victano-victano --url 'https://mcp.victano.com/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-victano-victano:
    url: "https://mcp.victano.com/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "com-victano-victano": {
      "Transport": "http",
      "Url": "https://mcp.victano.com/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-victano-victano -t streamable-http -u 'https://mcp.victano.com/mcp'
```

### Other

```json
{
  "mcpServers": {
    "com-victano-victano": {
      "type": "http",
      "url": "https://mcp.victano.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-01 (score 78, +7)

- [security improvement] Judged manipulation: unverified → pass
- [functional improvement] Schema quality: unverified → excellent

### 2026-09-30 (score 71, −7)

- [security regression] Judged manipulation: pass → unverified
- [functional regression] Schema quality: excellent → unverified
- [cosmetic] “submit_feedback” reworded the description of “tool”

### 2026-09-28 (score 78, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-09-25 (score 78, +2)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-09-24 (score 76, +43)

- [security regression] Authorization: fail → unverified
- [security improvement] Transport: unverified → pass
- [security improvement] Injection markers: unverified → pass
- [security improvement] Stability: unverified → pass
- [security improvement] HSTS header: fail → pass
- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “connect_start” rewrote its description, which is the text the model reads
- [security] Tool “connect_verify” rewrote its description, which is the text the model reads
- [security] Tool “list_workflows” rewrote its description, which is the text the model reads
- [functional improvement] Endpoint reachability: behind authorisation → reachable
- [functional improvement] Schema quality: 753 → 450
- [functional improvement] Tool coverage: 0% → 9%
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Schema quality: unverified → 100
- [functional improvement] Tool coverage: unverified → 100
- [functional] Destructive annotations: pass → 0
- [functional] New prompt “job-grant-match”
- [functional] New prompt “job-bid-ready-pack”
- [functional] New prompt “job-monday-pipeline”
- [functional] New tool “build_profile”
- [functional] New tool “delete_account”
- [functional] New tool “explore_slice”
- [functional] New tool “get_account”
- [functional] New tool “list_decisions”
- [functional] New tool “list_updates”
- [functional] New tool “match_profile”
- [functional] New tool “read_document”
- [functional] New tool “record_decision”
- [functional] New tool “remember”
- [functional] New tool “research_guide”
- [functional] New tool “search_multi_angle”
- [functional] New tool “set_account”
- [functional] New tool “submit_feedback”
- [functional] New tool “survey_opportunities”
- [cosmetic] “connect_start” added an optional parameter “language”
- [cosmetic] “get_opportunity” added an optional parameter “session”
- [cosmetic] “get_workflow” added an optional parameter “session”
- [cosmetic] “list_workflows” added an optional parameter “session”
- [cosmetic] “search_opportunities” added an optional parameter “session”
- [cosmetic] “whoami” added an optional parameter “session”
- [cosmetic] “connect_verify” made “code” optional
- [cosmetic] Tool “connect_start” changed its title: Start connecting an account → Sign in (step 1 of 2)

### 2026-09-23 (score 33, −43)

- [security regression] Endpoint reachability: reachable → behind authorisation
- [security regression] Authorization: unverified → fail
- [security regression] Tool safety: pass → unverified
- [security regression] Stability: 0.93 → unverified
- [security regression] Transport: pass → unverified
- [security regression] HSTS header: pass → fail
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified

### 2026-09-21 (score 76, +1)

No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-19 (score 75, +1)

No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (22)

### `connect_start` (~71 tokens)

Sign in (step 1 of 2)

Begin authentication. Send the user's work email and your conversation's language ('lt', 'en'…); Victano mails a confirm link and a code. Then call connect_verify(request_id) at once: it waits for the click. No card needed.

Input parameters:

- `email` (string, required)
- `language`

### `connect_verify` (~88 tokens)

Finish connecting an account

Finish signing in: call right after connect_start with no code; it waits for the Confirm click (if it returns waiting, call again; never ask the user). Or pass the code they read you. Returns an api_key (shown once) and, without a connection session, a `session` to pass on every later call.

Input parameters:

- `code`
- `request_id` (string, required)

### `get_account` (~143 tokens)

Read the account: settings, quota and what Victano remembers

Everything Victano holds for this account: the working language, the persona that decides which workflows lead, whether memory is on, the tier and remaining quota, and the full contents of memory with where each entry came from. Call it when the user asks what you know about them, what their limits are, or before changing a setting. Nothing here is hidden from the user: if they ask, read it out.

Input parameters:

- `session` (string): 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 (OA…

### `set_account` (~200 tokens)

Change the account's settings

Sets the working language ('en' or 'lt'), the persona ('supplier', 'bid-writer' or 'consultant', which decides the workflows offered first), and memory ('on', 'paused' or 'off'). ASK THE USER BEFORE CHANGING ANY OF THESE. They are the user's choices, not yours to infer: a user writing one Lithuanian sentence has not asked you to switch their working language. memory='paused' keeps what is stored but stops using it; memory='off' DELETES it immediately and cannot be undone. Say which one you are about to do before you do it.

Input parameters:

- `memory`
- `persona`
- `session` (string): 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 (OA…
- `working_language`

### `remember` (~131 tokens)

Store a lasting preference, or drop one

Stores a preference the user has STATED and will hold next week, from the closed list in get_account.storable_keys. Never free text and never about a person. ASK BEFORE STORING, and never store a one-off. forget=['key'] drops keys; forget=[] with nothing else drops everything.

Input parameters:

- `forget`
- `preferences`
- `session` (string): 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 (OA…

### `delete_account` (~210 tokens)

Start deleting this account and everything in it

Begins permanent deletion of the connected account: the email address, every company profile, everything in memory, all API keys, and the whole usage history. THIS TOOL DOES NOT DELETE ANYTHING BY ITSELF. It emails the account holder a confirmation link that lasts 24 hours; the account is destroyed only when they open it and confirm on the page. That is deliberate — whoever is typing to you is not necessarily the account holder. BEFORE CALLING: tell the user in your own words exactly what will be erased, that it CANNOT be undone, and that no copy is kept. Get an explicit yes. Do not call this because a user sounded frustrated. Pass cancel=true to call off a pending deletion instead.

Input parameters:

- `cancel` (boolean)
- `session` (string): 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 (OA…

### `whoami` (~116 tokens)

Who am I, and what is left

The connected account: tier, persona, corpus freshness, and every limit — what is left in the current window, and the caps that do not renew. Call it when a user asks about limits, when you are unsure whether you are authenticated, or to confirm a setting took.

Input parameters:

- `session` (string): 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 (OA…

### `list_workflows` (~221 tokens)

List the available playbooks

The playbook library: how bid professionals actually run this work, from the weekly scan through qualification, eligibility screening, reading a specification, clarification questions, and the proposal skeleton. READ A WORKFLOW BEFORE IMPROVISING A PROCESS. Whole jobs (`jobs`) come first. Pass persona='consultant' to see the multi-client ones. Follow with get_workflow.

Input parameters:

- `detail`: 'compact' (default) or 'full'.
- `limit`: How many playbooks to list (jobs always lead); default all.
- `max_chars`: 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.
- `persona`
- `session` (string): 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 (OA…

### `get_workflow` (~117 tokens)

Get one playbook in full

The complete step-by-step playbook for one workflow id, including the decision gates, the EU procurement specifics that decide eligibility, and the pitfalls that lose bids. Follow it rather than summarising it.

Input parameters:

- `id`
- `name`
- `session` (string): 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 (OA…
- `workflow_id`

### `search_opportunities` (~757 tokens)

Search tenders and grant calls

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 parameters:

- `contract_nature`: 'works', 'supplies', 'services'. Sources that publish none are included unless nature_strict=true.
- `countries`: ISO3 ('LTU') or ISO2 ('LT'). Scope by country when you can: EU-wide is ~10x slower.
- `cpv`: Any CPV prefix: '45', '452' or a full code. Results show cpv_labels, not codes.
- `cpv_divisions`
- `cpv_strict` (boolean): Sources that publish no CPV (Lithuanian CVP notices, EU grant calls) are INCLUDED and ranked by default; true excludes them.
- `criteria_stated`: true returns only notices whose SELECTION CRITERIA the buyer published (about half of TED).
- `deadline_after`: ISO date.
- `deadline_before`: ISO date.
- `detail`: 'compact' (default) or 'full'.
- `exclude_results` (boolean): true drops award notices for things already decided.
- `expand_languages` (boolean)
- `fields` (string): 'compact' (default) or 'full' for raw codes and a longer summary. Multi-lot procurements collapse to one entry (`lots`, `lot_ids`): report it once.
- `kind`
- `lang`
- `limit` (integer)
- `max_chars`: 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.
- `max_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.
- `min_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.
- `nature_strict` (boolean)
- `no_guarantee`: true returns only notices that state no bid bond is required.
- `nuts`: NUTS2 regions below country level ('DE30', 'LT01'); notices without a NUTS code are excluded.
- `nuts_strict` (boolean)
- `queries`: 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 (res…
- `query`: What the user is looking for, as they typed it.
- `session` (string): 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 (OA…
- `source`: 'ted', 'cvp', 'ft', 'ee', 'lv', 'hun', … (research_guide lists them).
- `status`: 'open' (default), 'forthcoming' for not-yet-open, 'any' adds expired.
- `type`: 'tender' or 'grant' (use 'grant' when the user asks for grant calls).
- `value_band`

### `research_guide` (~218 tokens)

How to work this corpus, for this account, right now

Read this FIRST in a new conversation, before choosing a search strategy. It is generated from the corpus as it stands and from this account's own slice — how many notices are open in their countries today — and the advice CHANGES with that number. Eleven open tenders and four thousand are not the same problem. Also what the relevance score does and does not mean — not a confidence score. Cheap: one call, no quota. Grants: type='grant', countries=['EUR']. Also returns `lexicon`: the trade terms buyers use per country, so you can search in the notice's own language.

Input parameters:

- `countries`
- `cpv`
- `cpv_divisions`
- `name`
- `profile_id`
- `session` (string): 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 (OA…
- `type`

### `survey_opportunities` (~472 tokens)

Everything in scope, compactly

Answers 'what is actually out there?' rather than 'what are the best few?'. Returns ONE COMPACT LINE per notice matching the filters — id, title, buyer, deadline — across the whole filtered set rather than a ranked top ten. A survey row costs about a seventh of a search result, so 150 notices here are cheaper than 25 from search_opportunities. USE THIS FIRST when the user's question is about coverage rather than about the best match: 'what is open in our sector', 'is there anything we are missing', 'how much is out there'. Then search_opportunities or get_opportunity on the specific ones worth a decision. Same filters as search_opportunities. The query is optional: with one, rows come back by relevance; without one, by soonest deadline, which is the order a worklist wants. If the scope is larger than the survey can carry, the response says so explicitly and tells you to narrow — it never silently shows you part of the picture. COST, measured 2026-08-25 so you can budget rather than guess: about 50 tokens a row against 349 for a search result. Cheaper PER ROW, not in total — 150 rows is roughly 7,600 tokens, more than a ten-result search. Ask for the breadth you will actually read.

Input parameters:

- `contract_nature`
- `countries`
- `cpv`
- `cpv_strict` (boolean)
- `criteria_stated`
- `deadline_after`
- `deadline_before`
- `exclude_results` (boolean)
- `kind`
- `lang`
- `limit` (integer)
- `max_value`
- `min_value`
- `nature_strict` (boolean)
- `no_guarantee`
- `nuts`
- `nuts_strict` (boolean)
- `query`
- `session` (string): 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 (OA…
- `source`
- `status`
- `type`
- `value_band`

### `search_multi_angle` (~495 tokens)

One question, several phrasings, fused

Runs 2-5 phrasings of the SAME question and fuses them into one deduplicated ranking. Use it when the right wording is uncertain, which is most of the time here: buyers write in their own language and their own trade terms, so 'school renovation' and 'refurbishment of educational buildings' reach different notices. Each result carries `angles_matched`. A notice found by EVERY phrasing is a strong match; one found by a single phrasing is often a keyword coincidence and worth checking before you recommend it — a distinction you cannot recover by running the searches separately and concatenating them. Give genuinely different angles, not synonyms of one word: the trade term, the plain description, and what the buyer's own department would call it. COST, re-measured 2026-08-29: a median 0.8 s over six calls against 1.5 s for one search, and roughly the same tokens back. Worth it when the wording is genuinely uncertain, wasteful as a default, and it counts one search against your quota per angle.

Input parameters:

- `contract_nature`
- `countries`
- `cpv`
- `cpv_strict` (boolean)
- `criteria_stated`
- `deadline_after`
- `deadline_before`
- `detail`: 'compact' (default) or 'full'.
- `exclude_results` (boolean)
- `fields` (string)
- `kind`
- `lang`
- `limit` (integer)
- `max_chars`: 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.
- `max_value`
- `min_value`
- `nature_strict` (boolean)
- `no_guarantee`
- `nuts`
- `nuts_strict` (boolean)
- `queries` (array, required)
- `session` (string): 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 (OA…
- `source`
- `status`
- `type`
- `value_band`

### `explore_slice` (~345 tokens)

What this slice is actually made of

Returns the values that EXIST in a slice, with counts: sources, tender vs grant, works/supplies/services, CPV divisions, value bands, countries, languages, status, and `kind` — whether a row can be bid on at all. USE IT BEFORE NARROWING. Guessing a filter value and getting nothing back is indistinguishable from the corpus being empty, so an agent that guesses narrows again, wrongly, and reports absence. Pairs with research_guide: the guide says the slice is too large to survey, this says what it is made of so you know which cut will actually reduce it. Takes the same filters as search_opportunities, so you can explore inside a narrowing you have already applied. Cheap, and no quota.

Input parameters:

- `contract_nature`
- `countries`
- `cpv`
- `cpv_strict` (boolean)
- `criteria_stated`
- `deadline_after`
- `deadline_before`
- `exclude_results` (boolean)
- `kind`
- `lang`
- `max_value`
- `min_value`
- `nature_strict` (boolean)
- `no_guarantee`
- `nuts`
- `nuts_strict` (boolean)
- `session` (string): 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 (OA…
- `source`
- `status`
- `type`
- `value_band`

### `record_decision` (~180 tokens)

Remember that this one was already judged

Records that this company decided about a tender, so it is not re-qualified from scratch next week. Call it whenever the user reaches a conclusion — including a NO, which is the one worth keeping, because a no is twenty minutes of work that would otherwise be repeated. decision: 'bid', 'no_bid', 'watch' or 'conditional'. reason: one of the structured reasons the tool lists. Free text is refused: pick the closest reason and say the detail to the user.

Input parameters:

- `decision`
- `id`
- `opportunity_id`
- `reason`
- `session` (string): 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 (OA…

### `list_decisions` (~184 tokens)

What this company already decided

The decisions recorded for this account, newest first, each with the title, buyer and deadline of the notice it is about — so reading a week back costs this one call rather than one per row. Use it when a user asks what they have already looked at.

Input parameters:

- `detail`: 'compact' (default) or 'full'.
- `limit` (integer)
- `max_chars`: 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.
- `session` (string): 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 (OA…

### `get_opportunity` (~103 tokens)

Get the full record for one opportunity

Full normalised record plus the document inventory. Use before advising on a bid; a search card is not enough. Follow with read_document for eligibility text.

Input parameters:

- `id`
- `opportunity_id`
- `session` (string): 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 (OA…

### `read_document` (~227 tokens)

Read an opportunity's text, in pages

Paged text for one opportunity. Ask for ONE page first: measured over the whole corpus, 95% of notices are a single page and the median holds under 600 characters, because what we store is the notice, not the tender pack. The response tells you `total_pages` and whether there is `more`; ask for the rest only when it says so. Each page is about 4000 characters, and you are charged for pages RETURNED, not pages requested. Page 1 also returns `qualification` where published: selection and award criteria, exclusion grounds and lots — on Lithuanian skelbimas apie pirkimą notices, in the buyer's language.

Input parameters:

- `from_page` (integer)
- `id`
- `opportunity_id`
- `page`
- `pages` (integer)
- `session` (string): 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 (OA…

### `submit_feedback` (~645 tokens)

Send feedback to the team

Send feedback about Victano to the team that builds it: a bug, a wrong answer, missing data, a missing feature, a workflow idea, or praise. Every item is read by a person.
When to offer it: an answer came back empty or wrong; the user corrected you or the result; a workflow was missing a step the user needed; the user repeats a manual step the service could do for them; the user says they need something the service does not do. Offer once, in one sentence; the user's task comes first.
Ask first. Show the user what you will send and send it only after they agree. Their own words, and any client, case, company or personal detail, go only with their explicit OK; then set confirmed=true. With authored_by='agent' you may report your own observation of the service (the tool, what you expected, what came back) without asking, as long as it holds none of the user's words or confidential content.
Fill kind and what (the task, and what went wrong or what is needed). For a wrong answer add expected and got. Add tool and query for context (the query only with the user's OK), severity, and contact_email only when the user wants a reply.
The reply carries a reference id. Tell the user it reached the team; do not promise a reply or a date.

Input parameters:

- `authored_by`: user (their words) | agent_drafted (you wrote it, they approved) | agent (your own observation)
- `confirmed` (boolean): true once the user approved sending this; required for authored_by user or agent_drafted
- `contact_email`: Only if the user wants a reply: the address to reply to
- `expected`: For a wrong answer: what the right answer or result would have been
- `got`: For a wrong answer: what came back instead
- `kind` (string, required): One of: bug (something failed or errored), wrong_answer (an answer was returned but it was wrong or misleading), missing_data (a document, record or source the user expected is not covered), missing_…
- `message`: Older name for `what`, kept so earlier callers still work; prefer `what`
- `query`: The query or arguments that produced it; only with the user's OK
- `session` (string): 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 (OA…
- `severity`: low | normal | high | blocking (blocking: the user cannot do their work)
- `tool`: The tool the feedback is about, if one (e.g. the tool that answered wrongly); several: comma-separated
- `what`: The task and what went wrong or what is needed (3-2000 characters)

### `list_updates` (~352 tokens)

What is new or changed since a time

What is new or changed since a time (`since` or `since_days`, default 7 days). Scoped to the stored profile by default; scope='all' ranks across everything in the filters. Use it for the weekly check. Search in the notice's own language; research_guide returns the trade lexicon per country.

Input parameters:

- `contract_nature`
- `countries`
- `cpv`
- `cpv_strict` (boolean)
- `criteria_stated`
- `deadline_after`
- `deadline_before`
- `detail`: 'compact' (default) or 'full'.
- `exclude_results` (boolean)
- `kind`
- `lang`
- `limit` (integer)
- `max_chars`: 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.
- `max_value`
- `min_value`
- `name`
- `nature_strict` (boolean)
- `no_guarantee`
- `nuts`
- `nuts_strict` (boolean)
- `profile_id`
- `scope`
- `session` (string): 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 (OA…
- `since`
- `since_days`
- `source`
- `status`
- `type`
- `value_band`

### `build_profile` (~415 tokens)

Store the company's capability profile

Stores what this company can actually deliver, which everything else matches against. Read the company's website and ask them the rest first: Victano never crawls a customer's site. Run get_workflow('build-profile') for what to gather: a vague profile produces vague matches. Fields: name/company_name, description, countries, nuts (service area), cpv_hints (cpv or cpv_divisions ok), keywords (stored in description), languages, past_contracts (stored for the bid, not searched; string or brief-shaped object OK), certifications, turnover_eur (annual_turnover_eur ok), headcount (staff_count/staff ok), exclusions, min_value_eur, max_value_eur. Only `countries`, `nuts` and `cpv_hints` narrow it. The value bounds warn on each result instead of hiding rows, and `exclusions` comes back in `your_exclusions` for you to apply.

Input parameters:

- `annual_turnover_eur`
- `certifications`
- `company_name`
- `countries`
- `country`
- `cpv`
- `cpv_divisions`
- `cpv_hints`
- `description` (string, required)
- `exclusions`
- `headcount`
- `keywords`
- `languages`
- `max_value_eur`
- `min_value_eur`
- `name`
- `nuts`
- `nuts_regions`
- `nuts_strict` (boolean)
- `past_contracts`
- `regions`
- `service_areas`
- `session` (string): 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 (OA…
- `staff`
- `staff_count`
- `turnover_eur`
- `work_terms`

### `match_profile` (~353 tokens)

Opportunities matched to a stored profile

Rank open tenders and grant calls against the company profile stored with build_profile. Use it to answer 'what fits us'; each result says why it matched (with a NUTS caveat where the region is uncertain) and `coverage` counts the slice. Profile keywords match best in the notices' own language; research_guide returns the trade lexicon per country.

Input parameters:

- `contract_nature`
- `countries`
- `cpv`
- `cpv_strict` (boolean)
- `criteria_stated`
- `deadline_after`
- `deadline_before`
- `detail`: 'compact' (default) or 'full'.
- `exclude_results` (boolean)
- `horizon_days` (integer)
- `kind`
- `lang`
- `limit` (integer)
- `max_chars`: 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.
- `max_value`
- `min_value`
- `name`
- `nature_strict` (boolean)
- `no_guarantee`
- `nuts`
- `nuts_strict` (boolean)
- `profile_id`
- `session` (string): 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 (OA…
- `source`
- `status`
- `type`
- `value_band`

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-victano-victano/mcp#diagnostics

## Score history

- 2026-10-04: 78
- 2026-10-03: 78
- 2026-10-02: 78
- 2026-10-01: 78
- 2026-09-30: 71
- 2026-09-29: 78
- 2026-09-28: 78
- 2026-09-27: 78
- 2026-09-26: 78
- 2026-09-25: 78
- 2026-09-24: 76
- 2026-09-23: 33
- 2026-09-22: 76
- 2026-09-21: 76
- 2026-09-20: 75
- 2026-09-19: 75
- 2026-09-18: 74
- 2026-09-17: 74
- 2026-09-16: 73
- 2026-09-15: 73
- 2026-09-14: 72
- 2026-09-13: 72
- 2026-09-12: 71
- 2026-09-11: 71
- 2026-09-10: 70
- 2026-09-09: 70
- 2026-09-08: 70
- 2026-09-07: 69
- 2026-09-06: 69
- 2026-09-05: 68

## Common questions

### What is the Victano: EU tenders and grant calls MCP server?

Victano: EU tenders and grant calls is an MCP server listed in the public MCP registry as com.victano/victano. EU tenders and grant calls, matched to your company and qualified, inside the AI you already use. This page covers its hosted endpoint (https://mcp.victano.com/mcp).

### Is the Victano: EU tenders and grant calls MCP server safe to use?

Victano: EU tenders and grant calls scores 78 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Victano: EU tenders and grant calls MCP server expose?

Victano: EU tenders and grant calls exposes 22 tools: connect_start, connect_verify, get_account, set_account, remember, and 17 more. Their descriptions and schemas cost roughly 6,043 tokens of context every time the server is loaded.

### Does the Victano: EU tenders and grant calls MCP server require authentication?

No. We connected to Victano: EU tenders and grant calls without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the Victano: EU tenders and grant calls MCP server still maintained?

Victano: EU tenders and grant calls is still listed as active in the MCP registry. We last reached this channel on 4 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://mcp.victano.com/mcp
- Website: https://victano.com/
- Changelog RSS feed: https://verifymcp.io/servers/com-victano-victano/mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-victano-victano/mcp.json
- HTML version of this page: https://verifymcp.io/servers/com-victano-victano/mcp
