{
  "$schema": "https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json",
  "name": "ai.globetrotters/readiness",
  "version": "0.1.0",
  "description": "Check a travel website's AI Presence Readiness and query the global benchmark.",
  "title": "Globetrotters AI Presence Readiness",
  "remotes": [
    {
      "type": "streamable-http",
      "url": "https://mcp.globetrotters.ai/readiness",
      "supportedProtocolVersions": [
        "2026-07-28",
        "2025-11-25",
        "2025-06-18",
        "2025-03-26"
      ]
    }
  ],
  "protocolVersion": "2026-07-28",
  "supportedVersions": [
    "2026-07-28",
    "2025-11-25",
    "2025-06-18",
    "2025-03-26"
  ],
  "transport": "streamable-http",
  "endpoint": "https://mcp.globetrotters.ai/readiness",
  "auth": {
    "type": "none"
  },
  "serverInfo": {
    "name": "globetrotters-readiness",
    "version": "0.1.0",
    "provider": "Globetrotters"
  },
  "capabilities": {
    "tools": {
      "listChanged": false
    }
  },
  "tools": [
    {
      "name": "check_readiness",
      "description": "Check a travel website's AI Presence Readiness — how well an AI agent can read, understand, and act on it. Returns Globetrotters' AI Presence Readiness Score, band, per-pillar breakdown, and the top issues to fix, plus a link to the full public report. If a recent audit already exists it is returned instantly; otherwise a new audit is started and you must poll get_audit_status (a cold audit takes a minute or two). A 'redirected' status means the domain permanently moved: use the 'redirectsTo' domain instead. Always show the user the report link.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "domain": {
            "type": "string",
            "description": "The website domain to audit, e.g. 'visitnantes.com'. A bare hostname or full URL both work."
          }
        },
        "required": [
          "domain"
        ]
      },
      "annotations": {
        "title": "Check AI Presence Readiness",
        "readOnlyHint": false,
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true
      }
    },
    {
      "name": "get_audit_status",
      "description": "Poll the status of an audit started by check_readiness. Returns 'queued' or 'running' with progress while the audit is in flight, or the full AI Presence Readiness summary once 'completed'. A 'failed' status carrying 'redirectsTo' means the domain permanently moved — re-run check_readiness on that domain. Audits can take a minute or two — wait ~20-30 seconds between polls.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "auditId": {
            "type": "string",
            "description": "The auditId returned by check_readiness."
          }
        },
        "required": [
          "auditId"
        ]
      },
      "annotations": {
        "title": "Get audit status",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "get_benchmark_summary",
      "description": "Get global AI Presence Readiness benchmark stats across all audited travel organizations: total count, average score, and adoption rates for key signals (llms.txt, schema.org types, action-readiness). Use this for 'how strong is the travel industry's AI presence?' style questions.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "annotations": {
        "title": "Get benchmark summary",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      }
    },
    {
      "name": "get_benchmark_cohort",
      "description": "Get the AI Presence Readiness benchmark for its two sampled populations: official destinations (scope 'destination', the default) and hotels (scope 'stay', a random sample of hotels per country), or both side by side (scope 'all'). Restaurants and attractions are not sampled. With no country, returns a per-country overview (average score, top organization, band distribution; under 'all', one block per population). With a 'country' (ISO 3166-1 alpha-2 code, e.g. 'FR'), returns that country's cohort stats. Destinations and hotels are scored on different rubrics: 'all' never blends them, and figures compare only within one population.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "country": {
            "type": "string",
            "description": "Optional ISO 3166-1 alpha-2 country code, e.g. 'FR', 'US'."
          },
          "scope": {
            "type": "string",
            "enum": [
              "all",
              "destination",
              "stay"
            ],
            "default": "destination",
            "description": "'destination' (default) for official destinations, 'stay' for hotels, 'all' for both side by side, each with its own scores."
          }
        }
      },
      "annotations": {
        "title": "Get benchmark leaderboard",
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true
      }
    }
  ]
}
