Skip to main content
Glama

mcp/

Model Context Protocol server for travel.art. Live at https://mcp.travel.art/.

What it does

Exposes travel.art's art-tourism data to AI agents over the Model Context Protocol (Streamable HTTP transport, request/response mode).

Three tools as of v1:

  • find_art_events — biennales, art fairs, festivals with dates, venues, ticket info, summaries, links to full guides

  • find_museum_guide — major museums (Louvre, Vatican, Uffizi) with 2026 ticket info, opening hours, essential works

  • recommend_art_trip — city-based itinerary using only published travel.art content

Catalogue v1.6.0: 23 events + 12 museums + 6 layover itineraries (synced from the published calendar and cornerstone articles; event facts re-verified 2026-09-14).

Related MCP server: Akebono MCP

Stack

mcp/
  src/
    index.ts        # Worker entry, MCP HTTP protocol (JSON-RPC 2.0)
    tools.ts        # Tool definitions + handlers
    data.ts         # Static dataset (typed)
  scripts/          # (Future) sync from content/<slug>/index.md frontmatter
  data/             # (Future) sync output
  package.json
  wrangler.toml
  tsconfig.json
  • Runtime: Cloudflare Workers, free tier (100k requests/day)

  • Language: TypeScript

  • Transport: MCP Streamable HTTP (request/response, no SSE — single-shot tool calls)

  • Protocol version: 2025-03-26

  • Auth: None (public read-only)

Use it

Health check

curl https://mcp.travel.art/health

Initialize handshake

curl -X POST https://mcp.travel.art/ \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"my-client","version":"0.1"}}}'

List tools

curl -X POST https://mcp.travel.art/ \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

Call a tool

curl -X POST https://mcp.travel.art/ \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"find_art_events","arguments":{"country":"IT"}}}'

Claude Desktop config

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

{
  "mcpServers": {
    "travel-art": {
      "url": "https://mcp.travel.art/"
    }
  }
}

Deploy

cd mcp
npm install
npx wrangler deploy

(Requires CLOUDFLARE_API_TOKEN + CLOUDFLARE_ACCOUNT_ID in env or wrangler login.)

The Worker is bound to the mcp.travel.art custom domain via Cloudflare API (one-time setup; see DECISIONS.md 2026-05-08).

Future (v2 backlog)

  • Build-time data extraction — replace hand-curated data.ts with a sync script that reads content/<slug>/index.md frontmatter (events from Event-typed schema, museums from Place-typed schema). New cornerstones flow into MCP automatically.

  • More toolsfind_artist_residencies, find_collateral_events, today_in_art_tourism (calendar of what's open today across our catalogue).

  • Authentication tier — currently public read-only. If commercial clients want high-volume programmatic access, add API-key tier under Account API Tokens.

  • Streaming responses — for long itinerary recommendations, switch to SSE.

  • Rate limiting — per-IP throttle (currently relies on Cloudflare's own DDoS protection).

  • Schema versioningmcp.travel.art/v1, /v2 URL versioning when we break compatibility.

See .claude/agents/mcp-architect.md for the full agent operating spec.

Available Tools

4 tools
find_art_eventsAInspect

Search travel.art's catalogue of upcoming and current art events (biennales, art fairs, festivals). Returns events with dates, venues, ticket info, summary, and a link to travel.art's full visitor guide. Use for queries like 'when is Venice Biennale 2026', 'art fairs in October 2026', 'what's on in Miami in December'.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by event type. Optional.
queryNoFree-text query (event name, theme, keyword). Optional.
countryNoISO 3166-1 alpha-2 country code (e.g., 'IT', 'CH', 'GB', 'US'). Optional filter.
activeOnNoISO 8601 date (YYYY-MM-DD). Returns only events whose date range covers this date. Optional.
endsBeforeNoISO 8601 date. Returns only events ending on or before this date. Optional.
startsAfterNoISO 8601 date. Returns only events starting on or after this date. Optional.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It communicates that the tool is read-only ('Search', 'Returns'), scopes the data source ('travel.art's catalogue'), and describes what is returned (dates, venues, ticket info, summary, link). It does not mention edge behaviors like pagination or no-result handling, but the essential behavior is transparent.

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 two sentences plus example queries. It is front-loaded with the primary purpose, then lists return contents, then provides usage examples. Every sentence earns its place with zero redundancy.

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?

The tool has 0 required parameters and no output schema, but the description adequately covers what the tool returns (dates, venues, ticket info, summary, link) and provides clear usage examples. It could mention default sorting or behavior without filters, but for a search tool this is sufficient.

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

Parameters3/5

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

The schema descriptions cover 100% of the parameters, each with a clear explanation (e.g., 'ISO 8601 date (YYYY-MM-DD). Returns only events whose date range covers this date'). The description adds context through example queries but does not add parameter-specific nuances beyond what the schema already provides, warranting the baseline score.

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 'Search travel.art's catalogue of upcoming and current art events', which clearly identifies the verb (Search), resource (catalogue of art events), and scope (travel.art). It also enumerates event types ('biennales, art fairs, festivals') and distinguishes itself from sibling tools like find_museum_guide and recommend_art_trip by focusing specifically on events.

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?

The description provides explicit example queries ('when is Venice Biennale 2026', 'art fairs in October 2026', 'what's on in Miami in December'), giving clear context for when to use the tool. However, it does not explicitly state when not to use it or mention alternatives by name, stopping short of a full 'when/when-not' guideline.

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

find_layover_itineraryAInspect

Search travel.art's layover-itinerary catalogue — short-window (3–6h) art-focused trips between flight connections from major European hub airports. Returns itineraries by city, airport, art focus, or duration, with venues, transit notes, and a link to travel.art's full hour-by-hour guide. Use for queries like 'art layover in Rome from Fiumicino', '4-hour Caravaggio plan', 'short Louvre window from CDG', 'Amsterdam 4 hours Schiphol'.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoCity filter (e.g., 'Milan', 'Rome', 'Florence', 'Amsterdam', 'Paris', 'London'). Optional.
queryNoFree-text query (city, artist, museum, airport, theme). Optional.
airportNoIATA airport code the layover serves (e.g., 'MXP', 'FCO', 'AMS', 'CDG', 'LHR'). Optional filter.
countryNoISO 3166-1 alpha-2 country code (e.g., 'IT', 'NL', 'FR', 'GB'). Optional.
maxDurationHoursNoMaximum time-on-ground budget in hours. Returns only itineraries that fit ≤ this duration. Optional.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses what the tool returns ('itineraries by city, airport, art focus, or duration, with venues, transit notes, and a link') and sets expectations with the '3–6h' window. This goes beyond the schema by adding behavioral context, though it doesn't address edge cases like result limits or availability constraints.

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 two sentences: the first front-loads the core purpose and scope, the second provides concrete usage examples. Every phrase earns its place with no filler or redundancy.

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?

Despite having no output schema, the description clearly states what is returned (itineraries, venues, transit notes, link) and supplies ample example queries. It's complete for a simple optional-parameter search tool, though a bit more detail on result ordering or limitations could push it to 5.

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 coverage is 100%, so the baseline is 3. The description adds value by giving example queries ('4-hour Caravaggio plan', 'Amsterdam 4 hours Schiphol') that illustrate how to combine parameters (city, airport, duration) in practice, going beyond the schema's individual parameter descriptions.

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 function: 'Search travel.art's layover-itinerary catalogue' with a specific scope ('short-window (3–6h) art-focused trips between flight connections from major European hub airports'). It also distinguishes from sibling tools by focusing on layover itineraries rather than events, museum guides, or general trip recommendations.

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?

The description provides clear usage context through explicit example queries ('Use for queries like...'), which effectively communicates when to use the tool. However, it does not explicitly mention when not to use it or name alternative sibling tools, so it stops short of a 5.

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

find_museum_guideAInspect

Search travel.art's catalogue of museum visitor guides. Returns museums with current 2026 ticket info, opening hours, address, essential works in viewing order, route duration, and a link to travel.art's full guide. Use for queries like 'how to visit the Louvre', 'Vatican Museums skip the line', 'Uffizi best route'.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityNoCity filter (e.g., 'Paris', 'Rome', 'Florence'). Optional.
queryNoFree-text query (museum name, work, artist, city). Optional.
countryNoISO 3166-1 alpha-2 country code. Optional.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the burden of disclosure. It transparently lists the output fields and the data year (2026), implying a read-only search operation. It does not cover edge cases like empty results or parameter precedence, but for a search tool it provides strong behavioral 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 three sentences, front-loaded with the core purpose, followed by the return value details and example queries. Every sentence contributes meaningfully with no redundancy or fluff.

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?

The description is complete for a search tool with no output schema: it explains what the tool returns and offers sample queries. It could slightly improve by clarifying how the optional parameters (city, query, country) combine, but the overall context is sufficient.

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

Parameters3/5

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

The schema already describes all three parameters with 100% coverage, so the baseline is 3. The description's example queries add some usage context but do not add new meaning about parameter formats, relationships, or constraints beyond what the schema provides.

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 searches travel.art's catalogue of museum visitor guides, with a specific verb and resource. It lists the return content (ticket info, opening hours, address, works, route duration, link) and provides example queries, making it distinct from sibling tools like find_art_events or recommend_art_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?

The description gives explicit example queries for when to use the tool, such as 'how to visit the Louvre' or 'Uffizi best route'. It does not explicitly mention when not to use it or name alternative tools, but the context and sibling list make the appropriate use case clear.

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

recommend_art_tripAInspect

Recommend an art-tourism trip itinerary for a specific city using only travel.art's published content. Returns events active during the trip dates, museum guides for the city, and links to all relevant travel.art guides. The recommendation is grounded in published data only — no fabrication.

ParametersJSON Schema
NameRequiredDescriptionDefault
cityYesDestination city (e.g., 'Paris', 'Venice', 'Florence', 'London', 'Basel', 'Miami Beach').
endDateNoISO 8601 trip end date. Optional.
startDateNoISO 8601 trip start date. Optional — if provided, filters events to those active on or near these dates.

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It explicitly states the recommendation is 'grounded in published data only — no fabrication,' which is a critical trust assurance. It also discloses the return composition (events, museum guides, links). This adds value beyond the schema and addresses potential concerns about hallucination. It doesn't mention side effects, but this is a read-only recommendation tool, so none expected.

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 exactly three sentences: purpose, output contents, and a grounding guarantee. It is front-loaded with the main action, and every sentence contributes meaningful information without redundancy or filler. This is a model of concise, well-structured tool documentation.

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?

Given a 3-parameter tool with no output schema, the description sufficiently covers the essentials. It lists what the tool returns (events, museum guides, links) and provides a behavioral guarantee (no fabrication). It could offer more detail on the itinerary structure, but for a recommendation tool, this level of completeness is adequate. The richness of the description compensates for the lack of output schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description mentions 'city' and 'trip dates' but does not add new semantic details beyond what the input schema already provides. For instance, the schema already explains that startDate filters events. The description repeats this without enriching it further, so the score stays at baseline.

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 function: 'Recommend an art-tourism trip itinerary for a specific city' using specific inputs. It defines the output (events, museum guides, links) and distinguishes itself from sibling tools like find_art_events and find_museum_guide by providing a composite itinerary. The verb 'recommend' and resource 'art-tourism trip itinerary' are specific and unambiguous.

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?

The description establishes a clear usage context: when a user needs a full art-tourism itinerary for a city, including events and museum guides, this tool should be used. It also notes the constraint of using only travel.art's published content. While it doesn't explicitly name alternatives or exclusions, the 'trip itinerary' phrasing implies it is for broader planning vs. single-purpose tools. This gives clear context without explicit when-not-to-use guidance.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv1.6.0
    • Changedfind_art_events1 field changed
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "biennale",
        -  "art-fair",
        -  "festival"
        -]New value: +[
        +  "biennale",
        +  "art-fair",
        +  "festival",
        +  "museum-exhibition"
        +]
    • Addedfind_layover_itinerary
  2. 3 tool updatesv0.1.0
    • First observedfind_art_events
    • First observedfind_museum_guide
    • First observedrecommend_art_trip

TDQS

A4.4/5.0

Scored across 4 tools

Disambiguation5/5

Each tool targets a distinct catalogue type: layover itineraries, museum guides, art events, and full trip recommendations. The descriptions clearly differentiate scope (e.g., layover is airport-connection-specific, while recommend_art_trip is city-wide), so an agent should rarely misselect.

Naming Consistency4/5

Three tools follow a clean 'find_<object>' pattern, but recommend_art_trip breaks the pattern by using 'recommend' instead of 'find'. This is a minor deviation and the names remain predictable and readable.

Tool Count5/5

Four tools is a well-scoped size for a niche art-travel content server. Each tool has a clearly distinct purpose and none feel redundant or extraneous, fitting comfortably within the ideal 3–15 range.

Completeness4/5

The set covers the main user intents: finding events, museum guides, layover-specific itineraries, and full trip recommendations. There is no direct 'get by ID' tool, but the search tools return links to full guides, so the surface feels adequately complete for the domain.

Maintenance

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides access to European cultural heritage collections and artworks, allowing users to search for items, get detailed information about specific artworks, browse collections by institution, and receive AI-powered recommendations based on interests.
    1
    -
  • F
    license
    A
    quality
    D
    maintenance
    Provides scored and reasoned Kyoto temple data optimized for AI travel agents to deliver personalized recommendations based on natural language queries. It enables agents to retrieve detailed temple information including historical significance, pricing, and crowd levels.
    2
    -
  • A
    license
    B
    quality
    D
    maintenance
    Enables AI agents to search and explore over 570,000 artworks from the Metropolitan Museum of Art and Art Institute of Chicago without needing an API key.
    9
    2
    MIT