This site uses PostHog and Google Analytics (with IP anonymization) to understand how visitors use the service. No advertising cookies. Privacy Policy

New · Model Context Protocol

Travel-industry intelligence,
inside your AI assistant.

The TourismIntel MCP Server gives Claude, Cursor and any MCP client six data domains in one connection: curated news, the weekly Travel Brief, reports & report briefs, the industry events calendar, real-time trends and Pulse official statistics (Pro). Free key, one minute to set up — ChatGPT via OAuth coming soon.

MCP Server operational

What is MCP?

The Model Context Protocol is the open standard that lets AI assistants use external tools and data sources. Once connected, your assistant can call TourismIntel directly — searching our news archive, pulling the latest Travel Brief, reading a report brief, listing upcoming industry events or checking what's trending — and use real, curated data in its answers instead of guessing.

What you can do

Morning industry scan

“What happened in hotel tech this week? Summarise the 5 most important stories.”

Trend detection

“Which travel stories are going viral right now, and why do they matter for a DMO?”

Research assistant

“Find recent reports about AI adoption in hospitality and compare their forecasts.”

Brief-powered content

“Draft a LinkedIn post based on this week's TourismIntel Travel Brief.”

Competitive monitoring

“Search the last 90 days of news about Booking.com's AI strategy.”

Event scouting

“Which hospitality trade shows are in Europe in November? Dates, city, access type and .ics links.”

Event calendar for a DMO

“Build me a Q1 2027 event calendar for a DMO: destinations and MICE events, with why each matters and the .ics links.”

Cited answers (PRO)

“Is airline NDC adoption accelerating? Answer with citations from the archive.”

Tiers & limits

Open

Free
  • 10 read-only tools: news, briefs, reports + report briefs, industry events, trends, clusters, newsletter, podcast
  • 30 requests / minute
  • 500 requests / day
  • Self-service key — get it below

Pro

Beta by request
  • Everything in Open (17 tools)
  • Pulse data — official statistics (OECD, Eurostat, UN Tourism, ISTAT, Banca d'Italia): KPIs, series, rankings, compare
  • pulse_ask — Ask the Data, cited answers on the numbers (15 / day)
  • ask_tourismintel — RAG answers with citations from the archive (100 / month)
  • 60 requests / min · 2,000 / day
  • Included in the TourismIntel PRO plan (web + mobile + MCP)

Web payments are coming soon — Beta access is granted manually while we finish billing.

Request Beta PRO access

Web payments are launching soon. Meanwhile, we grant PRO access manually to Beta testers — tell us who you are and how you'd use ask_tourismintel.

25 of 25 Beta spots left

Web payments are coming soon. Beta requests are reviewed manually — we'll get back to you by email.

Get your free key

Instant, no credit card. One active key per email — we'll also email you a copy.

Requesting a key also creates your free TourismIntel account (if you don't have one yet). Disposable email addresses are rejected. Max 3 requests per hour per network.

Already have a key? Check usage & rotate it →

Connect your client

Server URL: https://tourismintel.ai/api/mcp · Transport: Streamable HTTP · Auth: Authorization: Bearer ti_live_… or X-API-Key: ti_live_…

Claude.ai (web & mobile) — custom connector

  1. Settings → Connectors → Add custom connector (paid plans).
  2. Remote MCP server URL: https://tourismintel.ai/api/mcp
  3. Open Advanced settings → Additional request headers and add one header: name x-api-key, value = your ti_live_… key, keep Required checked.
  4. Save — the TourismIntel tools appear in the chat tool menu.

Claude reserves the authorization header for its own OAuth token (it is greyed out in the list), so the connector must send the key as x-api-key — our server accepts it with the same tier, quotas and audit as the Bearer form.

URL:    https://tourismintel.ai/api/mcp
Header: x-api-key: YOUR_KEY   (Required ✓)

Claude Desktop

Add this to claude_desktop_config.json (Settings → Developer → Edit Config), replacing YOUR_KEY. Requires Node.js (uses the mcp-remote bridge).

{
  "mcpServers": {
    "tourismintel": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://tourismintel.ai/api/mcp",
        "--header", "Authorization: Bearer YOUR_KEY"
      ]
    }
  }
}

Cursor

Create .cursor/mcp.json in your project (or ~/.cursor/mcp.json globally):

{
  "mcpServers": {
    "tourismintel": {
      "url": "https://tourismintel.ai/api/mcp",
      "headers": { "Authorization": "Bearer YOUR_KEY" }
    }
  }
}

ChatGPT

Coming soon

ChatGPT's custom connectors accept only OAuth or no authentication — there is no field for an API-key header, so a ti_live_… key cannot be used there today. TourismIntel is shipping OAuth 2.0 sign-in: ChatGPT users will log in with their TourismIntel account and keep their tier and quotas. Until then, Claude.ai, Claude Desktop and Cursor work fully with your key.

Quick test (curl)

curl -s -X POST https://tourismintel.ai/api/mcp \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Call a tool with filters — here list_events for hospitality trade shows in Europe in November:

curl -s -X POST https://tourismintel.ai/api/mcp \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"list_events",
       "arguments":{"region":"europe","month":"2026-11","theme":"hospitality","limit":5}}}'

Test it in Claude

Once the connector is on, paste this prompt — Claude should call get_trending and list_events and cite tourismintel.ai links:

Using TourismIntel: what are the 3 travel stories going viral right now, and which industry events take place in Europe next month? Link the sources.

Tool reference

10 Open tools + 7 Pro tool, read live from the server — every parameter and return field below is what the server exposes today.

News & trends

90 days of curated travel-industry news, viral / early-signal detection and raw story clusters.

search_newsopenread-only

Search TourismIntel's curated travel-industry news feed (last 90 days, 15+ vetted editorial sources + AI discovery). Returns title, summary, source, URL and date — max 20 results per call. Use `query` for full-text search across title/summary/source.

ParameterType / valuesDescription
querystringFull-text search terms (optional)
categorystringExact category filter, e.g. 'AI & Travel', 'Hotel Tech' (optional)
include_redditboolean · default falseInclude Reddit-sourced items (default false)
limitinteger 1–20 · default 10Max results (default 10)
pageinteger ≥ 1 · default 1Page number (default 1)

Returns articles[]: id · title · summary (≤400 chars) · source · category · url · publishedAt — plus total_matching, page, has_more · max 20 per call

Try in Claude / Cursor: “Search TourismIntel news for 'hotel tech' from the last week and summarise the 5 most important stories with their links.”

get_trendingopenread-only

News currently trending: 'viral' = same story covered by 3+ publishers within 72h (semantic clustering); 'early_signal' = 4+ unique reader clicks within 6h of publication.

ParameterType / valuesDescription
typeviral | early_signal · default bothFilter by signal type (default: both)
hoursinteger 1–72 · default 24Recency window for early_signal (default 24)
limitinteger 1–20

Returns items[]: title · summary · source · originalUrl · publishedAt · trending_type (viral | early_signal) · cluster_size · cluster_sources · public_clicks — plus window_hours, detection_explained · max 20 per call

Try in Claude / Cursor: “Which travel stories are going viral right now, and why should a DMO care about each one?”

get_clustersopenread-only

Raw story clusters — groups of articles covering the same news event across multiple publishers. Includes cluster size, sources and member article ids.

ParameterType / valuesDescription
viral_onlyboolean · default trueOnly clusters with 3+ distinct sources (default true)
hoursinteger 1–168 · default 72Recency window (default 72)
limitinteger 1–20

Returns clusters[]: cluster_id · size · sources · articles (ids, titles, urls) — plus total, window_hours · max 20 per call

Try in Claude / Cursor: “Show me the news events covered by 3+ publishers in the last 72 hours and group them by topic.”

Briefs & newsletter

The weekly Travel Brief (full editorial content + FAQ + sources), the newsletter and the podcast.

get_briefopenread-only

Get a TourismIntel weekly Travel Brief (full editorial content, FAQ and the news sources it drew from). Omit `slug` for the latest published brief; pass a slug from list_briefs for a specific week.

ParameterType / valuesDescription
slugstringBrief slug (SEO or ISO-week form). Omit for the latest.

Returns brief: slug · title · preview · content (editorial markdown) · faqs · source_articles · generated_at · week_number · web_url

Try in Claude / Cursor: “Get the latest TourismIntel Travel Brief and draft three LinkedIn posts from its main takeaways, linking the brief.”

list_briefsopenread-only

List published weekly Travel Briefs (newest first) with slug, title, preview and date.

ParameterType / valuesDescription
limitinteger 1–20 · default 12Max results (default 12)
pageinteger ≥ 1

Returns briefs[]: slug · seo_slug · title · preview · generated_at · week_number — plus total, page, pages · max 20 per call

Try in Claude / Cursor: “List the last 8 weekly Travel Briefs and tell me which weeks covered airline distribution.”

latest_newsletteropenread-only

The latest published TourismIntel newsletter (title, date, excerpt and web link).

No parameters.

Returns newsletter: title · date · excerpt · web_url

Try in Claude / Cursor: “What did the latest TourismIntel newsletter cover? Give me the link.”

list_podcast_episodesopenread-only

Published TourismIntel Weekly podcast episodes (newest first) with listen URLs.

ParameterType / valuesDescription
limitinteger 1–20

Returns episodes[]: title · published_at · duration · listen_url — plus latest, total · max 20 per call

Try in Claude / Cursor: “List the latest TourismIntel Weekly podcast episodes with their listen links.”

Reports

150+ organisations' research with TourismIntel's original 600–900-word editorial brief per report.

list_reportsopenread-only

Curated industry reports & research from 150+ organisations (WTTC, UNWTO, Skift, Phocuswright, McKinsey...). Filter with `search` (title/organisation/focus) and `category`. Each row carries `slug` + `brief_url`: call get_report_brief(slug) for TourismIntel's editorial brief.

ParameterType / valuesDescription
searchstringSubstring search across title / organisation / focus
categorystringMacro category exact match (optional)
limitinteger 1–20
pageinteger ≥ 1

Returns reports[]: slug · title · organisation · category · focus · summary · published_date · url · brief_status · brief_url — plus total, page, has_more · max 20 per call

Try in Claude / Cursor: “Find reports about AI adoption in hospitality published by consultancies, then compare their forecasts using the report briefs.”

get_report_briefopenread-only

TourismIntel's ORIGINAL editorial brief on one industry report (600–900 words when the source is public): at a glance, scope, key findings, key numbers (only figures present in the source), why it matters for DMOs / hotels / travel tech, methodology & limits, access type and the official source URL. Pass the `slug` returned by list_reports (or from a tourismintel.ai/reports/{slug} URL). Never the third-party document itself — always cite the official URL.

ParameterType / valuesDescription
slug*stringReport slug from list_reports, e.g. 'long-haul-travel-barometer-2-2026'

Returns report + brief: report.title · report.organisation · report.published_date · report.access · report.official_url · report.web_url · brief (at a glance, scope, key findings, key numbers, why it matters, methodology & limits) · brief_status · attribution

Try in Claude / Cursor: “Read TourismIntel's brief on the WTTC Economic Impact report and list the five key numbers with the official source link.”

Industry events

Trade shows, marketplaces, conferences, MICE and awards — organiser-confirmed dates only, with .ics links.

list_eventsopenread-only

Upcoming travel & tourism industry events (trade shows, B2B marketplaces, conferences, MICE, awards) from TourismIntel's curated catalogue — dates and venues taken from organiser announcements only (TBA events are never listed). Filter by `region` (europe, americas, apac, middle_east, africa), `month` (YYYY-MM), `theme` (ai_data, distribution, hospitality, destinations, sustainability, mice, luxury), `type`, `country` (ISO-2) or free-text `query`. Each row carries dates, city/venue, organiser, access type, an 80–120-word 'why it matters', the official URL, the tourismintel.ai page (web_url) and an .ics link. Max 20 per call, sorted by start date.

ParameterType / valuesDescription
regioneurope | americas | apac | middle_east | africaRegion (optional)
monthstring (^\d{4}-\d{2}$)Month YYYY-MM — events taking place during that month (optional)
themeai_data | distribution | hospitality | destinations | sustainability | mice | luxuryTheme (optional)
typeconference | trade_show | marketplace | mice | consumer_fair | vendor | awardsEvent type (optional)
countrystring (2 chars)ISO-2 country code, e.g. 'IT' (optional)
querystringFree-text match on name / city / country / venue / organiser (optional)
closing_soonboolean · default falseOnly events whose registration deadline falls within 45 days (default false)
limitinteger 1–20 · default 10Max results (default 10)
pageinteger ≥ 1 · default 1Page number (default 1)

Returns events[]: slug · name · organiser · start_date · end_date · city · country · venue · event_type_label · region · themes · access_label · registration_deadline · why_it_matters · official_url · web_url · ics_url — plus total, total_upcoming, page, has_more, taxonomy, attribution · max 20 per call

Try in Claude / Cursor: “Which hospitality trade shows take place in Europe in November? Give me dates, city, access type and the .ics link for each.”

Ask (Pro)

Cited RAG answers from the archive — Pro keys only.

ask_tourismintelproread-only

PRO — Ask a question about the travel industry and get a cited, RAG-generated answer from TourismIntel's news archive (semantic retrieval + LLM synthesis with citations). Quota: 100 questions/month per PRO key.

ParameterType / valuesDescription
question*stringYour question (5-500 chars)
daysinteger 1–365 · default 90Archive time window in days (default 90)

Returns answer_markdown + citations[]: answer_markdown · citations (title, source, url, date) · quota (used / limit) · max 20 per call

Try in Claude / Cursor: “Is airline NDC adoption accelerating in Europe? Answer with citations from the TourismIntel archive.”

Pulse data (Pro)

Official tourism statistics — OECD, Eurostat, UN Tourism via OWID, ISTAT, Banca d'Italia: country KPIs, time series, rankings, side-by-side comparisons and Ask the Data (grounded, cited). Sources are never merged. Pro keys only.

pulse_kpiproread-only

PRO — Pulse headline KPIs for one country (ISO3): international arrivals, travel receipts (US$ and national currency), tourism share of GDP / employment, recovery vs 2019, receipts per arrival, nights year-to-date. Official statistics only (OECD, UN Tourism via OWID, Eurostat) — each KPI carries its own source, period, dataset code and a human `display` label; sources are never merged. Same data as GET /api/external/pulse/kpi/{iso3}.

ParameterType / valuesDescription
country*string (3 chars)ISO3 country code, e.g. ITA
langen | it · default enLanguage of the human `display`/`label` fields (default en)

Returns kpis{}: kpis.<code>.value · period · yoy_pct · source_org · dataset_code · unit · display (Source — indicator · period) — plus country, country_label, sparklines

Try in Claude / Cursor: “Give me Italy's headline tourism KPIs (arrivals, receipts, GDP share) with source and year for each figure.”

pulse_seriesproread-only

PRO — Pulse time series for one curated indicator across up to 10 countries (ISO3). ~35 indicators: annual (intl_arrivals, travel_receipts_usd, tourism_gdp_share…), monthly Eurostat (nights_total, nights_foreign, arrivals_monthly, platform_nights…), Banca d'Italia (it_inbound_spend_by_origin…). One series per (source, country) — never merged. Unknown indicator → error listing all valid codes. Without `from` the last 10 years are returned. Same data as GET /api/external/pulse/series.

ParameterType / valuesDescription
indicator*stringCurated indicator code, e.g. nights_total, intl_arrivals, it_inbound_spend_by_origin
countries*arrayISO3 codes, e.g. ["ITA", "ESP"]
fromstring (^\d{4}(-\d{2}|-Q[1-4])?$)Start period, inclusive (YYYY, YYYY-MM or YYYY-Qn). Default: 10 years ago
tostring (^\d{4}(-\d{2}|-Q[1-4])?$)End period, inclusive (optional)
sourcestringRestrict to one source_org, e.g. OECD, EUROSTAT, UN_TOURISM_VIA_OWID, BANCA_D_ITALIA (optional)
langen | it · default enLanguage of the human `display`/`label` fields (default en)

Returns series[]: ref_area · ref_area_label · source_org · dataset_code · unit · data_type · points[] (period, value) · display — plus indicator, label, sources, default_source, freq, from, to, default_window_applied · max 20 per call

Try in Claude / Cursor: “Compare monthly nights in tourist accommodation for Italy and Spain since 2023 (Eurostat) and describe the seasonality.”

pulse_rankingsproread-only

PRO — Pulse country rankings for one indicator. Default source UN Tourism via OWID (200+ economies); pass `source` for others (OECD; EUROSTAT for nights_total / arrivals_monthly — ranked on calendar-year totals). When the indicator has no series in the chosen source the error lists the available sources. Latest year per economy (6-year window) or a fixed `year`. Same data as GET /api/external/pulse/rankings.

ParameterType / valuesDescription
indicatorstring · default intl_arrivalsCurated indicator code (default intl_arrivals)
sourceUN_TOURISM_VIA_OWID | OECD | EUROSTAT | BANCA_D_ITALIA · default UN_TOURISM_VIA_OWIDsource_org (default UN_TOURISM_VIA_OWID)
yearstring (^\d{4}$) · default latest available per economyFixed year (default: latest available per economy)
limitinteger 1–50 · default 20Rows (default 20)
langen | it · default enLanguage of the human `display`/`label` fields (default en)

Returns rankings[]: rank · ref_area · ref_area_label · period · value · yoy_pct · cagr_5y · sparkline — plus indicator, label, source_org, year, economies, display, aggregation · max 20 per call

Try in Claude / Cursor: “Rank the top 15 countries by international arrivals (UN Tourism) and by nights in tourist accommodation (Eurostat).”

pulse_freshnessproread-only

PRO — Pulse warehouse freshness: version, build time, row counts and sync state per source (OECD, Eurostat, UN Tourism via OWID, ISTAT, Banca d'Italia) and next due sync. Same data as GET /api/external/pulse/freshness (without the internal operations block).

No parameters.

Returns warehouse + sources[]: warehouse.version · warehouse.built_at · warehouse.row_counts (per source) · warehouse.source_status · sources[] (source, cadence_days, last_success_at, next_due_at, warehouse_rows) · build · max 20 per call

Try in Claude / Cursor: “How fresh is the Pulse data warehouse — version, build time and rows per source?”

pulse_compareproread-only

PRO — Pulse side-by-side comparison of 2–6 countries (the data behind /pulse/compare): one row per indicator with ONE source per row (never merged), the most recent period shared by all countries, values + yoy, fresher points in latest_by_country and the last 10 points per country. Default indicators: intl_arrivals, travel_receipts_usd, nights_total (monthly → calendar-year totals). Same data as GET /api/external/pulse/compare.

ParameterType / valuesDescription
countries*array2–6 ISO3 codes, e.g. ["ITA", "ESP", "FRA"]
indicatorsarray · default intl_arrivals, travel_receipts_usd, nights_totalCurated indicator codes (default: intl_arrivals, travel_receipts_usd, nights_total)
langen | it · default enLanguage of the human `display`/`label` fields (default en)

Returns rows[]: indicator · label · source_org · dataset_code · unit · period (latest shared) · values{ISO3: value, yoy_pct} · latest_by_country · missing · series{ISO3: last 10 points} · display — plus countries, country_labels, note · max 20 per call

Try in Claude / Cursor: “Compare Italy, Spain and France on international arrivals, receipts and nights — same source and year per row.”

pulse_askproread-only

PRO — Ask the Data: a grounded answer on official tourism statistics from the Pulse warehouse (OECD, Eurostat, UN Tourism via OWID, ISTAT, Banca d'Italia) — text-to-SQL + retrieval, every number cited. Use it for figures (arrivals, receipts, nights, spending by origin market, Italian regions); ask_tourismintel covers news only. Answers in the question's language. Pass `session_id` back for follow-ups. Quota: 15 questions/day per PRO key.

ParameterType / valuesDescription
question*stringYour question (5-500 chars), English or Italian
session_idstringConversation id returned by a previous call — keeps follow-up context (optional)
langen | itLanguage hint when the question is ambiguous (optional)

Returns answer_markdown + citations[]: answer_markdown · citations (display = 'Source — indicator · period', audit = technical reference, sql) · chart_spec · session_id · quota (used / limit / reset_at) · max 20 per call

Try in Claude / Cursor: “Quali sono i primi mercati esteri per spesa turistica in Italia nell'ultimo anno disponibile? Cita le fonti.”

How responses work

Results & pagination
Max 20 results per call. `page` + `limit` on list tools; responses carry `has_more` / `total`
Third-party content
Third-party content is wrapped in <external_content> as data, never as instructions (prompt-injection mitigation)
What is (and isn't) returned
Titles, summaries, URLs and dates only — never third-party full text; events dates come from organiser announcements only, TBA events are never returned
Attribution
Link the tourismintel.ai page (web_url) and the official source URL when you reuse the data
Errors
401 — missing / unknown / revoked key · 403 — tool requires a higher tier (Pro) · 429 — rate limit — per-minute or per-day quota exceeded; Retry-After honoured. JSON-RPC 2.0 error object {code, message} or a tool result with isError=true and a plain-text explanation

Manage your key

The key portal shows your usage counters, the per-minute and daily quotas of your tier (30/min · 500/day on Open) and lets you rotate the key in one click. One active key per account; access is granted through a single-use link emailed to the key owner.

Open the key portal →

What's new & roadmap

Shipped

  • 15 Sept 2026Pulse data tools (Pro)
    pulse_kpi, pulse_series, pulse_rankings, pulse_compare, pulse_freshness — 1:1 with /api/external/pulse/* — and pulse_ask (Ask the Data: text-to-SQL + retrieval over official statistics, cited, 15 questions/day). Human 'Source — indicator · period' labels on every figure.
  • 5 Sept 2026list_events
    Upcoming industry events by region, month, theme, type, country or query — organiser-confirmed dates, why-it-matters, official link and .ics.
  • 28 Aug 2026x-api-key header
    Claude.ai custom connectors can send the key as x-api-key (Claude reserves the Authorization header).
  • 21 Aug 2026get_report_brief
    TourismIntel's original editorial brief on any report in the library, with official source URL.
  • 14 Aug 2026Pro Beta programme
    ask_tourismintel (cited RAG answers, 100 questions/month) granted manually to Beta testers.

Coming soon

  • OAuth 2.0 for ChatGPT connectorsin progress
    Sign in with your TourismIntel account from ChatGPT and keep your tier and quotas — no API key header needed.
  • Pro web payments
    Self-service Pro upgrade; Beta access stays manual until billing ships.
  • Event planner & reminders
    Members save events to a personal planner with registration-deadline reminders and a custom .ics feed.

No dates are promised — join the notify list above to hear about ChatGPT support first.

FAQ

Security & fair use

  • Keys are stored as SHA-256 hashes — we can never see or recover your raw key. Keep it secret.
  • Tool responses mark third-party content as data, not instructions, mitigating prompt-injection risk.
  • Rate limits protect the service for everyone; automated bulk extraction or full-text scraping is not permitted.
  • Usage is governed by our Terms of Use. Keys can be revoked for abuse.
  • Questions or PRO upgrades: hello@tourismintel.ai