travel.art

travel.art

@travel2TypeScriptMITUpdated 1w ago

Art-tourism data for AI agents: biennales, art fairs, museums, layover itineraries with 2026 facts.

Server endpointStreamable HTTPNo authProbed

This is the third-party server itself — Odel doesn't run it. Hitting this URL directly talks straight to the upstream server with no auth or proxying. Connect through Odel to front it with managed auth.

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).

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 tools — find_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 versioning — mcp.travel.art/v1, /v2 URL versioning when we break compatibility.

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