{"slug": "what-it-took-to-ship-a-production-remote-mcp-server-with-oauth-2-1", "title": "What it took to ship a production remote MCP server with OAuth 2.1", "summary": "Minds, an evidence-grounded synthetic market research platform, has shipped a hosted MCP server that connects to ChatGPT, Claude, Cursor, Google Antigravity, and Streamable HTTP clients. The server exposes 15 tools and uses OAuth 2.1 dynamic registration, with a public repository and setup guide. The team highlights implementation lessons, including handling Accept headers and session IDs, and emphasizes that the live server is the schema authority.", "body_md": "Publishing an MCP endpoint is easy. Making it behave consistently across clients is where the work starts.\n\nWe recently shipped a hosted MCP server for Minds, an evidence-grounded synthetic market research platform. The server now connects to ChatGPT, Claude, Cursor, Google Antigravity, and clients that support Streamable HTTP.\n\nHere are the implementation lessons that mattered.\n\nOur MCP client URL is:\n\n```\nhttps://getminds.ai/mcp\n```\n\nThat URL speaks the protocol. A normal browser should instead reach an indexable setup guide. We therefore keep two explicit fields wherever a registry supports them: the remote transport URL for clients and `/mcp/setup`\n\nfor humans.\n\nOne early integration failed with:\n\n```\nNot Acceptable: Client must accept text/event-stream\n```\n\nThe robust client request advertises both response types:\n\n```\nAccept: application/json, text/event-stream\nContent-Type: application/json\n```\n\nOur current endpoint successfully negotiates a JSON initialize response and returns an `Mcp-Session-Id`\n\nfor the session.\n\nThe initialize response points clients to OAuth protected-resource metadata. Clients that support dynamic registration can discover the flow without a copied client ID or secret. API keys remain available for environments that securely support custom bearer headers.\n\nThe server currently exposes 15 tools across audiences, panels, durable studies, study drafts, summaries, method discovery, and export. Clients should inspect the live `tools/list`\n\nresponse rather than hard-code schemas from an old article.\n\nOur public repository documents the role of every operation, but deliberately treats the running server as the schema authority.\n\nFor multi-question research, the client first calls `plan_panel_study`\n\n. A human can review the plan before `run_panel_study`\n\nstarts a durable server-side run. The agent polls `get_panel_study`\n\ninstead of assuming a long task finished inside one chat turn.\n\nSynthetic panels are useful for an early decision-support pass: sharpening a question, surfacing objections, comparing plausible reactions, and deciding what deserves real-respondent validation. They are not representative human fieldwork.\n\nThe repository and setup guide are public:\n\nIf you maintain a remote MCP server, I would be interested in the client-specific edge case that consumed the most time for you.", "url": "https://wpnews.pro/news/what-it-took-to-ship-a-production-remote-mcp-server-with-oauth-2-1", "canonical_source": "https://dev.to/getminds/what-it-took-to-ship-a-production-remote-mcp-server-with-oauth-21-364c", "published_at": "2026-08-01 19:48:50+00:00", "updated_at": "2026-08-01 20:13:42.946066+00:00", "lang": "en", "topics": ["ai-products", "developer-tools", "ai-agents"], "entities": ["Minds", "ChatGPT", "Claude", "Cursor", "Google Antigravity", "MCP"], "alternates": {"html": "https://wpnews.pro/news/what-it-took-to-ship-a-production-remote-mcp-server-with-oauth-2-1", "markdown": "https://wpnews.pro/news/what-it-took-to-ship-a-production-remote-mcp-server-with-oauth-2-1.md", "text": "https://wpnews.pro/news/what-it-took-to-ship-a-production-remote-mcp-server-with-oauth-2-1.txt", "jsonld": "https://wpnews.pro/news/what-it-took-to-ship-a-production-remote-mcp-server-with-oauth-2-1.jsonld"}}