Back to blog
mcpguidescross-llmbridgesportability

How to Connect a Custom MCP Server to Any LLM: The Complete Guide

Brandon Briggs·
Connect a custom MCP server to any LLM — the complete guide

Last verified July 18, 2026. Client UIs move fast — every section links to a maintained per-client guide that we re-verify as vendors ship.

TL;DR: If an AI app supports adding custom remote MCP servers with OAuth, you can connect it to any hosted MCP server in about two minutes: find the MCP or connectors setting, paste the server URL, approve the sign-in. That app now includes Claude on every plan, ChatGPT on Plus and up, the Gemini app (through Spark), Perplexity, Cursor, VS Code, and thirty-plus more. And because MCP lives in the app rather than the model, open models like GLM, Kimi, and DeepSeek get the same superpower through whichever harness runs them. The tables below map every client we've verified — where the setting hides, what each vendor calls it, what plan you need, and the one-word config traps.

I run Tempreon, a personal intelligence layer that ships as a hosted MCP server, which means my team's job is literally connecting one MCP server to every AI client that exists. This post is the map we wish we'd had — every working path, every dead end, and every naming quirk, as of mid-July 2026. The examples use Tempreon's server URL because it's the one we test with daily; every step works the same for any spec-compliant hosted MCP server.

The one pattern that works everywhere

MCP — the Model Context Protocol, announced by Anthropic on November 25, 2024, and donated to the Linux Foundation's Agentic AI Foundation in December 2025 — standardized how AI apps call external tools. By late 2025 the official SDKs were pulling 97 million downloads a month. The practical result: connecting a hosted MCP server to any compliant client is the same six moves, whatever the menus are called.

  1. Find the setting. Look for "MCP," "Connectors," "Custom apps," "Tools," or "Extensions" — usually under Settings. A command palette search for "MCP" finds it in most editors.
  2. Add a custom server. You'll be asked for a name and a URL. For Tempreon: https://api.tempreon.com/functions/v1/tempreon-mcp/mcp — note the /mcp endpoint path. Leaving that path off is the single most common connection failure across every client.
  3. Pick the transport, if asked. Choose Streamable HTTP (sometimes labeled "HTTP" or "Remote"). Never stdio — that's for local servers running as subprocesses.
  4. Pick the auth, if asked. Choose OAuth. A well-built 2026 server supports dynamic client registration, which means no client IDs, no secrets, no API keys — the client registers itself.
  5. Approve the sign-in. A browser tab opens on the server's consent screen. Sign in, approve, done.
  6. Approve the first tool call. Most clients gate the first actual tool use behind an Allow button. Choose "always allow" if you trust the server, or you'll be clicking it a lot.

That's the whole ceremony. The rest of this guide is where each client hides steps 1–4, and what to do when a client doesn't play by the rules.

The terminology decoder

Vendors could not agree on what to call this. Same feature, six names:

VendorWhat they call a custom MCP serverWhere it lives
Anthropic (Claude)Custom connectorSettings → Connectors
OpenAI (ChatGPT)Custom app (was "custom connector" until Dec 2025)Settings → Apps → developer mode
Google (Gemini)Custom app for SparkSettings → Connected Apps
xAI (Grok)Custom connector / "Bring your own MCP"grok.com/connectors
PerplexityCustom connectorSettings → Connectors
Editors & CLIsMCP servermcp.json / settings, various shapes

And the deeper trap — the transport keyword differs per client config file:

ClientThe magic word
VS Code, Visual Studio, Codex, Droid, Crush"type": "http"
Cline"type": "streamableHttp"
Continue, Junie, Zoo Code"type": "streamable-http"
OpenCode"type": "remote"
Goosetype: streamable_http
Gemini CLI, Qwen Code"httpUrl" (the url key means legacy SSE)
Antigravity, Windsurf"serverUrl" (Antigravity rejects url and httpUrl)
Cursor, Zed, Claude Desktop, Kiro, LM Studio, Warp, JetBrainsplain "url"

If a connection fails instantly and the URL is right, the transport keyword is the next thing to check. Cline is the sharpest edge: omit its type and it silently falls back to legacy SSE, which fails against modern Streamable HTTP servers.

Chat assistants

Claude — every plan, including Free

The most permissive custom-connector policy of any major assistant, fitting for the company that created MCP. Settings → Connectors → Add custom connector → paste URL → authorize. Works on claude.ai web, Claude Desktop, and Cowork; connectors sync to the iOS/Android apps automatically (add on web — mobile can use but not reliably add them). Free accounts get one custom connector; paid plans get more. Claude Code is a separate config: claude mcp add --transport http tempreon <url>, then /mcp to sign in. Full guides: Claude · Claude Code.

ChatGPT — Plus and up, web only, developer mode

OpenAI renamed connectors to "apps" in December 2025 and moved the directory to plugins in July 2026, so ignore any screenshot older than six months. The path: Settings → Apps → Advanced Settings → toggle Developer mode, then Settings → Apps → Create — name, URL, OAuth, click Scan Tools, complete the sign-in, Create. Custom MCP apps require Plus, Pro, Business, Enterprise, or Edu (not Free), and they're web-only. OpenAI documents full MCP — including write actions — for Business, Enterprise, and Edu; on Plus and Pro, treat write tools as limited. Business workspace admins enable custom MCP under Permissions & Roles → Connected Data. Bonus: apps you create work in ChatGPT Atlas browser tabs automatically. Full guide: ChatGPT.

Gemini — yes, actually, via Spark

The answer changed this summer. The Gemini app now accepts custom MCP servers through Gemini Spark: gemini.google.com → Settings & help → Connected Apps → Custom apps for Spark → Add a custom app. Dynamic client registration is supported, so a compliant server needs only its URL. The gate is steep for now — Google AI Ultra subscription, personal account, US, 18+, English. If that's not you, Google Antigravity (the IDE and CLI that replaced Gemini CLI for consumers in June 2026) connects custom MCP servers to Gemini models on a free public preview — config key serverUrl, OAuth automatic. Gemini CLI itself still works for Code Assist Standard/Enterprise licenses and paid API keys, with the httpUrl config key. Full guides: Gemini app · Antigravity · Gemini CLI.

Perplexity — Pro, Max, Enterprise

Settings → Connectors → + Custom connector → Remote, then name, URL, OAuth, Streamable HTTP, acknowledge the risk note, add, click the card to authorize. The quiet superpower: Perplexity runs many models — GPT, Claude, Gemini, Grok, Kimi — so one connector gives every one of them the same tools. Full guide: Perplexity.

Le Chat and Grok

Mistral's Le Chat auto-detects auth — its docs name "OAuth 2.1 with dynamic client registration" explicitly. Connectors → + Add Connector → Custom MCP Connector. One quirk: Le Chat snapshots the tool list at registration, so re-save the connector if the server adds tools later. Grok added "Bring your own MCP" with its connectors launch: grok.com/connectors → New Connector → Custom — web, iOS, and Android, on paid plans. Full guides: Le Chat · Grok.

Editors and IDEs

Cursor is a two-line ~/.cursor/mcp.json entry — plain url, OAuth on first use. VS Code with GitHub Copilot uses .vscode/mcp.json with root key servers (not mcpServers — VS Code's one quirk) and "type": "http"; on Copilot Business/Enterprise seats an admin must enable the MCP policy, which ships disabled. Visual Studio (17.14+) reads .mcp.json with a CodeLens-driven OAuth flow. Windsurf became Devin Desktop in June 2026 — same ~/.codeium/windsurf/mcp_config.json, serverUrl key, OAuth auto-triggers. Zed landed the cleanest implementation of the year: add a URL under context_servers, and it walks the full OAuth + dynamic-registration flow with tokens in your system keychain. JetBrains IDEs (2025.2+) take the standard mcpServers JSON in Settings → AI Assistant → MCP, with an "Import from Claude" button that reads your existing Claude Desktop config. Cline works via its Remote Servers tab — set "type": "streamableHttp" explicitly. Kiro, AWS's IDE, might be the easiest of all: URL-only config, automatic OAuth, one-click install deeplinks, MCP on the free tier.

Full guides: Cursor · VS Code · Windsurf · Zed · JetBrains · Cline · Kiro.

Terminal agents

The command-line generation treats remote MCP + OAuth as table stakes:

  • Claude Code: claude mcp add --transport http tempreon <url>, then /mcp. Guide
  • Codex: codex mcp add tempreon --url <url>, then codex mcp login tempreon. TOML config, shared across CLI, IDE extension, and the ChatGPT desktop app. Guide
  • OpenCode: "type": "remote" in opencode.json; OAuth and dynamic registration are automatic — its docs cite RFC 7591 by name. 75+ model providers behind one interface. Guide
  • Kimi Code CLI: kimi mcp add --transport http, then kimi mcp auth. Guide
  • Qwen Code: httpUrl config plus /mcp auth — automatic discovery and registration. Guide
  • Amp and Droid: both URL-only with automatic OAuth (amp mcp add, droid mcp add --type http). Droid's free open-weights pool (GLM, Kimi, MiniMax) all inherit your MCP servers.
  • Warp: paste the standard JSON under Settings → Agents → MCP servers; local agents only. Guide

The harness rule: how open models get MCP

Here's the fact that unlocks the whole open-model ecosystem: models don't speak MCP — applications do. The model decides when to call a tool; the harness holds the connection, runs the OAuth, and executes the call. Swap the model inside an MCP-capable harness and every custom server keeps working.

That matters right now because the open-weight frontier is on a tear — Moonshot's Kimi K3 (released July 16, 2026, the largest open-weight model announced to date) debuted just behind the top closed models on the major leaderboards, and GLM, DeepSeek, Qwen, and MiniMax all shipped frontier-class opens this year. None of their consumer chat apps accept custom MCP servers. All of their models get them anyway:

  • GLM in Claude Code. Z.ai's coding plan runs an Anthropic-compatible endpoint: point ANTHROPIC_BASE_URL at https://api.z.ai/api/anthropic, set your Z.ai key, and Claude Code's whole MCP stack — including every custom server you've added — works under GLM. Guide
  • Kimi in Claude Code or its own CLI. Moonshot runs the same pattern at https://api.moonshot.ai/anthropic, and its native Kimi Code CLI speaks MCP with browser OAuth directly. Guide
  • DeepSeek, Qwen, MiniMax: all run Anthropic-compatible endpoints too — the "swap the base URL, keep the MCP stack" pattern is now vendor-endorsed across every major Chinese lab. OpenRouter even ships a native Anthropic-protocol endpoint, so one key covers 400+ models inside Claude Code.
  • Fully local models. LM Studio is the standout: a desktop app that runs GGUF/MLX models on your machine and ships a complete MCP client with OAuth and dynamic registration. A local Qwen or Llama with a hosted memory layer is a genuinely private, genuinely capable setup. Ollama's app doesn't speak MCP itself, but Ollama v0.14+ implements the Anthropic API natively — so ANTHROPIC_BASE_URL=http://localhost:11434 puts Claude Code's MCP support in front of any local model. Guides

One honest caveat: tool-calling quality varies across open models, and token-heavy tool lists can overwhelm smaller local ones. Pick models documented as tool-capable, and start with a server that keeps its tool surface tight.

Self-hosted and open-source clients

Open WebUI (native MCP since v0.6.31, Streamable HTTP only, OAuth 2.1 including dynamic registration), LibreChat (DCR is literally the default when you configure no credentials), Goose (Block's agent — extensions are MCP servers, with a one-click deeplink format), Cherry Studio, Msty, Jan, and AnythingLLM. The last two lack OAuth clients, which brings us to the universal escape hatch:

npx -y mcp-remote https://api.tempreon.com/functions/v1/tempreon-mcp/mcp

mcp-remote is a small local proxy that presents as a stdio server to any client, while handling the browser OAuth flow itself. Any client that can run a local command can reach an OAuth-protected remote server through it — it's the bridge for Jan, AnythingLLM, Trae, Crush, Zoo Code, and any older build that predates native OAuth. Full guide: open-source clients.

What doesn't work (and what died this year)

Honesty section — the answers that are genuinely "no" as of July 18, 2026:

  • Microsoft Copilot (consumer): fixed connector list, no custom MCP. The enterprise path exists via Copilot Studio, where the MCP tool wizard's "Dynamic discovery" auth option handles DCR servers cleanly — but that's an admin flow, not a consumer one.
  • GitHub Copilot's cloud coding agent: supports remote MCP servers, but explicitly not OAuth-authenticated ones. Static-header servers only, for now.
  • NotebookLM: no MCP client capability; the "NotebookLM MCP" projects you'll find go the other direction.
  • The open-model consumer apps: kimi.com, chat.z.ai, DeepSeek's app, Meta AI — no custom connector paths. The harness rule is the route.
  • Aider: still no MCP client support; the feature requests remain open.
  • Departed in 2026: Roo Code shut down in May (its community fork Zoo Code carries on), Continue.dev froze after its acquisition by Cursor in June, Gemini CLI retired for consumers in June, and iFlow CLI closed in April. Client landscapes move — check dates on any MCP tutorial you read.

Troubleshooting, cross-client

Five failure modes cover nearly everything:

  1. Instant failure → URL problem. The endpoint path (ours ends in /mcp) is required; no trailing slash.
  2. Connects, then rejects → transport keyword. Check the decoder table above; Cline's silent SSE fallback and Gemini CLI's url-vs-httpUrl split are the classics.
  3. OAuth window never opens → pop-up blocker, no default browser, or a headless environment. CLI clients usually print the auth URL — open it manually.
  4. Worked yesterday, 401 today → expired token. Disconnect and reconnect the server; a few clients (Cline currently) need a delete-and-re-add.
  5. Connected but no tools → restart the session (many clients refresh tool lists only at session start), check plan/policy gating, and in Le Chat's case re-save the connector to refresh its tool snapshot.

Why we built on this

Tempreon exists because the connection problem above is only half the problem. Once every AI app can reach external context, the question becomes what context deserves to travel. Our answer is the part that's you — identity, knowledge, decisions, and the patterns you'd otherwise re-teach every new tool. One Bridge URL, and the same you shows up in Claude, ChatGPT, Cursor, a local model in LM Studio, or whatever ships next month. The model does the thinking. The lessons live on.

If you've read this far, you're exactly who we built it for. Start free — one Bridge is included on every plan, and the universal setup guide covers any client we haven't met yet.

FAQ

What is a custom MCP server? One you add to an AI app yourself, by URL, instead of picking from a built-in directory. Hosted + Streamable HTTP + OAuth means paste-URL, sign in, done.

Which AI apps support custom MCP servers in 2026? Claude (all plans), ChatGPT (Plus+, developer mode), Gemini (Spark, Ultra), Perplexity (Pro+), Le Chat, Grok, Cursor, VS Code, Visual Studio, Windsurf/Devin, Zed, JetBrains, Cline, Kiro, Claude Code, Codex, OpenCode, Qwen Code, Kimi Code, Amp, Droid, Warp, Raycast, LM Studio, Open WebUI, LibreChat, Goose, and more — see the tables above.

Does ChatGPT Free support custom connectors? No — Plus and up, web only, developer mode required.

Does the Gemini app support MCP? Yes, via Spark custom apps — currently Ultra, US, personal accounts. Antigravity is the free route to Gemini models with MCP.

Can GLM, Kimi, or other open models use custom MCP servers? Yes — MCP lives in the harness, not the model. Claude Code with a swapped base URL, OpenCode, or LM Studio all deliver it.

Do I need OAuth? For consumer clients, effectively yes — OAuth 2.1 with dynamic client registration is what makes connections keyless. Clients without OAuth use the mcp-remote proxy.

Why won't my connector connect? Endpoint path, transport keyword, expired token, or plan/policy gating — in that order. The troubleshooting guide goes deeper.