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:
@@ -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',
|
||||
});
|
||||
}
|
||||
200
apps/web/app/(marketing)/guides/chatgpt-mcp-connector/page.tsx
Normal file
200
apps/web/app/(marketing)/guides/chatgpt-mcp-connector/page.tsx
Normal 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 & 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>
|
||||
</>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user