feat(content): 11 new SEO/GEO guide articles with per-article OG images

How-to cluster: create-mcp-server-without-code, claude-desktop-mcp-setup,
chatgpt-mcp-connector (incl. honest Business/Enterprise write-connector plan
limits), rest-api-to-mcp-server.
Comparison cluster: mcp-server-hosting-pricing (5-platform matrix),
composio-alternative, smithery-alternative — house style: explicitly state
where competitors win.
Technical/GEO cluster: mcp-transports-explained (SSE deprecation 2025-03-26),
mcp-oauth-plain-english, mcp-server-security-checklist, and German DACH
article mcp-server-ohne-code-erstellen (articleJsonLd gained optional
inLanguage param).

Every article: pageMetadata canonical, Article JSON-LD with Person author +
image + wordCount, BreadcrumbList, FAQPage where applicable, 1200x630 OG
image via shared helper, internal linking. Registry entries in lib/articles.ts
feed guides index, sitemap and RSS automatically. Product claims sourced only
from lib/seo.ts truth — no invented customers, SLAs or certifications.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SXUwmPVRTD8AKQtio6gCN5
This commit is contained in:
Marco Sadjadi
2026-07-08 23:04:19 +02:00
parent 089074d104
commit a08f5f05b1
24 changed files with 2431 additions and 1 deletions

View File

@@ -0,0 +1,13 @@
import { articleOgImage, OG_SIZE } from '@/lib/og-article';
export const runtime = 'edge';
export const alt = 'Add a custom MCP connector to ChatGPT (2026 guide)';
export const size = OG_SIZE;
export const contentType = 'image/png';
export default function Image() {
return articleOgImage({
title: 'Add a custom MCP connector to ChatGPT (2026 guide)',
tag: 'Setup',
});
}

View File

@@ -0,0 +1,200 @@
import { JsonLd } from '@/components/json-ld';
import { articleJsonLd, breadcrumbJsonLd, pageMetadata } from '@/lib/seo';
import Link from 'next/link';
import { ArticleShell, H2, Note, OL, P, Strong, Table, UL } from '../article-shell';
const PATH = '/guides/chatgpt-mcp-connector';
const TITLE = 'Add a custom MCP connector to ChatGPT (2026 guide)';
const DESCRIPTION =
'How to connect a custom MCP server to ChatGPT: setup flow, the HTTPS and OAuth requirements, and the plan limits nobody mentions — write-capable connectors need a Business, Enterprise or Edu workspace.';
export const metadata = pageMetadata({ title: TITLE, description: DESCRIPTION, path: PATH });
export default function Page() {
return (
<>
<JsonLd
data={articleJsonLd({
title: TITLE,
description: DESCRIPTION,
path: PATH,
datePublished: '2026-07-08',
authorName: 'Marco Sadjadi',
wordCount: 1300,
})}
/>
<JsonLd
data={breadcrumbJsonLd([
{ name: 'Home', path: '/' },
{ name: 'Guides', path: '/guides' },
{ name: TITLE, path: PATH },
])}
/>
<ArticleShell
title={TITLE}
subtitle="ChatGPT has supported custom MCP connectors since September 2025 — but what you can actually do with one depends on your plan, and the requirements for the server side are stricter than Claude's. Here is the full picture before you build."
updated="July 2026"
>
<H2>The plan limits, first because they decide everything</H2>
<P>
Before writing a single prompt or line of code, check what your ChatGPT plan allows.
OpenAI gates custom MCP connectors by workspace type:
</P>
<Table>
<thead>
<tr>
<th>Plan</th>
<th>Custom MCP connectors</th>
<th>Practical meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td>Free</td>
<td>No custom connectors</td>
<td>Only built-in connectors.</td>
</tr>
<tr>
<td>Plus / Pro (individual)</td>
<td>Read/fetch-only, via Developer Mode</td>
<td>
Your server's search and read tools work; tools that create, update or delete will
not be usable.
</td>
</tr>
<tr>
<td>Business / Enterprise / Edu</td>
<td>Full connectors, including write-capable tools</td>
<td>The complete MCP tool surface is available.</td>
</tr>
</tbody>
</Table>
<Note>
This is the most common “my connector is broken” report that is not a bug: a Plus user
adds a server with a <Strong>create_issue</Strong> tool and the tool never fires.
Read-only tools on the same server work fine. If write actions matter for your use case,
you need a Business/Enterprise/Edu workspace — or a client without this restriction, like
Claude Desktop (
<Link href="/guides/claude-desktop-mcp-setup" className="text-[--color-accent] hover:underline">
setup guide
</Link>
).
</Note>
<H2>What ChatGPT requires from the server</H2>
<UL>
<li>
<Strong>A public HTTPS URL.</Strong> Remote MCP server URLs must use HTTPS — no local
STDIO servers, no plain HTTP, no localhost tunnels for anything durable.
</li>
<li>
<Strong>Streamable HTTP transport.</Strong> The current MCP remote transport; legacy
HTTP+SSE-only servers are on borrowed time across all clients.
</li>
<li>
<Strong>OAuth for user-scoped auth.</Strong> ChatGPT walks the standard MCP OAuth flow.
One sharp edge: if the authorization server issues tokens without{' '}
<Strong>offline_access</Strong>-style refresh, ChatGPT can lose access when the token
expires and users must reauthenticate.
</li>
</UL>
<P>
If you generate and host your server on{' '}
<Link href="/" className="text-[--color-accent] hover:underline">
BuildMyMCPServer
</Link>
, all three are the default: every server deploys to a public HTTPS endpoint speaking
Streamable HTTP, behind an OAuth 2.1 authorization server with PKCE and Dynamic Client
Registration. There is nothing extra to configure for ChatGPT specifically.
</P>
<H2>Setup, step by step</H2>
<OL>
<li>
Get your server URL — from your own deployment, from{' '}
<Link href="/guides/create-mcp-server-without-code" className="text-[--color-accent] hover:underline">
a prompt-generated server
</Link>
, or by forking a{' '}
<Link href="/templates" className="text-[--color-accent] hover:underline">
template
</Link>
.
</li>
<li>
In ChatGPT: <Strong>Settings → Apps &amp; Connectors</Strong>. On individual plans,
enable <Strong>Developer Mode</Strong> under advanced settings first — the “create
connector” option is hidden without it.
</li>
<li>Add a new connector: name it, paste the MCP endpoint URL, select OAuth as the auth method.</li>
<li>
ChatGPT registers itself with the authorization server and opens the consent screen.
Approve; the connector shows as connected.
</li>
<li>
In a conversation, enable the connector (via the tools/plus menu) and ask for something
only your tool can answer. Name the tool explicitly on the first test.
</li>
</OL>
<H2>Verifying it actually works</H2>
<P>
ChatGPT is more eager than Claude to answer from its own knowledge instead of calling a
tool. To force a real call, ask for data the model cannot know — a record you created
today, a value behind your API. Then check the server's dashboard: a live tool-call log
with latency and status per call is the ground truth for whether the connector fired.
</P>
<H2>Common failure modes</H2>
<Table>
<thead>
<tr>
<th>Symptom</th>
<th>Cause</th>
<th>Fix</th>
</tr>
</thead>
<tbody>
<tr>
<td>Create connector option missing</td>
<td>Developer Mode off, or Free plan</td>
<td>Enable Developer Mode (Plus/Pro) or upgrade the workspace.</td>
</tr>
<tr>
<td>Write tools never execute</td>
<td>Individual plan read/fetch-only restriction</td>
<td>Business/Enterprise/Edu workspace, or use a write-capable client.</td>
</tr>
<tr>
<td>Connector disconnects after hours/days</td>
<td>No refresh token (offline_access missing)</td>
<td>Reconnect; if you control the AS, enable refresh token issuance.</td>
</tr>
<tr>
<td>Unable to reach server</td>
<td>URL is not public HTTPS, or wrong endpoint path</td>
<td>Use the full https://…/mcp endpoint; no localhost, no http.</td>
</tr>
</tbody>
</Table>
<H2>Is ChatGPT the right first client?</H2>
<P>
If your tools are read-only search, lookup, reporting ChatGPT works well on any paid
plan and the setup above takes minutes. If your tools write data, start with Claude
Desktop or Cursor where the full tool surface works on individual plans, and add ChatGPT
when a team workspace exists. The server is the same either way; only the client config
differs. Compare hosting options in{' '}
<Link href="/guides/hosted-mcp-platforms-compared" className="text-[--color-accent] hover:underline">
our platform comparison
</Link>
, or check{' '}
<Link href="/pricing" className="text-[--color-accent] hover:underline">
pricing
</Link>{' '}
the free tier is enough to test a connector end to end.
</P>
</ArticleShell>
</>
);
}