MCP for tour guides: building a remote MCP server with ~100 tools and OAuth
I work on Your Next Tours, an app tour guides use to broadcast live audio to their group from their phone. Guests scan a QR code and listen in the browser. Before a tour, guides prepare a lot of material in our panel: day-by-day programs, stops, info cards, guest lists, sometimes a small company website. Most of that material already exists somewhere else, usually as a PDF itinerary. So we built…
The author discusses the creation of a remote Multi-Modal Content Provider (MCP) server for tour guides. This server enables guides to connect their own AI models, such as Claude, ChatGPT, or Cursor, to their accounts. Instead of manually retyping material, guides can upload PDF itineraries, and the AI model processes them using tools. The source covers the setup process, challenges faced, and solutions implemented for the server.
The server is built with the endpoint https://api.yournext.tours/api/mcp/guide and uses Streamable HTTP for transport, which is stateless and runs on a PM2 cluster. Authentication is handled via OAuth 2.1 + PKCE for Claude.ai and ChatGPT, or a personal API key for clients sending only authorization headers. The authorization server is self-hosted Ory Hydra, which delegates login and consent to the existing account system.
The setup includes 100 tools, each with a specific scope. The LLM cost is covered by the user's own subscription, which is why the setup was beneficial for the creators. They also decided not to build their own OAuth server but to use Ory Hydra instead.
To handle stateless Streamable HTTP, the source server explicitly returns a 405 status code for GET and DELETE requests, as these methods do not support Server-Sent Events (SSE) streams. The 401 response code is crucial for the authorization process, as the authorization server's WWW-Authenticate header must include the scope.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.