Skip to content

Add a public docs.plus/mcp page so web search finds the MCP connector #458

Description

@HMarzban

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 with LegalPage and LegalSection (apps/webapp/src/components/pages/legal/LegalPage.tsx), as pages/privacy.tsx does. Pass path="/mcp".

  • LegalPage already writes the <Head> block: title, description, robots index, follow, canonical URL and OG tags. Do not copy that block.

  • LegalPage always prints Last updated {LEGAL_UPDATED} (line 52). That is the legal-page date, and it is wrong on /mcp. Add one optional prop, showUpdated, that defaults to true. Only /mcp passes showUpdated={false}, so /privacy and /terms stay 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 shows https://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 as ConnectCard.tsx does (server name docs-plus). Show each command as text in a code element, 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 from ConnectCard.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.md stays 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.ts unchanged to apps/webapp/src/utils/mcpServerUrl.ts. The public page is a second, unrelated consumer, so apps/webapp/CLAUDE.md §Webapp Module Layers puts it in @utils/.
  • Update its two importers: settings/components/ConnectCard.tsx and settings/hooks/useMcpServerStatus.ts. Do not add it to utils/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 /mcp would then load the document stylesheet (apps/webapp/src/pages/_app.tsx:156).
  • RESERVED_SLUGS (apps/webapp/src/utils/reservedSlugs.ts:5) and ROUTE_SLUGS (apps/hocuspocus.server/src/modules/mcp/infra/documentStore.ts:59), as mcp. 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 one Link to /mcp with the text AI apps. Put it after Terms, in the nav at line 44, styled like Privacy and Terms.
  • That nav has aria-label="Legal". Change it to aria-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 /privacy and /terms. Add /mcp there: it uses LegalPage, is a utility route, and is in INDEXABLE_PATHS.

Out of scope

Acceptance criteria

  • Locally, /mcp returns 200. Its HTML holds <meta name="robots" content="index, follow"> and the server URL.
  • Locally, /sitemap.xml lists /mcp.
  • The page shows the server URL from mcpServerUrl() and one line per app. It shows no "Last updated" line.
  • /privacy and /terms still 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_document with the title "MCP" creates the slug mcp-document (documentStore.ts:76).
  • In light and dark, the page uses only LegalPage / LegalSection styling and existing tokens.
  • At 375px wide, the page does not scroll sideways. A long command scrolls inside its own code box, as CopyLine does (ConnectCard.tsx:43).
  • The home footer shows AI apps, and that nav is labelled Site.

Verify

  1. Run bun run --filter @docs.plus/webapp typecheck and bun run --filter @docs.plus/hocuspocus typecheck.
  2. Run the webapp locally. Open /mcp in light, in dark, and at 375px wide. View the page source: it holds the server URL and robots index, follow.
  3. Open /sitemap.xml: it lists /mcp.
  4. On the home page, check the footer link. Type "MCP" as a document name and open it: the slug is random.
  5. From a connected app on the local server, call create_document with the title "MCP": the slug is mcp-document.

After it ships (does not block close)

  • https://docs.plus/mcp is live and listed in https://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

  1. A document with the slug mcp may already exist in production. The new route would hide it. Recommended: if it exists, ship the page at /connect instead. The file is then pages/connect.tsx, and every list, path and link above uses connect. Leave the document alone, because moving it breaks links already shared. Owed before merge: the maintainer checks both slugs, mcp and connect, in production. Publish docs.plus to the official MCP Registry #459 uses the route this decision picks.

No activity

Activity on this issue will appear here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationenhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions