Repository navigation
Add a public docs.plus/mcp page so web search finds the MCP connector #458
Description
Summary
An AI agent that searches the web for "connect docs.plus to Claude" does not find the MCP connector. The setup guide lives only on GitHub (docs/mcp/README.md). The homepage never mentions MCP. The sitemap lists only /, /privacy and /terms. This issue adds one public, indexable page.
Baseline: on 2026-10-07, a web search for "docs.plus MCP server URL connect Claude" did not return docs.plus. That is one search backend, so it is a baseline, not proof. Outside the Claude directory, Claude finds a connector only through web search (Anthropic).
Parent: #230. Sibling: #459, which links to this page. The directory listings stay in #388 (OpenAI) and #389 (Claude).
What to build
The page
-
A static Pages route,
apps/webapp/src/pages/mcp.tsx, inside the locked design system. Render it withLegalPageandLegalSection(apps/webapp/src/components/pages/legal/LegalPage.tsx), aspages/privacy.tsxdoes. Passpath="/mcp". -
LegalPagealready writes the<Head>block: title, description,robots index, follow, canonical URL and OG tags. Do not copy that block. -
LegalPagealways printsLast updated {LEGAL_UPDATED}(line 52). That is the legal-page date, and it is wrong on/mcp. Add one optional prop,showUpdated, that defaults totrue. Only/mcppassesshowUpdated={false}, so/privacyand/termsstay unchanged. Add no new tokens. -
Content:
title(the H1 and the<title>): "Use docs.plus from Claude, ChatGPT and other AI apps".description: "Connect docs.plus to Claude, ChatGPT, Claude Code, Codex, Cursor or VS Code with one MCP server URL."- The server URL as plain text, from
mcpServerUrl(). Production showshttps://prodback.docs.plus/api/mcp. A self-hosted build shows its own. - One plain-text line per app: Claude, ChatGPT, Claude Code, Codex, Cursor and VS Code. The Claude, ChatGPT, Cursor and VS Code lines say where to paste the server URL. Take the wording from Settings › Connected apps (
apps/webapp/src/components/settings/components/ConnectCard.tsx). - The Claude Code and Codex lines show the add command. Build it from
mcpServerUrl()and spell it asConnectCard.tsxdoes (server namedocs-plus). Show each command as text in acodeelement, not as a button. - No app deep links. The Claude link is undocumented (see the comment in
ConnectCard.tsx). A second copy of the Cursor and VS Code encoders would drift. Export nothing fromConnectCard.tsx. - A link to the full guide, from
MCP_GUIDE_URL(apps/webapp/src/components/settings/constants.ts:54). Do not write a second guide URL.
docs/mcp/README.mdstays the one full guide. The page carries only the URL and one-liners.
The server URL helper
- Move
apps/webapp/src/components/settings/utils/mcpServerUrl.tsunchanged toapps/webapp/src/utils/mcpServerUrl.ts. The public page is a second, unrelated consumer, soapps/webapp/CLAUDE.md§Webapp Module Layers puts it in@utils/. - Update its two importers:
settings/components/ConnectCard.tsxandsettings/hooks/useMcpServerStatus.ts. Do not add it toutils/index.ts.
Route lists
Add /mcp to these lists:
INDEXABLE_PATHS(apps/webapp/src/components/pages/home/homeMetadata.ts:25), so the page enters the sitemap.UTILITY_PATHS(apps/webapp/src/utils/routePolicy.ts:10). Without it,isDocumentAsPath('/mcp')is true. A client navigation to/mcpwould then load the document stylesheet (apps/webapp/src/pages/_app.tsx:156).RESERVED_SLUGS(apps/webapp/src/utils/reservedSlugs.ts:5) andROUTE_SLUGS(apps/hocuspocus.server/src/modules/mcp/infra/documentStore.ts:59), asmcp. Then no new document can take that slug.
No src/proxy.ts change is needed. Its matcher treats /mcp the same as /privacy.
Footer and area notes
- In
apps/webapp/src/components/pages/home/HomeFooter.tsx, add oneLinkto/mcpwith the textAI apps. Put it after Terms, in thenavat line 44, styled like Privacy and Terms. - That
navhasaria-label="Legal". Change it toaria-label="Site", because the new link is not legal. - In
apps/webapp/CLAUDE.md§Landing Page Shell And PWA, the line on public legal pages names/privacyand/terms. Add/mcpthere: it usesLegalPage, is a utility route, and is inINDEXABLE_PATHS.
Out of scope
- Directory listings: [Tracking] ChatGPT plugin: list docs.plus in the OpenAI Plugin Directory #388 (OpenAI) and [Tracking] Claude directory: list docs.plus as a connector and a plugin #389 (Claude). The MCP Registry entry: Publish docs.plus to the official MCP Registry #459.
/.well-known/mcp: SEP-1649 closed on 2026-01-26.- MCP Server Cards and
/.well-known/ai-catalog.json: SEP-2127 is Final since 2026-10-06, but no shipping client reads them yet. llms.txt: rejected on 2026-09-22.<link rel>hints: no spec defines one.- A homepage section instead of a page. One URL is easier for search to rank, and the landing bundle stays small.
- Changes to
docs/mcp/README.md.
Acceptance criteria
- Locally,
/mcpreturns 200. Its HTML holds<meta name="robots" content="index, follow">and the server URL. - Locally,
/sitemap.xmllists/mcp. - The page shows the server URL from
mcpServerUrl()and one line per app. It shows no "Last updated" line. -
/privacyand/termsstill show their "Last updated" line. - On the home page, opening a document named "MCP" goes to a random slug, not
/mcp(apps/webapp/src/utils/sanitizeDocumentSlug.ts:26). -
create_documentwith the title "MCP" creates the slugmcp-document(documentStore.ts:76). - In light and dark, the page uses only
LegalPage/LegalSectionstyling and existing tokens. - At 375px wide, the page does not scroll sideways. A long command scrolls inside its own
codebox, asCopyLinedoes (ConnectCard.tsx:43). - The home footer shows
AI apps, and thatnavis labelledSite.
Verify
- Run
bun run --filter @docs.plus/webapp typecheckandbun run --filter @docs.plus/hocuspocus typecheck. - Run the webapp locally. Open
/mcpin light, in dark, and at 375px wide. View the page source: it holds the server URL androbots index, follow. - Open
/sitemap.xml: it lists/mcp. - On the home page, check the footer link. Type "MCP" as a document name and open it: the slug is random.
- From a connected app on the local server, call
create_documentwith the title "MCP": the slug ismcp-document.
After it ships (does not block close)
https://docs.plus/mcpis live and listed inhttps://docs.plus/sitemap.xml.- Discovery check, 2 to 4 weeks after launch. In fresh sessions with web search on and no docs.plus connector, ask "How do I connect docs.plus to Claude? What is its MCP server URL?" in claude.ai, ChatGPT search and Claude Code. It passes when the answer contains the server URL with no hints. Post the results as a comment, next to the 2026-10-07 baseline.
Open decision
- A document with the slug
mcpmay already exist in production. The new route would hide it. Recommended: if it exists, ship the page at/connectinstead. The file is thenpages/connect.tsx, and every list, path and link above usesconnect. Leave the document alone, because moving it breaks links already shared. Owed before merge: the maintainer checks both slugs,mcpandconnect, in production. Publish docs.plus to the official MCP Registry #459 uses the route this decision picks.
Activity
HMarzban commentedon Oct 7, 2026
Maintainer ruling update, 2026-10-07
Open decision 1 is settled. A read-only production check on 2026-10-07 found no document with the slug
mcp(and none withconnect). Ship the page at/mcp, as planned. The/connectfallback is not needed.