diff --git a/packages/landing/src/docs/components/doc-nav.tsx b/packages/landing/src/docs/components/doc-nav.tsx index aa9d144..463d8df 100644 --- a/packages/landing/src/docs/components/doc-nav.tsx +++ b/packages/landing/src/docs/components/doc-nav.tsx @@ -23,6 +23,7 @@ import { docsNav } from '../nav'; const ICONS: Record = { Overview: BookOpen, 'MCP server': Plug, + 'Any client': Plug, 'Claude Code': Terminal, Claude: MessageSquare, 'VS Code': Code, diff --git a/packages/landing/src/docs/content/connect.ts b/packages/landing/src/docs/content/connect.ts new file mode 100644 index 0000000..51ccea3 --- /dev/null +++ b/packages/landing/src/docs/content/connect.ts @@ -0,0 +1,105 @@ +import type { DocPage } from '../types'; +import { MCP_ENDPOINT_URL as ENDPOINT } from '@/lib/mcp-docs'; +import { clientLinksMd } from './clients'; + +// Generic "connect any MCP client / agent" guide - vendor-neutral, for clients +// without a dedicated page. Endpoint + auth facts come from lib/mcp-docs. +export const connectDoc: DocPage = { + slug: 'connect', + title: 'Connect any MCP client', + lede: 'A vendor-neutral guide to wiring any MCP-capable agent to Agentage Memory. The same endpoint and OAuth flow work everywhere - no API key.', + sections: [ + { + id: 'basics', + title: 'What you need', + blocks: [ + { + type: 'p', + md: 'Any client that speaks the **Model Context Protocol** over **Streamable HTTP** can connect. Three facts are all it takes:', + }, + { + type: 'p', + md: '- **Endpoint** - `https://memory.agentage.io/mcp`\n- **Transport** - Streamable HTTP\n- **Auth** - OAuth 2.1 (PKCE + dynamic client registration); sign in once in the browser, no API key.', + }, + ], + }, + { + id: 'steps', + title: 'Connect in four steps', + blocks: [ + { + type: 'steps', + steps: [ + { + title: 'Add an HTTP MCP server', + body: 'In your client, add a new MCP server of type **http** pointing at the endpoint:', + code: ENDPOINT, + language: 'text', + }, + { + title: 'Let it register', + body: 'On first connect the client runs **Dynamic Client Registration** automatically - nothing to pre-create or paste.', + }, + { + title: 'Sign in', + body: 'The client opens a browser to **auth.agentage.io**. Approve access (magic-link, or GitHub / Google / Microsoft). No token ever touches the client config.', + }, + { + title: 'Verify', + body: 'Ask the agent to write a note and read it back (`memory__write` then `memory__read`). The same account in every client shares one memory.', + }, + ], + }, + ], + }, + { + id: 'config', + title: 'Generic config', + blocks: [ + { + type: 'p', + md: 'Most clients accept a JSON MCP config. The shape is the same everywhere - only the top-level key differs (`mcpServers` for most clients, `servers` for VS Code):', + }, + { + type: 'code', + language: 'json', + code: `{ + "mcpServers": { + "agentage-memory": { + "type": "http", + "url": "${ENDPOINT}" + } + } +}`, + }, + { + type: 'callout', + variant: 'info', + title: 'No API key field', + md: 'There is no key or token to set. Auth is interactive OAuth on first use; the client obtains and stores its own short-lived token.', + }, + ], + }, + { + id: 'known-clients', + title: 'One-click for known clients', + blocks: [ + { + type: 'p', + md: `Using one of these? The dedicated page has a one-click install plus the exact config:\n\n${clientLinksMd}`, + }, + ], + }, + { + id: 'tools', + title: 'Tools & limits', + blocks: [ + { + type: 'callout', + variant: 'info', + md: 'Once connected, every agent gets the same six `memory__*` tools (search / read / list / write / edit / delete). See the [MCP server](/docs/mcp-server) page for the full tool reference and limitations.', + }, + ], + }, + ], +}; diff --git a/packages/landing/src/docs/nav.ts b/packages/landing/src/docs/nav.ts index e37494b..daf30c6 100644 --- a/packages/landing/src/docs/nav.ts +++ b/packages/landing/src/docs/nav.ts @@ -12,9 +12,9 @@ export const docsNav: DocNavGroup[] = [ ], }, { - // One item per client - connect them one by one. + // Generic guide first, then one item per client. title: 'Connect your client', - items: clientNavItems, + items: [{ label: 'Any client', slug: 'connect' }, ...clientNavItems], }, { title: 'Reference', diff --git a/packages/landing/src/docs/registry.ts b/packages/landing/src/docs/registry.ts index dbed26d..d3ba0b5 100644 --- a/packages/landing/src/docs/registry.ts +++ b/packages/landing/src/docs/registry.ts @@ -1,11 +1,12 @@ import type { DocPage } from './types'; import { overviewDoc } from './content/overview'; import { mcpServerDoc } from './content/mcp-server'; +import { connectDoc } from './content/connect'; import { clientDocs } from './content/clients'; // Every doc page, keyed by slug. Add a page = import it + add it here; the route -// and sidebar pick it up automatically. -const PAGES: DocPage[] = [overviewDoc, mcpServerDoc, ...clientDocs]; +// and sitemap pick it up automatically (nav is wired in nav.ts). +const PAGES: DocPage[] = [overviewDoc, mcpServerDoc, connectDoc, ...clientDocs]; const BY_SLUG = new Map(PAGES.map((p) => [p.slug, p]));