Skip to main content
Glama

Server Details

European tourism & travel-disruption MCP: trip risk, live events, Eurostat panels, RO county data.

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.9/5 across 8 of 8 tools scored.

Server CoherenceA
Disambiguation5/5

Every tool has a clearly distinct purpose, with explicit cross-references to differentiate overlapping tools (e.g., get_trip_updates_since vs whats_changed, assess_trip vs watch_trip). There is no ambiguity in when to use each tool.

Naming Consistency2/5

Naming is inconsistent: some tools use verb_noun (assess_trip, list_events, watch_trip), some use noun_noun (country_briefing, country_tourism_profile), and one uses a question phrase (whats_changed). This mixed convention reduces predictability.

Tool Count5/5

8 tools is well-scoped for a travel-trends server, covering trip assessment, monitoring, update retrieval, event browsing, daily briefing, and tourism statistics. Each tool earns its place without unnecessary bloat.

Completeness4/5

The core workflows (assess, watch, get updates, explain silence, list events) are well covered. The only notable gap is the absence of trip lifecycle management, such as an unwatch_trip or list_trips tool, which is a minor omission.

Available Tools

8 tools
assess_tripA
Read-onlyIdempotent
Inspect

Assess one trip: current disruption status for its destinations and dates.

Use this tool when the user asks whether a specific trip is affected by
strikes, weather, transport disruptions or other travel risks.
Give the destinations and the travel window (date_from/date_to,
YYYY-MM-DD). Destinations are the EU-27 ISO2 codes (Greece = "EL") PLUS the
non-EU27 countries we actively monitor: Norway ("NO", rail via Entur, live),
the United Kingdom ("UK" or "GB", transit via TfL, live), and Switzerland
("CH", rail via SBB — key-pending, so it is reported as a declared blind
spot until the feed is keyed, never a false all-clear). A code we do not
monitor is rejected with {"error": "unknown_country"} rather than silently
all-cleared. Returns a Decision-Support answer, not raw data:
  * travel_status: NORMAL | MINOR_DISRUPTION | MAJOR_DISRUPTION;
  * actionable_lines: per-event DECISION-IMPACT guidance — what the
    disruption means for THIS trip and what to do (e.g. "affects regional
    trains, not airports -> take a road airport transfer, leave ~30 min
    earlier"), or a clearly-labelled "nothing material" line when calm;
  * confidence: a LABELLED model output (coverage/corroboration/recency/
    blind-spots blend, not a probability) — read its caveats;
  * sources_checked: proof of what was monitored (sources_ok, blind spots);
  * events + caveats.
Sub-floor noise (a deep, far-field seismic blip) is omitted; calm is a
monitoring result for the window, never an invented forecast. Invalid
inputs return an explicit {"error": ...}; nothing is fabricated.

Top-level MCP-facing structure (additive; existing fields preserved):
  * presentation: a three-section block — affects_your_trip[] (each
    item with verified_sources[] as display-ready names, source_count,
    corroborated flag (≥2 distinct sources), an honest for_you line
    bound to destinations+dates only, report_url, first_detected_at,
    last_verified_at); doesnt_affect_your_trip (the proof-of-work
    pile — shown[] of {headline, reason_excluded}, additional_checked_count,
    summary_line, total_checked); next_steps[] (deterministic — re-check
    date, aviation-handoff watch when blind spot, per-active monitor URLs);
  * track_record_ref: lean {window_days, flagged, ended, still_active,
    monitoring_since, url} — numbers + URL only, no narrative;
  * suggested_next_call: {tool, context} — the suggested follow-up
    (watch_trip) when the user wants continued monitoring.
These exist so an LLM consumer can quote verbatim — every fact is
traceable to a named source or an input field, never invented.

Destinations also accept natural input: IATA airport codes (e.g. 'TSR',
'AMS', 'ZRH') and major city names (e.g. 'Timișoara', 'Amsterdam',
'Zürich', 'London'), resolved deterministically to a monitored country
code. The response includes a 'resolved' list ([{input, country, kind}])
disclosing how each token was mapped (e.g. 'TSR -> RO via iata-airport').
A token that resolves to a country we do not monitor is rejected with
{'error': 'unknown_country'}; a token we cannot resolve at all is rejected
with {'error': 'unknown_destination', 'tokens': [...]} — we reject rather
than guess.

Pass `lang` (e.g. "de", "ro", "pl", "fr", "es", "it"; default English) to
answer in the traveller's language — useful for a traveller
in a country whose language they do not speak. The response then carries a
`localized` block with the status sentence, an honest reassurance line
(calm ONLY when status is NORMAL), the decision-impact lines, AND — never
dropped — the localized caveats + blind_spots. Source-derived free text the
traveller cannot read (an event headline in the source language) is
AI-translated via Gemini and carries the label "AI-translated — verify
against the linked official source"; when no GEMINI_API_KEY is set or a
translation fails, the original source text is kept with an honest note —
never a fake translation. Our own wording falls back to English (flagged in
`localized.fallback_lang_parts`) when no template exists for `lang`; an
unknown `lang` answers in English and says so (`is_known_lang=false`).
Localization NEVER becomes a false all-clear and the aviation handoff is a
SIGNPOST that DISCLOSES the blind spot, not coverage.

Pass `audience` for role-specific operational actions (B2B travel-risk /
duty-of-care): one of "tmc" (travel management company / corporate travel
risk), "hotel", "ota", "tour_operator". The response then carries a
`persona` block: {audience, actions[]} where each action ties an affecting
event to that role's recommended steps (e.g. TMC: flexible-rebooking policy,
reroute inventory, proactive guest comms) — a PURE PROJECTION of the
audience-tagged recommendations already computed per event, each carrying a
`based_on` disclosure of the inputs it used. An unknown audience is reported
honestly with the valid set, never guessed. Omit `audience` for the default
(no persona block).
ParametersJSON Schema
NameRequiredDescriptionDefault
langNo
date_toYes
audienceNo
date_fromYes
destinationsYes
Behavior5/5

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

Beyond the annotations (readOnly, idempotent), the description discloses error behavior ('Invalid inputs return an explicit {"error": ...}; nothing is fabricated'), blind spots (Switzerland key-pending), and translation honesty ('never a fake translation'). No contradiction with annotations.

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?

The description is verbose but well-structured with bullet points and front-loaded with a clear summary. Each section covers a meaningful aspect (usage, parameters, output structure, localization, audience). However, some caveats (e.g., 'never a false all-clear') are repeated, and the length is borderline for an MCP description.

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

Completeness5/5

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

Despite lacking an output schema, the description thoroughly details the response structure (presentation block, track_record_ref, suggested_next_call, resolved, localized, persona) and error handling, making it complete for an agent to consume.

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

Parameters5/5

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

Schema coverage is 0%, but the description fully compensates: it details destination formats (EU-27 ISO2 codes, IATA, city names), date format (YYYY-MM-DD), language codes, and audience values, plus error handling for unknown tokens.

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 first sentence precisely defines the tool's scope: 'Assess one trip: current disruption status for its destinations and dates.' This distinguishes it from sibling tools like country_briefing (country-level) or watch_trip (ongoing monitoring).

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

Usage Guidelines5/5

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

The description explicitly states 'Use this tool when the user asks whether a specific trip is affected by strikes, weather, transport disruptions or other travel risks.' It also mentions a follow-up tool (watch_trip) for continued monitoring and frames the output as decision-support rather than raw data.

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

country_briefingA
Read-onlyIdempotent
Inspect

Get today's published daily briefing, pre-formatted for end users.

Use this tool for a general "what is happening today in EU travel"
question that is not tied to one specific trip.
Returns the same payload as the underlying daily briefing artifact:
headline counts, one plain-language headline per active event,
monitoring coverage (sources_ok / blind_spots_count), backtest trust
figures, and a caveats list. Always relay caveats alongside numbers.
Optional ``country`` (EU-27 ISO2 alpha-2, Greece = "EL") narrows the
events list only — headline_counts / monitoring / trust stay
EU-27-wide, as flagged in the returned note. Missing artifact returns
``{"error": "unavailable"}``.
ParametersJSON Schema
NameRequiredDescriptionDefault
countryNo
Behavior5/5

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

Beyond the read-only, idempotent, non-destructive annotations, the description discloses critical behaviors: the payload structure (headline counts, plain-language headlines, monitoring coverage, trust figures, caveats), the requirement to always relay caveats, the country filtering scope (narrows events only, not metrics), and the exact error response for a missing artifact. This is rich, transparent context.

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 dense but every sentence earns its place. It front-loads the core purpose, then adds usage guidance, return payload details, a critical caveat-relaying instruction, parameter semantics, and an error case. No filler or redundancy; structure is logical and scannable.

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

Completeness5/5

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

There is no output schema, so the description must explain return values—it does so explicitly, including the key components and the caveats list. It also covers the only parameter, the error condition, and the global vs. country-wide scope nuance. For a tool with one optional parameter and no output schema, this is fully complete.

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

Parameters5/5

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

Schema provides almost no param description (0% coverage), so the description carries the full burden. It explains the optional country parameter with format (EU-27 ISO2 alpha-2), gives an example (Greece = "EL"), and precisely describes the behavioral effect (narrows events list only; headline_counts/monitoring/trust stay EU-27-wide). This is exemplary parameter documentation.

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?

Description starts with a specific verb 'Get' and identifies the exact resource: 'today's published daily briefing, pre-formatted for end users.' It also distinguishes itself from trip-specific tools by stating it is 'not tied to one specific trip,' directly addressing the sibling context.

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?

Explicitly states when to use this tool: 'for a general "what is happening today in EU travel" question that is not tied to one specific trip.' It implicitly excludes trip-specific scenarios but does not name alternative tools explicitly. The clear context and exclusion provide strong guidance, falling just short of naming specific alternatives.

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

country_tourism_profileA
Read-onlyIdempotent
Inspect

Tourism profile for one EU-27 country — a decade of Eurostat data.

Use this tool for questions about a country's tourism statistics,
seasonality or visitor mix, not for live disruptions.
Pure projection of the published artifacts (countries/<code>.json +
competitiveness.json): yearly nights/arrivals totals with YoY, average
stay, seasonality (peak month and peak-to-mean ratio, formula disclosed),
domestic vs foreign visitor share, recovery vs 2019, growth vs the EU
average, and computed competitiveness insights (each labeled with its
basis). Every number is computed from the same public dataset the site
serves — nothing narrated, nothing estimated; links carry the citable
page + raw JSON. `code` is EU-27 ISO2 (Greece = "EL"). Unknown country ->
{"error": "unknown_country"}; missing artifact -> {"error": "unavailable"}.
ParametersJSON Schema
NameRequiredDescriptionDefault
codeYes
Behavior5/5

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

Beyond the annotations (readOnlyHint, idempotentHint), the description adds critical behavior: it is a 'pure projection of the published artifacts,' discloses that 'every number is computed from the same public dataset,' provides error formats for unknown country ('unknown_country') and missing artifact ('unavailable'), and notes that links carry citable pages plus raw JSON. This is rich contextualization with no contradiction.

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 information-dense yet each sentence earns its place: purpose, usage guideline, data source, metric list, parameter format, and error handling. It is front-loaded with the primary function and contains no filler or tautology.

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

Completeness5/5

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

Given there is no output schema, the description enumerates all return aspects: YoY totals, average stay, seasonality with peak-to-mean ratio, visitor share, recovery vs 2019, growth vs EU average, and competitiveness insights. It also documents data provenance, error cases, and link details, making it self-sufficient for the agent.

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

Parameters5/5

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

With schema description coverage at 0%, the description fully compensates by explaining that `code` is an EU-27 ISO2 code and gives the concrete example 'Greece = "EL"'. It also clarifies behavior for invalid or missing artifacts, which helps the agent invoke the tool correctly.

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 'Tourism profile for one EU-27 country — a decade of Eurostat data,' which is a specific verb+resource statement. It also explicitly differentiates from siblings by saying 'Use this tool for questions about a country's tourism statistics, seasonality or visitor mix, not for live disruptions,' making its scope unmistakable.

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 clearly states when to use the tool (for tourism statistics, seasonality, visitor mix) and when not to use it (not for live disruptions). However, it does not name alternative tools for live disruptions, though the sibling list includes candidates like list_events, so the guidance is not fully explicit on alternatives.

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

explain_silenceA
Read-onlyIdempotent
Inspect

Explain why a watched trip has produced no updates.

Use this tool when the user asks why they have not heard anything about
a watched trip. Returns {recheck_count, last_checked} (proof the trip
was actively monitored),
{suppressed:[{what, domain, country, score, floor, reason}]} (what we saw
for your destinations and dropped below the disclosed relevance floor —
e.g. a deep quake at modelled felt-intensity 3.39 < floor 4.0),
{confidence_during_window}, and {blind_spots:[{domain, country, note}]} —
domains/countries we do NOT monitor live, so silence there is NOT a
guarantee (e.g. aviation-IT blind spot => silence does not cover flights).
`since` optionally scopes the recheck window. Id is regex-validated;
unknown -> {"error": "not_found"}, malformed -> {"error": "invalid_trip_id"}.
ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNo
trip_idYes
Behavior5/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds substantial behavioral detail: it explains return fields (recheck_count, suppressed, confidence, blind_spots), gives a concrete example of the relevance floor, and discloses that silence is not a guarantee for certain domains (e.g., aviation-IT). It also specifies error responses for unknown/malformed trip IDs. This goes far beyond 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.

Conciseness4/5

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

The description is longer than average, but every sentence adds value, including return structure, examples, and edge cases. It is front-loaded with the core purpose, then details. There is no fluff, though a reader might need to absorb a lot; this density is justified by the tool's complexity.

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

Completeness5/5

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

With no output schema, the description fully carries the burden of explaining returns. It lists all key output fields, provides an illustrative example, explains blind spots, and documents error cases. This is complete enough for an agent to understand the tool's behavior, limitations, and expected outputs without additional context.

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?

Schema description coverage is 0%, so the description must compensate. It does: `since` is explained as optionally scoping the recheck window, and trip_id is described as regex-validated with specific error behaviors. While the exact query format for `since` is not given, the description provides meaningful semantics beyond the raw schema types.

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, action-oriented statement: 'Explain why a watched trip has produced no updates.' It clearly identifies the resource (watched trip) and the action (explain silence), distinguishing it from sibling tools like get_trip_updates_since or watch_trip.

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?

Explicitly states when to use: 'Use this tool when the user asks why they have not heard anything about a watched trip.' While it doesn't explicitly name alternatives or when-not-to-use, the context is clear and the wording differentiates it from tools that fetch updates or manage watchlists.

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

get_trip_updates_sinceA
Read-onlyIdempotent
Inspect

The watched-trip updates log filtered to entries AFTER since.

The notification payload: everything logged for the trip strictly after
the `since` ISO-8601 timestamp (the user's last-seen time), oldest-first.
Returns {trip_id, since, new_update_count, updates}. Use this tool to
fetch the stored update entries the user has not seen yet; for a live
recomputed diff, use whats_changed instead. An empty `since` returns the whole
log. Id is regex-validated (^trip-[a-z0-9-]+$); unknown id ->
{"error": "not_found"}, malformed id -> {"error": "invalid_trip_id"}.
ParametersJSON Schema
NameRequiredDescriptionDefault
sinceYes
trip_idYes
Behavior5/5

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

The description discloses significant behavioral details beyond the annotations: returns entries 'strictly after the `since` timestamp, oldest-first', describes the response shape, and specifies error behaviors for unknown and malformed IDs. Annotations already declare read-only and idempotent, and the description adds no contradictions.

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 well-structured and concise, leading with the core purpose and then covering notable behaviors and edge cases in a compact, readable form. Every sentence adds value without redundancy.

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

Completeness5/5

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

Even though there is no output schema, the description explicitly states the return object ({trip_id, since, new_update_count, updates}), error responses, and validation rules. Combined with the detailed parameter semantics and usage guidance, the description is fully self-contained for an AI agent.

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

Parameters5/5

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

The schema provides no descriptions, but the description fully compensates: it defines `since` as 'ISO-8601 timestamp (the user's last-seen time)' and the empty-since behavior, and specifies the `trip_id` format via regex and associated error messages.

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 clearly states the tool's purpose: 'The watched-trip updates log filtered to entries AFTER `since`.' It specifies the resource (trip updates log) and the action (fetch filtered by since), and explicitly distinguishes from the sibling tool whats_changed, which provides a live recomputed diff.

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

Usage Guidelines5/5

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

The description provides explicit usage direction: 'Use this tool to fetch the stored update entries the user has not seen yet; for a live recomputed diff, use whats_changed instead.' This states when to use and points to the alternative. It also covers edge cases for empty `since` and validation errors.

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

list_eventsA
Read-onlyIdempotent
Inspect

List detected travel-disruption events for EU-27 tourism.

Use this tool to browse or filter current disruption events across
countries; for a question about one specific trip, use assess_trip.
Events are deterministic, rule-based detections over published live
snapshots and monthly indicators — thresholds are disclosed in each
event record; nothing is model-generated here. Filters: status (e.g.
"active"/"resolved"), country (EU-27 ISO2, Greece = "EL"), domain
(e.g. "weather", "aviation"), min_severity on the ordered scale
info < watch < warning < severe. Returns {count, events, filters};
on missing index returns {"error": "unavailable"}.
ParametersJSON Schema
NameRequiredDescriptionDefault
domainNo
statusNo
countryNo
min_severityNo
Behavior5/5

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

Annotations already declare read-only, idempotent, non-destructive. The description adds meaningful behavioral context: events are deterministic rule-based detections, thresholds are disclosed in each record, nothing is model-generated, and missing index yields a specific error format. This goes well beyond 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?

Four dense sentences with zero filler. The first sentence states purpose, the second provides usage guidance, the third explains data provenance, and the fourth covers filters and return format. Every sentence adds value and is well-organized.

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

Completeness5/5

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

Despite no output schema, the description specifies the return shape ({count, events, filters}) and the error case. It covers all parameters, the underlying data source, and filters. For a list tool with this complexity, the description is complete and leaves no significant gaps.

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

Parameters5/5

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

Schema has 0% description coverage and no enums, so the description carries the full burden. It clearly explains each filter: status with examples, country as EU-27 ISO2 (Greece = 'EL'), domain with examples, and min_severity with an explicitly ordered scale (info < watch < warning < severe). This is exactly the missing parameter semantics.

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+resource+scope: 'List detected travel-disruption events for EU-27 tourism.' It clearly distinguishes from siblings by positioning this as the browse/filter tool and explicitly directing trip-specific questions to assess_trip.

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

Usage Guidelines5/5

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

Explicit usage guidance: use for browsing/filtering across countries, and 'for a question about one specific trip, use assess_trip.' This directly tells the agent when to prefer an alternative, satisfying the when-to-use and when-not-to-use criteria.

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

watch_tripA
Idempotent
Inspect

Start monitoring one trip for disruption changes over time.

Use this tool when the user wants ongoing monitoring of a trip rather
than a one-off assessment (for a one-off answer, use assess_trip).
Persists the trip as a monitored object and returns its initial
assessment plus a stable trip_id. Idempotent on identity: re-watching the
same destinations+window refreshes the same trip rather than duplicating
it. Thereafter each pipeline run re-evaluates the trip and appends an
update ONLY when something materially changes (a new/cleared event, a
severity/status shift, or a travel_status change) — never on a calm tick.
Args: destinations — EU-27 ISO2 codes (Greece = "EL") plus the non-EU27
countries we monitor: Norway "NO" (Entur, live), United Kingdom "UK"/"GB"
(TfL, live), Switzerland "CH" (SBB, key-pending → declared blind spot until
keyed); date_from/date_to (YYYY-MM-DD); optional label. An unmonitored code
is rejected with {"error": "unknown_country"} rather than a false all-clear.
Returns {trip_id, assessment, created_at}; invalid inputs return an explicit
{"error": ...}.

Destinations also accept natural input: IATA airport codes (e.g. 'TSR',
'AMS', 'ZRH') and major city names (e.g. 'Timișoara', 'Amsterdam',
'Zürich', 'London'), resolved deterministically to a monitored country
code. The initial assessment includes a 'resolved' list
([{input, country, kind}]) disclosing how each token was mapped
(e.g. 'TSR -> RO via iata-airport'). A token that resolves to a country we
do not monitor is rejected with {'error': 'unknown_country'}; a token we
cannot resolve at all is rejected with
{'error': 'unknown_destination', 'tokens': [...]} — we reject not guess.

Pass `lang` (e.g. "de", "ro", "pl"; default English) to localise the
initial assessment into the traveller's language: the returned
assessment carries the same `localized` block as assess_trip (honest
reassurance, AI-translated-and-LABELLED source text, and the localized
caveats + blind_spots that are never dropped). Localization never becomes a
false all-clear; the aviation handoff discloses the blind spot, not coverage.

Pass `audience` ("tmc" | "hotel" | "ota" | "tour_operator") for role-specific
operational actions — the initial assessment then carries the same `persona`
block as assess_trip (audience + per-event role actions, projected from the
audience-tagged recommendations). Built for the B2B travel-risk buyer.

Pass `notify_webhook_url` (https only) to get PUSH delivery: on every
MATERIAL change the radar POSTs the update record (summary, status
transition, event report URLs) to your URL, signed HMAC-SHA256 over the
raw body (header X-TravelTrends-Signature: sha256=<hex>). The response
then includes `notify.secret` — shown ONLY once, never published; store
it to verify signatures. Re-watch with the same URL keeps the secret,
a new URL rotates it, and notify_webhook_url="" removes delivery. After
5 consecutive delivery failures the webhook is disabled with an honest
notify_disabled entry in the trip's updates log. Non-https or
private-network URLs are rejected with {"error": "invalid_webhook_url"}.
ParametersJSON Schema
NameRequiredDescriptionDefault
langNo
labelNo
date_toYes
audienceNo
date_fromYes
destinationsYes
notify_webhook_urlNo
Behavior5/5

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

Discloses substantial behavior beyond annotations: idempotency on identity, updates only on material changes, webhook secret shown once, delivery failure disabling, and specific error responses. This complements annotations like idempotentHint and readOnlyHint without contradiction.

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?

Though long, the description is meticulously structured, front-loading the core action and then systematically covering parameters, localization, audience, and webhook delivery. Every sentence carries essential information; there is no filler or redundancy.

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

Completeness5/5

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

Given the tool's complexity and lack of output schema, the description fully covers return values, error handling, idempotency, webhook security, and localization behavior. It provides a complete mental model for correct invocation and expected outcomes.

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

Parameters5/5

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

Schema coverage is 0%, but the description compensates fully by explaining every parameter: destinations with IATA/city resolution, date format, optional label, lang, audience, and notify_webhook_url requirements. It even details edge cases like unknown_country and unknown_destination errors.

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: 'Start monitoring one trip for disruption changes over time.' It clearly distinguishes from assess_trip by contrasting ongoing monitoring versus one-off assessment, making the purpose unmistakable.

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

Usage Guidelines5/5

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

Explicit guidance is provided: 'Use this tool when the user wants ongoing monitoring... for a one-off answer, use assess_trip.' It also clarifies idempotency behavior and webhook re-watch semantics, giving clear when-to-use and when-not-to-use scenarios.

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

whats_changedA
Read-onlyIdempotent
Inspect

Report only what changed for a watched trip since a checkpoint.

Use this tool when the user asks for news on a trip already registered
with watch_trip; for the stored notification log rather than a live
diff, use get_trip_updates_since. Recomputes the
trip's current assessment and diffs it against the checkpoint at/just-
before `since` (or the last evaluation when `since` is omitted). Returns
{material, summary, added_events, removed_events, changed_events,
previous_travel_status, travel_status, confidence_from, confidence_to}.
`summary` is a plain-language line ('Since your last check: rail strike
CONFIRMED (was: announced); a road closure cleared; confidence 63->71%').
A non-material tick returns material=False with a clearly-flagged 'No
material change' summary — never invented churn. `since` is an optional
ISO-8601 timestamp (e.g. the user's last-seen time). Id is regex-validated
(^trip-[a-z0-9-]+$); unknown id -> {"error": "not_found"}, malformed id ->
{"error": "invalid_trip_id"}.

The response also forwards the presentation blocks from the current
assessment so the LLM consumer has full context alongside the delta:
presentation (affects_your_trip / doesnt_affect_your_trip / next_steps),
track_record_ref (90-day counts + URL), and suggested_next_call
(the suggested follow-up action). Forwarded in both material=True and
material=False branches; absent if upstream did not compute them
(legacy code paths) — never fabricated.

`audience` (optional: tmc | hotel | ota | tour_operator) attaches the
same `persona` block as assess_trip/watch_trip to the change alert —
audience-tagged actions for the events currently affecting the trip, so
the alert itself carries the operational next step. Unknown audience ->
honest error listing valid_audiences.
ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNo
trip_idYes
audienceNo
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description adds substantial behavioral context: recomputation and diffing, non-material ticks with 'never invented churn', error responses for unknown/malformed IDs, forwarded presentation blocks with 'never fabricated' caveats, and honest errors for unknown audiences. No contradictions with annotations.

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?

The description is longer than average, but it is front-loaded with the core purpose and each paragraph adds necessary details about return values, errors, forwarded context, and audience behavior. It could be tightened slightly, as some return-field details are repeated across paragraphs, but overall it is well structured and information-dense.

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

Completeness5/5

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

With no output schema and three parameters, the description is exceptionally complete: it covers the return object shape, material/non-material branches, error semantics, optional parameters, alternative tools, and edge-case behavior. It leaves little ambiguity for an agent selecting and invoking the tool.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden for explaining parameters. It explains trip_id via regex validation and error cases, since as an optional ISO-8601 timestamp used as the checkpoint, and audience as an optional tmc/hotel/ota/tour_operator value with defined behavior. This goes well beyond the bare schema.

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: 'Report only what changed for a watched trip since a checkpoint.' This precisely defines the tool's scope and clearly differentiates it from siblings, even naming get_trip_updates_since as the alternative for stored notification logs.

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

Usage Guidelines5/5

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

Explicit usage guidance is provided: 'Use this tool when the user asks for news on a trip already registered with watch_trip; for the stored notification log rather than a live diff, use get_trip_updates_since.' This states both when to use and when not to use the tool, naming a specific alternative.

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

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    EU Crop Intelligence MCP Server — Yield forecasts, weather analysis, and phenology models for 15 countries. AI agent-native, multi-source intelligence (NASA POWER, Eurostat, Open-Meteo).
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Travel compliance and trip planning for digital nomads — visa requirements, tax residency analysis, Schengen 90/180-day tracking, and curated accommodation, transport, and experience search across 189 European destinations.
    7
    MIT

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.

Resources