{
  "openapi": "3.0.3",
  "info": {
    "title": "travelbots.org Travel Desk",
    "version": "0.3.8",
    "description": "Company tool is POST /desk (run_travel_job). Catalogue JSON is the aisle. No booking. Rank is not for sale. Do not start at mcp.so."
  },
  "servers": [
    {
      "url": "https://henry-travelbots.pages.dev"
    }
  ],
  "paths": {
    "/desk": {
      "get": {
        "summary": "Travel Desk handshake / version",
        "responses": {
          "200": {
            "description": "serverInfo travelbots-desk"
          }
        }
      },
      "post": {
        "operationId": "run_travel_job",
        "tags": [
          "Travel Desk"
        ],
        "summary": "run_travel_job \u2014 the company tool",
        "description": "Body {job}. Group 10+ \u2192 EasyGroupFlights info only. 2-pax CEE \u2192 Pelikan (live or honest DOWN). Never books. Never auto-files request_group_quote. Do not start at mcp.so.",
        "x-openai-isConsequential": false,
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "job"
                ],
                "properties": {
                  "job": {
                    "type": "string",
                    "description": "Natural-language travel job. Example: 22 pax Bratislava to Paris 12 October names later."
                  }
                }
              },
              "examples": {
                "group_air": {
                  "summary": "Group airfare 10+",
                  "value": {
                    "job": "22 pax Bratislava to Paris 12 October names later"
                  }
                },
                "cee_pair": {
                  "summary": "CEE 2-pax flights",
                  "value": {
                    "job": "2 adults VIE to MAD 20 November 2026"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Desk result \u2014 never a booking, never an auto-filed group quote"
          }
        }
      }
    },
    "/data/install.json": {
      "get": {
        "summary": "Runtime install lines for /desk",
        "responses": {
          "200": {
            "description": "Claude / Cursor / Hermes / ChatGPT / Grok"
          }
        }
      }
    },
    "/data/mcp.json": {
      "get": {
        "summary": "Drop-in index (not copy-true). Use /data/cursor-mcp.json for Cursor.",
        "responses": {
          "200": {
            "description": "mcpServers.travelbots-desk \u2192 /desk"
          }
        }
      }
    },
    "/data/cursor-mcp.json": {
      "get": {
        "summary": "Copy-true Cursor ~/.cursor/mcp.json \u2014 url is /desk",
        "responses": {
          "200": {
            "description": "mcpServers.travelbots-desk.url = /desk"
          }
        }
      }
    },
    "/data/vscode-mcp.json": {
      "get": {
        "summary": "Copy-true VS Code .vscode/mcp.json \u2014 url is /desk",
        "responses": {
          "200": {
            "description": "servers.travelbots-desk.url = /desk"
          }
        }
      }
    },
    "/data/claude_desktop_config.json": {
      "get": {
        "summary": "Copy-true Claude Desktop mcpServers \u2014 url is /desk",
        "responses": {
          "200": {
            "description": "mcpServers.travelbots-desk.url = /desk"
          }
        }
      }
    },
    "/data/for-agents.json": {
      "get": {
        "summary": "Desk object first, then slim catalogue listings",
        "responses": {
          "200": {
            "description": "desk + items[]"
          }
        }
      }
    },
    "/data/listings.json": {
      "get": {
        "summary": "Full catalogue",
        "responses": {
          "200": {
            "description": "Full listing objects"
          }
        }
      }
    },
    "/data/evals.json": {
      "get": {
        "summary": "Purpose tests + usefulness 0\u20135",
        "responses": {
          "200": {
            "description": "Map slug \u2192 eval"
          }
        }
      }
    },
    "/data/desk-evals.json": {
      "get": {
        "summary": "Travel Desk Quiet Drift pack \u2014 run_travel_job scored 0\u20135",
        "responses": {
          "200": {
            "description": "group / pelikan-down / split / sos / esim"
          }
        }
      }
    },
    "/llms.txt": {
      "get": {
        "summary": "Agent instructions",
        "responses": {
          "200": {
            "description": "text/plain"
          }
        }
      }
    },
    "/llms-full.txt": {
      "get": {
        "summary": "Full agent instructions + copy-true drop-ins + GEO 200 paths",
        "responses": {
          "200": {
            "description": "text/plain"
          }
        }
      }
    },
    "/.well-known/mcp.json": {
      "get": {
        "summary": "Discovery document",
        "responses": {
          "200": {
            "description": "MCP well-known"
          }
        }
      }
    },
    "/.well-known/agent.json": {
      "get": {
        "summary": "Agent card \u2014 Travel Desk at /desk, not mcp.so",
        "responses": {
          "200": {
            "description": "travelbots-desk"
          }
        }
      }
    },
    "/.well-known/ai-plugin.json": {
      "get": {
        "summary": "ChatGPT Custom GPT / Actions \u2014 OpenAPI POST /desk, not mcp.so",
        "responses": {
          "200": {
            "description": "schema_version v1 \u00b7 api.url = /openapi.json \u00b7 operationId run_travel_job"
          }
        }
      }
    },
    "/server.json": {
      "get": {
        "summary": "Official-registry payload for the Travel Desk",
        "responses": {
          "200": {
            "description": "com.travelbots/desk"
          }
        }
      }
    },
    "/.well-known/mcp-server.json": {
      "get": {
        "summary": "Same Official Registry payload as /server.json \u2014 remotes.url = /desk",
        "responses": {
          "200": {
            "description": "com.travelbots/desk streamable-http /desk"
          }
        }
      }
    },
    "/.well-known/oauth-protected-resource": {
      "get": {
        "summary": "RFC 9728 \u2014 Travel Desk is public (empty authorization_servers)",
        "responses": {
          "200": {
            "description": "resource=/desk \u00b7 auth none \u00b7 not mcp.so"
          }
        }
      }
    },
    "/.well-known/oauth-protected-resource/desk": {
      "get": {
        "summary": "RFC 9728 path insertion \u2014 same public /desk card as the origin PRM",
        "responses": {
          "200": {
            "description": "resource=/desk \u00b7 auth none \u00b7 not homepage HTML"
          }
        }
      }
    },
    "/.well-known/oauth-authorization-server": {
      "get": {
        "summary": "Not an OAuth authorization server \u2014 honest JSON, not homepage HTML",
        "responses": {
          "200": {
            "description": "error not_an_authorization_server"
          }
        }
      }
    },
    "/.well-known/openid-configuration": {
      "get": {
        "summary": "Not an OIDC issuer \u2014 honest JSON, not homepage HTML",
        "responses": {
          "200": {
            "description": "error not_an_openid_provider"
          }
        }
      }
    }
  }
}