Any client that supports remote MCP servers connects the same way:
1
Add the endpoint
Add https://api.onelamp.ai/mcp to your client as a remote (HTTP /
streamable) MCP server.
2
Authorize once
The client opens OneLamp in your browser to sign in and authorize. OneLamp is
its own OAuth 2.1 provider with Dynamic Client Registration, so there’s no
API key and no client_id to paste — the client registers itself. See
MCP & OAuth for the full flow.
3
Use the tools
The memory tools — save_context / get_context / list_context /
resume_session / forget_context (plus save_session) — appear. That’s it
— your context is now portable across every client you connect.
That universal path is all most clients need. The tabs below add the
client-specific bits — a packaged plugin, lifecycle hooks, one-click installs —
for the few clients that offer more than “paste the URL.”
These are the AI tools you connect to OneLamp — the assistants, IDEs, and
agents that read and write your context. OneLamp works with any client that
speaks remote MCP, so this isn’t a gate; it’s the tools people most commonly
connect. The clients with a tab below (Claude Code, Codex,
Cursor, VS Code, ChatGPT, Grok) get extra automation — everything else uses the
universal setup above.
Category
Tools
Assistants & chat
Claude · ChatGPT · Gemini · Grok · Perplexity · Microsoft Copilot · Mistral (Le Chat) · DeepSeek · Qwen · Kimi
Don’t see your tool? If it supports remote (HTTP / streamable) MCP servers, it
already works — follow the universal setup. The named
tools above just have the most usage or first-class automation.
Distinct from the AI tools above, data sources connect the other direction:
OneLamp acts as a client connecting out to 195 remote MCP servers so it can
pull their documents into your Library on demand (see
Data sources). A few of them:
Browse and connect the full catalog from your
Data sources page in the app. Any remote
MCP server works, so you can also connect one that isn’t listed by URL.
The most complete client. Instead of a raw MCP config, OneLamp ships a
plugin that bundles the server and session hooks, so context loads and
saves automatically — no manual tool calls.
Run these in Claude Code itself (terminal or IDE extension) — /plugin isn’t
available in the Claude desktop app’s chat.On first use, Claude Code runs the OAuth flow. Then import this project’s
existing rules once:
/onelamp # or the shorter alias: /ol
What the plugin adds beyond the endpoint:
SessionStart hook — Claude calls get_context at the start of every
session, so it begins with your relevant context loaded.
Stop hook — Claude is nudged to save_context durable learnings before
the turn ends (once per stop cycle, loop-safe).
/onelamp command (alias /ol) — manual refresh plus a one-time
import of an existing CLAUDE.md, .cursorrules, or AGENTS.md into OneLamp.
The hooks are fail-open — they never crash or trap Claude Code. This is the
strongest auto-load/auto-save enforcement available in any client today.
Self-hosting? The plugin’s .mcp.json points at api.onelamp.ai/mcp —
replace it with your endpoint (e.g.
https://onelamp-api.<account>.workers.dev/mcp). As a fallback you can
install straight from the repo: /plugin marketplace add onelampai/onelamp.
At parity with the Claude Code plugin. Codex
speaks remote (streamable-HTTP) MCP natively and runs the OAuth flow itself, so
there’s no mcp-remote bridge and no npx — the server is just a url. It also
fires SessionStart/Stop lifecycle hooks, so context loads and saves
automatically.Run the idempotent installer (safe to re-run):
It does three things in ~/.codex: installs the hook scripts, registers the
MCP server + hooks in ~/.codex/config.toml, and appends usage guidance to
~/.codex/AGENTS.md as a backstop. To set it up by hand instead, add this
block to ~/.codex/config.toml:
SessionStart hook — Codex calls get_context at the start of every
session, so it begins with your relevant context loaded.
Stop hook — Codex is nudged to save_context durable learnings before
the turn ends (once per stop cycle, loop-safe).
Both hooks are fail-open — any error exits 0 and never blocks Codex. The
~/.codex/AGENTS.md guidance stays as a backstop for the window before you
trust the hooks.
Cursor is at parity with Claude Code and Codex: it speaks remote MCP and
supports lifecycle hooks, so context loads and
saves automatically. One idempotent command (safe to re-run) wires both:
It registers the MCP server in ~/.cursor/mcp.json and wires
sessionStart / stop hooks in ~/.cursor/hooks.json:
sessionStart hook — returns additional_context so Cursor calls
get_context at the start of every conversation.
stop hook — returns a followup_message nudging save_context for
durable learnings (once per conversation, loop-safe).
Both hooks are fail-open — any error exits 0 and never blocks Cursor. The
installer also drops a ~/.cursor/onelamp/onelamp.mdc rule as a backstop for
the window before the hooks are trusted.Want the MCP server only (no hooks)? Add it by hand to .cursor/mcp.json:
The fastest path is the one-click add button on your OneLamp
Connect home — it opens VS Code with your endpoint
preloaded. Or add it manually to mcp.json:
VS Code doesn’t expose session hooks for MCP, so saving is best-effort. Add a
rule (.github/copilot-instructions.md) telling the tool to call
get_context at the start of a task and save_context when it learns
something durable.
ChatGPT speaks remote MCP and connects to the same endpoint as every other
client. It’s added as a custom connector in Developer Mode rather than via
a config file, and — uniquely among the first-class clients — it has no
lifecycle hooks, so capture is best-effort via custom instructions.
1
Enable Developer Mode
ChatGPT → Settings → Connectors → enable Developer Mode (under
Advanced). It’s currently on Plus, Pro, and Business plans — OpenAI
moves this, so verify the current gating in settings.
2
Add the custom connector
Choose Add a custom connector and enter the OneLamp MCP URL:
https://api.onelamp.ai/mcp
3
Authorize once
ChatGPT opens OneLamp in your browser to sign in and consent. OneLamp is
its own OAuth 2.1 provider with Dynamic Client Registration — no API key
and no client_id to paste; ChatGPT registers itself.
Capture backstop. ChatGPT can’t run code on a session boundary, so paste
the OneLamp custom-instructions block into ChatGPT → Settings →
Personalization → Custom instructions (or a Project’s instructions). It tells
ChatGPT to call get_context at the start of a task with a personal angle,
save_context proactively on durable facts, and save_session when a
conversation wraps up — all stamped source_surface: "chatgpt":
I use OneLamp (connected via MCP) as my shared context across every AI tool.Always pass source_surface: "chatgpt".- At the START of any task with a personal angle, call get_context with a short query about the work. Skip generic factual questions with no personal angle.- Whenever I share a durable decision, preference, fact, or convention, call save_context proactively. Never save secrets.- When I'm picking up earlier work, call resume_session.- When a conversation wraps up, call save_session with a brief digest.
Writes surface ChatGPT’s tool-confirmation modal before they run — that’s
expected; approve them. The full block lives in the
ChatGPT integration.
OpenAI renamed “connectors” → “apps” in December 2025; the settings UI may
say either. A first-class OneLamp app with inline UI (built on the OpenAI
Apps SDK) is in progress — it will install from the ChatGPT app directory and
render the context pack as an interactive card. This page will cross-link it
once it ships.
Grok (xAI) speaks remote MCP and connects to the same endpoint as every
other client, added as a custom connector at
grok.com/connectors. Like ChatGPT it has no
lifecycle hooks, so capture is best-effort via custom instructions.Unlike most clients, Grok’s custom-connector flow doesn’t auto-register
(no Dynamic Client Registration), so after you paste the MCP URL it asks for
OAuth credentials. OneLamp publishes a shared public OAuth client for
Grok — there’s no secret, so the values below are safe to paste as-is. You
still sign in and consent as yourself; PKCE keeps the flow secure.
1
Add the custom connector
Grok → Connectors → New Connector →
Custom. Enter the OneLamp MCP URL:
https://api.onelamp.ai/mcp
2
Fill in the OAuth credentials
Grok shows an OAuth Credentials Required form. Enter:
Field
Value
Client ID
XhCQgWAIkiIfuqZWYcGJzVLTmRopEFfJ
Client Secret
(leave blank)
Authorization Endpoint
https://api.onelamp.ai/auth/oauth2/authorize
Token Endpoint
https://api.onelamp.ai/auth/oauth2/token
Scopes
openid, profile, email, offline_access
Token Auth Method
none (PKCE only)
Then click Save & Connect.
3
Authorize once
Grok opens OneLamp in your browser to sign in and consent. After you
approve, the get_context / save_context tools (and the
Library tools) appear in Grok.
Capture backstop. Grok can’t run code on a session boundary, so add a
OneLamp rule to its custom instructions so every task loads and saves on
its own — stamped source_surface: "grok":
I use OneLamp (connected via MCP) as my shared context across every AI tool.Always pass source_surface: "grok".- At the START of any task with a personal angle, call get_context with a short query about the work. Skip generic factual questions with no personal angle.- Whenever I share a durable decision, preference, fact, or convention, call save_context proactively. Never save secrets.- When I'm picking up earlier work, call resume_session.- When a conversation wraps up, call save_session with a brief digest.
The Client ID above is a public client (PKCE, no secret) — it only
identifies Grok as the app; your data is gated by your own sign-in and
consent. Self-hosting OneLamp? Register your own public client against your
deployment’s /auth/oauth2/register with the redirect URI
https://grok.com/connectors-oauth-exchange-code/ and paste that
client_id instead.
Any client that supports remote MCP servers connects with the
universal setup above — add the endpoint, authorize,
done. Nothing client-specific is required.Without lifecycle hooks, saving is best-effort. Add a system prompt or custom
instruction:
Use the OneLamp MCP tools to keep my context portable:- At the start of a task, call get_context with a short query about the work.- Whenever I share a durable decision, preference, or fact, call save_context.
The connection is identical everywhere; what differs is whether the client can
enforce load/save. Clients with deterministic lifecycle hooks enforce it;
others are nudged or best-effort.
Hookless tools — browser Gemini, Perplexity, ChatGPT, Grok — can’t auto-call
get_context / save_context. The fix is to add a OneLamp rule to the tool’s
system prompt (its always-on instructions), so every task loads and saves on
its own:
Editors / CLIs (Cursor, Copilot, Windsurf, Codex): a rule in the project’s
AGENTS.md, .cursorrules, .github/copilot-instructions.md, or
.windsurfrules.
Browser tools (Gemini, Perplexity, ChatGPT web): the same rule pasted into
the tool’s custom instructions / saved info / personalization.
A different surface: capture browsing context and carry chat sessions between
AI tools. (Coming soon.)
Connect your tools
Pull documents in from Notion, Drive, and Slack — OneLamp as a client of
your MCP servers.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"OneLamp","description":"Shared memory for your AI. What each tool learns about you, every other tool can draw on. Teach one, they all learn.","colors":{"primary":"#df6900","light":"#ff8d28","dark":"#c2541a"},"logo":{"light":"https://mintcdn.com/saholabs/aiDjuj9KTK8tf3oz/logo/light.svg?fit=max\u0026auto=format\u0026n=aiDjuj9KTK8tf3oz\u0026q=85\u0026s=326c498891cea6f68a15417f8e6e8c46","dark":"https://mintcdn.com/saholabs/aiDjuj9KTK8tf3oz/logo/dark.svg?fit=max\u0026auto=format\u0026n=aiDjuj9KTK8tf3oz\u0026q=85\u0026s=39ddd66de306c7a8a3d6793c68187806"},"favicon":"https://mintcdn.com/saholabs/aiDjuj9KTK8tf3oz/favicon.svg?fit=max\u0026auto=format\u0026n=aiDjuj9KTK8tf3oz\u0026q=85\u0026s=dee71769b92ec9853e79b6908d56c976","navbar":{"links":[{"href":"https://app.onelamp.ai","label":"App"}],"primary":{"type":"button","label":"Get started","href":"https://app.onelamp.ai"}},"footer":{"socials":{"github":"https://github.com/onelampai/onelamp","website":"https://onelamp.ai"}},"integrations":{"posthog":{"apiKey":"phc_tag88ra5PcRqjTvjgWfEkKNSVxmfY7LwW4jzPV6EBMda","apiHost":"https://us.i.posthog.com"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"saholabs","hasAudioNarration":false,"actualSubdomain":"saholabs","customDomains":["docs.onelamp.ai"],"gitSource":{"type":"github","owner":"saho-labs","repo":"onelamp","deployBranch":"main","contentDirectory":"apps/docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ae95916f74cc9f20f508970:success","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"Documentation","count":13},{"language":"default","tag":"Concepts","count":7},{"language":"default","tag":"Get started","count":3},{"language":"default","tag":"Changelog","count":2},{"language":"default","tag":"Connect","count":2},{"language":"default","tag":"Tool reference","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"integrations","slug":"/integrations","pageMetadata":{"title":"Connect your tool","description":"One MCP server. Connect any AI tool to share context.","href":"/integrations"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"One MCP server. Connect any AI tool to share context.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,blockquote:`blockquote`,code:`code`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,Heading,Note,Step,Steps,Tab,Table,Tabs,Tip}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`OneLamp is `,_jsx(_components.strong,{children:`one personalized MCP server`}),`. Every tool points at the same URL and gets its curated context.`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`https://api.onelamp.ai/mcp`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`the-universal-setup`,children:`The universal setup`}),`\n`,_jsx(_components.p,{children:`Any client that supports remote MCP servers connects the same way:`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Add the endpoint`,children:_jsxs(_components.p,{children:[`Add `,_jsx(_components.code,{children:`https://api.onelamp.ai/mcp`}),` to your client as a remote (HTTP /\nstreamable) MCP server.`]})}),_jsx(Step,{title:`Authorize once`,children:_jsxs(_components.p,{children:[`The client opens OneLamp in your browser to sign in and authorize. OneLamp is\nits own OAuth 2.1 provider with Dynamic Client Registration, so there’s `,_jsxs(_components.strong,{children:[`no\nAPI key and no `,_jsx(_components.code,{children:`client_id`})]}),` to paste — the client registers itself. See\n`,_jsx(_components.a,{href:`/mcp`,children:`MCP \u0026 OAuth`}),` for the full flow.`]})}),_jsx(Step,{title:`Use the tools`,children:_jsxs(_components.p,{children:[`The memory tools — `,_jsx(_components.code,{children:`save_context`}),` / `,_jsx(_components.code,{children:`get_context`}),` / `,_jsx(_components.code,{children:`list_context`}),` /\n`,_jsx(_components.code,{children:`resume_session`}),` / `,_jsx(_components.code,{children:`forget_context`}),` (plus `,_jsx(_components.code,{children:`save_session`}),`) — appear. That’s it\n— your context is now portable across every client you connect.`]})})]}),`\n`,_jsxs(_components.p,{children:[`That universal path is all most clients need. The tabs below add the\n`,_jsx(_components.strong,{children:`client-specific`}),` bits — a packaged plugin, lifecycle hooks, one-click installs —\nfor the few clients that offer more than “paste the URL.”`]}),`\n`,_jsx(Heading,{level:`2`,id:`supported-ai-tools`,children:`Supported AI tools`}),`\n`,_jsxs(_components.p,{children:[`These are the `,_jsxs(_components.strong,{children:[`AI tools you connect `,_jsx(_components.em,{children:`to`}),` OneLamp`]}),` — the assistants, IDEs, and\nagents that read and write your context. OneLamp works with `,_jsx(_components.strong,{children:`any client that\nspeaks remote MCP`}),`, so this isn’t a gate; it’s the tools people most commonly\nconnect. The clients with a `,_jsx(_components.a,{href:`#client-setup`,children:`tab below`}),` (Claude Code, Codex,\nCursor, VS Code, ChatGPT, Grok) get extra automation — everything else uses the\nuniversal setup above.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Category`}),_jsx(_components.th,{children:`Tools`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Assistants \u0026 chat`})}),_jsx(_components.td,{children:`Claude · ChatGPT · Gemini · Grok · Perplexity · Microsoft Copilot · Mistral (Le Chat) · DeepSeek · Qwen · Kimi`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Coding agents \u0026 IDEs`})}),_jsx(_components.td,{children:`Claude Code · Codex · Cursor · VS Code · GitHub Copilot · Windsurf · Gemini CLI · Cline · Devin · Antigravity · Replit · v0 · Lovable`})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Don’t see your tool? If it supports remote (HTTP / streamable) MCP servers, it\nalready works — follow `,_jsx(_components.a,{href:`#the-universal-setup`,children:`the universal setup`}),`. The named\ntools above just have the most usage or first-class automation.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`data-sources-—-195-mcp-servers`,children:`Data sources — 195 MCP servers`}),`\n`,_jsxs(_components.p,{children:[`Distinct from the AI tools above, `,_jsx(_components.strong,{children:`data sources connect the other direction`}),`:\nOneLamp acts as a client connecting `,_jsx(_components.em,{children:`out`}),` to `,_jsx(_components.strong,{children:`195 remote MCP servers`}),` so it can\npull their documents into your Library on demand (see\n`,_jsx(_components.a,{href:`/concepts/data-sources`,children:`Data sources`}),`). A few of them:`]}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsx(_components.p,{children:`Asana · Atlassian · Airtable · Box · Canva · Cloudflare · Figma · GitHub ·\nHubSpot · Linear · Neon · Notion · Railway · Slack · Stripe · Supabase ·\nYahoo Finance — and ~180 more.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Browse and connect the full catalog from your\n`,_jsx(_components.a,{href:`https://app.onelamp.ai/data-sources`,children:`Data sources`}),` page in the app. Any remote\nMCP server works, so you can also connect one that isn’t listed by URL.`]}),`\n`,_jsx(Heading,{level:`2`,id:`client-setup`,children:`Client setup`}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Claude Code`,id:`claude-code`,children:[_jsxs(_components.p,{children:[`The most complete client. Instead of a raw MCP config, OneLamp ships a\n`,_jsx(_components.strong,{children:`plugin`}),` that bundles the server `,_jsx(_components.em,{children:`and`}),` session hooks, so context loads and\nsaves automatically — no manual tool calls.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`/plugin marketplace add https://app.onelamp.ai/marketplace.json`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`/plugin install onelamp@onelamp`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsxs(_components.p,{children:[`Run these in Claude Code itself (terminal or IDE extension) — `,_jsx(_components.code,{children:`/plugin`}),` isn’t\navailable in the Claude desktop app’s chat.`]}),_jsx(_components.p,{children:`On first use, Claude Code runs the OAuth flow. Then import this project’s\nexisting rules once:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`/onelamp # or the shorter alias: /ol`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`What the plugin adds beyond the endpoint:`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`SessionStart hook`}),` — Claude calls `,_jsx(_components.code,{children:`get_context`}),` at the start of every\nsession, so it begins with your relevant context loaded.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Stop hook`}),` — Claude is nudged to `,_jsx(_components.code,{children:`save_context`}),` durable learnings before\nthe turn ends (once per stop cycle, loop-safe).`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`/onelamp`}),` command`]}),` (alias `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`/ol`})}),`) — manual refresh plus a one-time\nimport of an existing `,_jsx(_components.code,{children:`CLAUDE.md`}),`, `,_jsx(_components.code,{children:`.cursorrules`}),`, or `,_jsx(_components.code,{children:`AGENTS.md`}),` into OneLamp.`]}),`\n`]}),_jsxs(_components.p,{children:[`The hooks are `,_jsx(_components.strong,{children:`fail-open`}),` — they never crash or trap Claude Code. This is the\nstrongest auto-load/auto-save enforcement available in any client today.`]}),_jsx(Tip,{children:_jsxs(_components.p,{children:[`Self-hosting? The plugin’s `,_jsx(_components.code,{children:`.mcp.json`}),` points at `,_jsx(_components.code,{children:`api.onelamp.ai/mcp`}),` —\nreplace it with your endpoint (e.g.\n`,_jsx(_components.code,{children:`https://onelamp-api.\u003caccount>.workers.dev/mcp`}),`). As a fallback you can\ninstall straight from the repo: `,_jsx(_components.code,{children:`/plugin marketplace add onelampai/onelamp`}),`.`]})})]}),_jsxs(Tab,{title:`Codex`,id:`codex`,children:[_jsxs(_components.p,{children:[`At `,_jsx(_components.strong,{children:`parity with the Claude Code plugin`}),`. `,_jsx(_components.a,{href:`https://github.com/openai/codex`,children:`Codex`}),`\nspeaks remote (streamable-HTTP) MCP natively and runs the OAuth flow itself, so\nthere’s no `,_jsx(_components.code,{children:`mcp-remote`}),` bridge and no npx — the server is just a `,_jsx(_components.code,{children:`url`}),`. It also\nfires `,_jsx(_components.strong,{children:`SessionStart/Stop lifecycle hooks`}),`, so context loads and saves\nautomatically.`]}),_jsx(_components.p,{children:`Run the idempotent installer (safe to re-run):`}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -fsSL`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://app.onelamp.ai/codex/install.sh`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` bash`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`It does three things in `,_jsx(_components.code,{children:`~/.codex`}),`: installs the hook scripts, registers the\nMCP server + hooks in `,_jsx(_components.code,{children:`~/.codex/config.toml`}),`, and appends usage guidance to\n`,_jsx(_components.code,{children:`~/.codex/AGENTS.md`}),` as a backstop. To set it up by hand instead, add this\nblock to `,_jsx(_components.code,{children:`~/.codex/config.toml`}),`:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`toml`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`toml`,children:_jsxs(_components.code,{language:`toml`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`mcp_servers`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#D4D4D4`},children:`onelamp`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`url`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://api.onelamp.ai/mcp\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`startup_timeout_sec`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` = `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`60`})]}),`\n`]})})}),_jsx(_components.p,{children:_jsx(_components.strong,{children:`What the install adds beyond the endpoint:`})}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`SessionStart hook`}),` — Codex calls `,_jsx(_components.code,{children:`get_context`}),` at the start of every\nsession, so it begins with your relevant context loaded.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Stop hook`}),` — Codex is nudged to `,_jsx(_components.code,{children:`save_context`}),` durable learnings before\nthe turn ends (once per stop cycle, loop-safe).`]}),`\n`]}),_jsxs(_components.p,{children:[`Both hooks are `,_jsx(_components.strong,{children:`fail-open`}),` — any error exits 0 and never blocks Codex. The\n`,_jsx(_components.code,{children:`~/.codex/AGENTS.md`}),` guidance stays as a backstop for the window before you\ntrust the hooks.`]})]}),_jsxs(Tab,{title:`Cursor`,id:`cursor`,children:[_jsxs(_components.p,{children:[`Cursor is at `,_jsx(_components.strong,{children:`parity with Claude Code and Codex`}),`: it speaks remote MCP and\nsupports `,_jsx(_components.a,{href:`https://cursor.com/docs/hooks`,children:`lifecycle hooks`}),`, so context loads and\nsaves automatically. One idempotent command (safe to re-run) wires both:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -fsSL`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://app.onelamp.ai/cursor/install.sh`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` bash`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`It registers the MCP server in `,_jsx(_components.code,{children:`~/.cursor/mcp.json`}),` and wires\n`,_jsx(_components.code,{children:`sessionStart`}),` / `,_jsx(_components.code,{children:`stop`}),` hooks in `,_jsx(_components.code,{children:`~/.cursor/hooks.json`}),`:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`sessionStart hook`}),` — returns `,_jsx(_components.code,{children:`additional_context`}),` so Cursor calls\n`,_jsx(_components.code,{children:`get_context`}),` at the start of every conversation.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`stop hook`}),` — returns a `,_jsx(_components.code,{children:`followup_message`}),` nudging `,_jsx(_components.code,{children:`save_context`}),` for\ndurable learnings (once per conversation, loop-safe).`]}),`\n`]}),_jsxs(_components.p,{children:[`Both hooks are `,_jsx(_components.strong,{children:`fail-open`}),` — any error exits 0 and never blocks Cursor. The\ninstaller also drops a `,_jsx(_components.code,{children:`~/.cursor/onelamp/onelamp.mdc`}),` rule as a backstop for\nthe window before the hooks are trusted.`]}),_jsxs(_components.p,{children:[`Want the MCP server only (no hooks)? Add it by hand to `,_jsx(_components.code,{children:`.cursor/mcp.json`}),`:`]}),_jsx(CodeBlock,{filename:`Cursor (.cursor/mcp.json)`,numberOfLines:`7`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"mcpServers\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"onelamp\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://api.onelamp.ai/mcp\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]}),_jsxs(Tab,{title:`VS Code`,id:`vs-code`,children:[_jsxs(_components.p,{children:[`The fastest path is the `,_jsx(_components.strong,{children:`one-click add`}),` button on your OneLamp\n`,_jsx(_components.a,{href:`https://app.onelamp.ai`,children:`Connect home`}),` — it opens VS Code with your endpoint\npreloaded. Or add it manually to `,_jsx(_components.code,{children:`mcp.json`}),`:`]}),_jsx(CodeBlock,{filename:`VS Code (mcp.json)`,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"servers\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"onelamp\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"http\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://api.onelamp.ai/mcp\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsxs(_components.p,{children:[`VS Code doesn’t expose session hooks for MCP, so saving is best-effort. Add a\nrule (`,_jsx(_components.code,{children:`.github/copilot-instructions.md`}),`) telling the tool to call\n`,_jsx(_components.code,{children:`get_context`}),` at the start of a task and `,_jsx(_components.code,{children:`save_context`}),` when it learns\nsomething durable.`]})]}),_jsxs(Tab,{title:`ChatGPT`,id:`chatgpt`,children:[_jsxs(_components.p,{children:[`ChatGPT speaks remote MCP and connects to the `,_jsx(_components.strong,{children:`same endpoint`}),` as every other\nclient. It’s added as a `,_jsx(_components.strong,{children:`custom connector in Developer Mode`}),` rather than via\na config file, and — uniquely among the first-class clients — it has `,_jsx(_components.strong,{children:`no\nlifecycle hooks`}),`, so capture is best-effort via custom instructions.`]}),_jsxs(Steps,{children:[_jsx(Step,{title:`Enable Developer Mode`,children:_jsxs(_components.p,{children:[`ChatGPT → `,_jsx(_components.strong,{children:`Settings → Connectors`}),` → enable `,_jsx(_components.strong,{children:`Developer Mode`}),` (under\nAdvanced). It’s currently on `,_jsx(_components.strong,{children:`Plus, Pro, and Business`}),` plans — OpenAI\nmoves this, so verify the current gating in settings.`]})}),_jsxs(Step,{title:`Add the custom connector`,children:[_jsxs(_components.p,{children:[`Choose `,_jsx(_components.strong,{children:`Add a custom connector`}),` and enter the OneLamp MCP URL:`]}),_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`https://api.onelamp.ai/mcp`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})]}),_jsx(Step,{title:`Authorize once`,children:_jsxs(_components.p,{children:[`ChatGPT opens OneLamp in your browser to sign in and consent. OneLamp is\nits own OAuth 2.1 provider with Dynamic Client Registration — `,_jsxs(_components.strong,{children:[`no API key\nand no `,_jsx(_components.code,{children:`client_id`})]}),` to paste; ChatGPT registers itself.`]})})]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Capture backstop.`}),` ChatGPT can’t run code on a session boundary, so paste\nthe OneLamp `,_jsx(_components.strong,{children:`custom-instructions`}),` block into ChatGPT → `,_jsx(_components.strong,{children:`Settings →\nPersonalization → Custom instructions`}),` (or a Project’s instructions). It tells\nChatGPT to call `,_jsx(_components.code,{children:`get_context`}),` at the start of a task with a personal angle,\n`,_jsx(_components.code,{children:`save_context`}),` proactively on durable facts, and `,_jsx(_components.code,{children:`save_session`}),` when a\nconversation wraps up — all stamped `,_jsx(_components.code,{children:`source_surface: \"chatgpt\"`}),`:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`markdown`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`markdown`,children:_jsxs(_components.code,{language:`markdown`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`I use OneLamp (connected via MCP) as my shared context across every AI tool.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`Always pass source_surface: \"chatgpt\".`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#6796E6`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` At the START of any task with a personal angle, call get_context with a short`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` query about the work. Skip generic factual questions with no personal angle.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#6796E6`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Whenever I share a durable decision, preference, fact, or convention, call`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` save_context proactively. Never save secrets.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#6796E6`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` When I'm picking up earlier work, call resume_session.`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#6796E6`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` When a conversation wraps up, call save_session with a brief digest.`})]}),`\n`]})})}),_jsxs(_components.p,{children:[`Writes surface ChatGPT’s tool-confirmation modal before they run — that’s\nexpected; approve them. The full block lives in the\n`,_jsx(_components.a,{href:`https://github.com/onelampai/onelamp/blob/main/integrations/chatgpt/custom-instructions.md`,children:`ChatGPT integration`}),`.`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[`OpenAI renamed “connectors” → “apps” in December 2025; the settings UI may\nsay either. A first-class OneLamp `,_jsx(_components.strong,{children:`app`}),` with inline UI (built on the OpenAI\nApps SDK) is in progress — it will install from the ChatGPT app directory and\nrender the context pack as an interactive card. This page will cross-link it\nonce it ships.`]})})]}),_jsxs(Tab,{title:`Grok`,id:`grok`,children:[_jsxs(_components.p,{children:[`Grok (xAI) speaks remote MCP and connects to the `,_jsx(_components.strong,{children:`same endpoint`}),` as every\nother client, added as a `,_jsx(_components.strong,{children:`custom connector`}),` at\n`,_jsx(_components.a,{href:`https://grok.com/connectors`,children:`grok.com/connectors`}),`. Like ChatGPT it has `,_jsx(_components.strong,{children:`no\nlifecycle hooks`}),`, so capture is best-effort via custom instructions.`]}),_jsxs(_components.p,{children:[`Unlike most clients, Grok’s custom-connector flow `,_jsx(_components.strong,{children:`doesn’t auto-register`}),`\n(no Dynamic Client Registration), so after you paste the MCP URL it asks for\nOAuth credentials. OneLamp publishes a shared `,_jsx(_components.strong,{children:`public`}),` OAuth client for\nGrok — there’s no secret, so the values below are safe to paste as-is. You\nstill sign in and consent as yourself; PKCE keeps the flow secure.`]}),_jsxs(Steps,{children:[_jsxs(Step,{title:`Add the custom connector`,children:[_jsxs(_components.p,{children:[`Grok → `,_jsx(_components.a,{href:`https://grok.com/connectors`,children:`Connectors`}),` → `,_jsx(_components.strong,{children:`New Connector`}),` →\n`,_jsx(_components.strong,{children:`Custom`}),`. Enter the OneLamp MCP URL:`]}),_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`https://api.onelamp.ai/mcp`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})})]}),_jsxs(Step,{title:`Fill in the OAuth credentials`,children:[_jsxs(_components.p,{children:[`Grok shows an `,_jsx(_components.strong,{children:`OAuth Credentials Required`}),` form. Enter:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Value`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Client ID`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`XhCQgWAIkiIfuqZWYcGJzVLTmRopEFfJ`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Client Secret`}),_jsx(_components.td,{children:_jsx(_components.em,{children:`(leave blank)`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Authorization Endpoint`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`https://api.onelamp.ai/auth/oauth2/authorize`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Token Endpoint`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`https://api.onelamp.ai/auth/oauth2/token`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Scopes`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`openid`}),`, `,_jsx(_components.code,{children:`profile`}),`, `,_jsx(_components.code,{children:`email`}),`, `,_jsx(_components.code,{children:`offline_access`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Token Auth Method`}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`none (PKCE only)`})})]})]})]}),_jsxs(_components.p,{children:[`Then click `,_jsx(_components.strong,{children:`Save \u0026 Connect`}),`.`]})]}),_jsx(Step,{title:`Authorize once`,children:_jsxs(_components.p,{children:[`Grok opens OneLamp in your browser to sign in and consent. After you\napprove, the `,_jsx(_components.code,{children:`get_context`}),` / `,_jsx(_components.code,{children:`save_context`}),` tools (and the\n`,_jsx(_components.a,{href:`/tools/library`,children:`Library tools`}),`) appear in Grok.`]})})]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Capture backstop.`}),` Grok can’t run code on a session boundary, so add a\nOneLamp rule to its `,_jsx(_components.strong,{children:`custom instructions`}),` so every task loads and saves on\nits own — stamped `,_jsx(_components.code,{children:`source_surface: \"grok\"`}),`:`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`markdown`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`markdown`,children:_jsxs(_components.code,{language:`markdown`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`I use OneLamp (connected via MCP) as my shared context across every AI tool.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`Always pass source_surface: \"grok\".`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#6796E6`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` At the START of any task with a personal angle, call get_context with a short`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` query about the work. Skip generic factual questions with no personal angle.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#6796E6`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Whenever I share a durable decision, preference, fact, or convention, call`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` save_context proactively. Never save secrets.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#6796E6`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` When I'm picking up earlier work, call resume_session.`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#6796E6`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` When a conversation wraps up, call save_session with a brief digest.`})]}),`\n`]})})}),_jsx(Tip,{children:_jsxs(_components.p,{children:[`The Client ID above is a `,_jsx(_components.strong,{children:`public`}),` client (PKCE, no secret) — it only\nidentifies Grok as the app; your data is gated by your own sign-in and\nconsent. Self-hosting OneLamp? Register your own public client against your\ndeployment’s `,_jsx(_components.code,{children:`/auth/oauth2/register`}),` with the redirect URI\n`,_jsx(_components.code,{children:`https://grok.com/connectors-oauth-exchange-code/`}),` and paste that\n`,_jsx(_components.code,{children:`client_id`}),` instead.`]})})]}),_jsxs(Tab,{title:`Other clients`,id:`other-clients`,children:[_jsxs(_components.p,{children:[`Any client that supports remote MCP servers connects with the\n`,_jsx(_components.a,{href:`#the-universal-setup`,children:`universal setup`}),` above — add the endpoint, authorize,\ndone. Nothing client-specific is required.`]}),_jsx(_components.p,{children:`Without lifecycle hooks, saving is best-effort. Add a system prompt or custom\ninstruction:`}),_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`markdown`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`markdown`,children:_jsxs(_components.code,{language:`markdown`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`Use the OneLamp MCP tools to keep my context portable:`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#6796E6`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` At the start of a task, call get_context with a short query about the work.`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#6796E6`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Whenever I share a durable decision, preference, or fact, call save_context.`})]}),`\n`]})})})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`how-reliable-is-auto-save`,children:`How reliable is auto-save?`}),`\n`,_jsxs(_components.p,{children:[`The connection is identical everywhere; what differs is whether the client can\n`,_jsx(_components.strong,{children:`enforce`}),` load/save. Clients with deterministic lifecycle hooks enforce it;\nothers are nudged or best-effort.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Client`}),_jsx(_components.th,{children:`Auto-load / auto-save`}),_jsx(_components.th,{children:`Mechanism`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Claude Code`}),_jsx(_components.td,{children:`Deterministic`}),_jsx(_components.td,{children:`Session hooks`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Codex`}),_jsx(_components.td,{children:`Deterministic`}),_jsx(_components.td,{children:`Session hooks`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Cursor`}),_jsx(_components.td,{children:`Deterministic`}),_jsx(_components.td,{children:`Session hooks`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`VS Code`}),_jsx(_components.td,{children:`Nudged`}),_jsx(_components.td,{children:`Rules files`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`ChatGPT`}),_jsx(_components.td,{children:`Best-effort`}),_jsx(_components.td,{children:`Custom instructions`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Grok`}),_jsx(_components.td,{children:`Best-effort`}),_jsx(_components.td,{children:`Custom instructions`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Other clients`}),_jsx(_components.td,{children:`Best-effort`}),_jsx(_components.td,{children:`System prompt`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`no-hooks-add-onelamp-to-the-system-prompt`,children:`No hooks? Add OneLamp to the system prompt`}),`\n`,_jsxs(_components.p,{children:[`Hookless tools — browser Gemini, Perplexity, ChatGPT, Grok — can’t auto-call\n`,_jsx(_components.code,{children:`get_context`}),` / `,_jsx(_components.code,{children:`save_context`}),`. The fix is to add a OneLamp rule to the tool’s\n`,_jsx(_components.strong,{children:`system prompt`}),` (its always-on instructions), so every task loads and saves on\nits own:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Editors / CLIs`}),` (Cursor, Copilot, Windsurf, Codex): a rule in the project’s\n`,_jsx(_components.code,{children:`AGENTS.md`}),`, `,_jsx(_components.code,{children:`.cursorrules`}),`, `,_jsx(_components.code,{children:`.github/copilot-instructions.md`}),`, or\n`,_jsx(_components.code,{children:`.windsurfrules`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Browser tools`}),` (Gemini, Perplexity, ChatGPT web): the same rule pasted into\nthe tool’s `,_jsx(_components.strong,{children:`custom instructions / saved info / personalization`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The one-time `,_jsx(_components.a,{href:`https://app.onelamp.ai/setup.md`,children:`setup prompt`}),` sets this up for you\n(editors) or hands you the exact text to paste (browser tools) — see\n`,_jsx(_components.a,{href:`/quickstart#4-seed-your-context-one-time`,children:`Quickstart → Seed your context`}),`.`]}),`\n`,_jsx(Note,{children:_jsx(_components.p,{children:`Saving is idempotent and content-addressed, so a repeated or duplicate save is\nharmless — the server dedups it.`})}),`\n`,_jsx(Heading,{level:`2`,id:`beyond-tools`,children:`Beyond tools`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Chrome extension`,icon:`chrome`,href:`/integrations/chrome`,children:_jsxs(_components.p,{children:[`A different surface: capture browsing context and carry chat sessions between\nAI tools. `,_jsx(_components.em,{children:`(Coming soon.)`})]})}),_jsx(Card,{title:`Connect your tools`,icon:`link`,href:`/concepts/data-sources`,children:_jsxs(_components.p,{children:[`Pull documents `,_jsx(_components.em,{children:`in from`}),` Notion, Drive, and Slack — OneLamp as a client of\n`,_jsx(_components.em,{children:`your`}),` MCP servers.`]})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Connect your tool","description":"One MCP server. Connect any AI tool to share context.","href":"/integrations"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"The universal setup","slug":"the-universal-setup","depth":2,"children":[]},{"title":"Supported AI tools","slug":"supported-ai-tools","depth":2,"children":[]},{"title":"Data sources — 195 MCP servers","slug":"data-sources-—-195-mcp-servers","depth":2,"children":[]},{"title":"Client setup","slug":"client-setup","depth":2,"children":[]},{"title":"How reliable is auto-save?","slug":"how-reliable-is-auto-save","depth":2,"children":[{"title":"No hooks? Add OneLamp to the system prompt","slug":"no-hooks-add-onelamp-to-the-system-prompt","depth":3,"children":[]}]},{"title":"Beyond tools","slug":"beyond-tools","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"saholabs","siteName":"OneLamp","title":"Connect your tool - OneLamp","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-17T03:35:23.675Z","originalFileLocation":"integrations.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"One MCP server. Connect any AI tool to share context.\">\u003cmeta data-mint-head name=\"application-name\" content=\"OneLamp\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/saholabs/XzutOTdqJmewNlVW/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/saholabs/XzutOTdqJmewNlVW/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/saholabs/XzutOTdqJmewNlVW/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/saholabs/XzutOTdqJmewNlVW/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/saholabs/XzutOTdqJmewNlVW/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/saholabs/XzutOTdqJmewNlVW/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/saholabs/XzutOTdqJmewNlVW/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/saholabs/XzutOTdqJmewNlVW/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/saholabs/XzutOTdqJmewNlVW/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Connect your tool - OneLamp\">\u003cmeta data-mint-head property=\"og:description\" content=\"One MCP server. Connect any AI tool to share context.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"OneLamp\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.onelamp.ai/integrations\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://saholabs.mintlify.site/_mintlify/api/og/v2?division=Connect\u0026amp;title=Connect+your+tool\u0026amp;description=One+MCP+server.+Connect+any+AI+tool+to+share+context.\u0026amp;theme=4ff58f82e797b3af6e69a665\u0026amp;signature=cce1105c8c78f4be5298d10215e8dcd4a188815bddbcee9b5c1d6e491b4be43e\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Connect your tool - OneLamp\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"One MCP server. Connect any AI tool to share context.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://saholabs.mintlify.site/_mintlify/api/og/v2?division=Connect\u0026amp;title=Connect+your+tool\u0026amp;description=One+MCP+server.+Connect+any+AI+tool+to+share+context.\u0026amp;theme=4ff58f82e797b3af6e69a665\u0026amp;signature=cce1105c8c78f4be5298d10215e8dcd4a188815bddbcee9b5c1d6e491b4be43e\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/saholabs/XzutOTdqJmewNlVW/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"OneLamp\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#df6900\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.onelamp.ai/integrations\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/integrations.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.onelamp.ai/#organization\",\"name\":\"OneLamp\",\"url\":\"https://docs.onelamp.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/saholabs/aiDjuj9KTK8tf3oz/logo/light.svg?fit=max\u0026auto=format\u0026n=aiDjuj9KTK8tf3oz\u0026q=85\u0026s=326c498891cea6f68a15417f8e6e8c46\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.onelamp.ai#website\",\"name\":\"OneLamp\",\"url\":\"https://docs.onelamp.ai\",\"publisher\":{\"@id\":\"https://docs.onelamp.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.onelamp.ai/integrations#webpage\",\"url\":\"https://docs.onelamp.ai/integrations\",\"name\":\"Connect your tool\",\"description\":\"One MCP server. Connect any AI tool to share context.\",\"dateModified\":\"2026-06-17T03:35:23.675Z\",\"isPartOf\":{\"@id\":\"https://docs.onelamp.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.onelamp.ai/integrations#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.onelamp.ai/integrations#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"OneLamp\",\"item\":\"https://docs.onelamp.ai\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Connect your tool\",\"item\":\"https://docs.onelamp.ai/integrations\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.onelamp.ai/integrations#article\",\"headline\":\"Connect your tool\",\"name\":\"Connect your tool\",\"description\":\"One MCP server. Connect any AI tool to share context.\",\"url\":\"https://docs.onelamp.ai/integrations\",\"mainEntityOfPage\":{\"@id\":\"https://docs.onelamp.ai/integrations#webpage\"},\"dateModified\":\"2026-06-17T03:35:23.675Z\",\"publisher\":{\"@id\":\"https://docs.onelamp.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.onelamp.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"OneLamp\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"OneLamp","nav":{"global":null,"tabs":[{"tab":"Documentation","groups":[{"group":"Get started","pages":[{"title":"Introduction","href":"/introduction"},{"title":"Quickstart","href":"/quickstart"},{"title":"Sign up as a tool","description":"Zero-friction signup for AI tools — connect to OneLamp in under thirty seconds. No API keys, no CLI, no manual setup.","icon":"robot","href":"/agent-signup"}]},{"group":"Connect","pages":[{"title":"Connect your tool","href":"/integrations"},{"title":"Chrome extension","description":"Capture browsing context and carry sessions between AI tools.","tag":"Coming soon","href":"/integrations/chrome"}]},{"group":"Concepts","pages":[{"title":"Context memory","href":"/concepts/context-memory"},{"title":"Projects","href":"/concepts/projects"},{"title":"Teams","href":"/concepts/teams"},{"title":"Library","href":"/concepts/library"},{"title":"Data sources","href":"/concepts/data-sources"},{"title":"MCP \u0026 OAuth","href":"/mcp"},{"title":"Privacy \u0026 data ownership","href":"/concepts/privacy"}]},{"group":"Tool reference","pages":[{"title":"Context tools","href":"/tools/context"}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Connect your tool - OneLamp","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":[],"chunks":[]}