# Create Pi presentations in your AI assistant Connect Pi to create presentations, check progress, and return to Pi to edit. ## Endpoint https://mcp.pi.inc/api/v1/mcp Transport: Streamable HTTP. Authentication: OAuth with PKCE and the service's Dynamic Client Registration (DCR) flow. ## Manual setup and other options ### Codex Add the Pi MCP remote connection with the following Codex command, then complete browser authorization when you choose to connect your account. Official guide: https://learn.chatgpt.com/docs/extend/mcp 1. Before adding Pi, identify the effective user-, project-, or plugin-level configuration source within the user's scope. Compare complete MCP URLs, not domain labels: reuse an existing connection under any name only when it exactly matches this URL. When an exact match already exists, skip every add or save step below. Otherwise keep existing connections unchanged and choose an unused local alias, such as one derived from the target domain. Ask if the effective source cannot be safely identified. Replace PI_CONNECTION_NAME in every example below with that selected name; do not execute the placeholder literally. Change only the selected connection: never replace the whole configuration file or modify other connections. Do not read, print, copy, or write credentials. 2. Only when no existing connection has this exact MCP URL, save the remote connection in the terminal: ``` codex mcp add PI_CONNECTION_NAME --url https://mcp.pi.inc/api/v1/mcp ``` 3. When you choose to connect your Pi account, complete browser authorization yourself: ``` codex mcp login PI_CONNECTION_NAME --oauth-client-registration dcr ``` ### Claude Desktop Add Pi as an account-level remote connection in Claude Desktop. Official guide: https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp 1. Before adding Pi, identify the effective user-, project-, or plugin-level configuration source within the user's scope. Compare complete MCP URLs, not domain labels: reuse an existing connection under any name only when it exactly matches this URL. When an exact match already exists, skip every add or save step below. Otherwise keep existing connections unchanged and choose an unused local alias, such as one derived from the target domain. Ask if the effective source cannot be safely identified. Replace PI_CONNECTION_NAME in every example below with that selected name; do not execute the placeholder literally. Change only the selected connection: never replace the whole configuration file or modify other connections. Do not read, print, copy, or write credentials. 2. Only when no existing connection has this exact MCP URL, open Customize > Connectors > + Add > Add custom connector. 3. Only when no existing connection has this exact MCP URL, add the remote Pi URL: https://mcp.pi.inc/api/v1/mcp 4. If Claude requires OAuth during setup, proactively start its native authorization flow and have the user complete account-level authorization personally; do not replace this with local JSON configuration. If no native flow is available, explain the exact next step. ### Cursor Add Pi in Cursor MCP settings or the appropriate project/user mcp.json, then follow Cursor's OAuth prompt. Official guide: https://cursor.com/docs/mcp 1. Before adding Pi, identify the effective user-, project-, or plugin-level configuration source within the user's scope. Compare complete MCP URLs, not domain labels: reuse an existing connection under any name only when it exactly matches this URL. When an exact match already exists, skip every add or save step below. Otherwise keep existing connections unchanged and choose an unused local alias, such as one derived from the target domain. Ask if the effective source cannot be safely identified. Replace PI_CONNECTION_NAME in every example below with that selected name; do not execute the placeholder literally. Change only the selected connection: never replace the whole configuration file or modify other connections. Do not read, print, copy, or write credentials. 2. Only when no existing connection has this exact MCP URL, add a remote server in Cursor MCP settings, or use this in the appropriate mcp.json: ``` { "mcpServers": { "PI_CONNECTION_NAME": { "url": "https://mcp.pi.inc/api/v1/mcp" } } } ``` 3. If Cursor requires OAuth during setup, start its native authorization flow and have the user complete OAuth personally. If no native flow is available, explain the exact next step. Saving configuration does not prove that tools are ready. ### OpenCode Add the Pi remote MCP in opencode.json, then run the authorization command when you choose to connect your account. Official guide: https://opencode.ai/docs/mcp-servers/ 1. Before adding Pi, identify the effective user-, project-, or plugin-level configuration source within the user's scope. Compare complete MCP URLs, not domain labels: reuse an existing connection under any name only when it exactly matches this URL. When an exact match already exists, skip every add or save step below. Otherwise keep existing connections unchanged and choose an unused local alias, such as one derived from the target domain. Ask if the effective source cannot be safely identified. Replace PI_CONNECTION_NAME in every example below with that selected name; do not execute the placeholder literally. Change only the selected connection: never replace the whole configuration file or modify other connections. Do not read, print, copy, or write credentials. 2. Only when no existing connection has this exact MCP URL, add this to opencode.json: ``` { "mcp": { "PI_CONNECTION_NAME": { "type": "remote", "url": "https://mcp.pi.inc/api/v1/mcp" } } } ``` 3. When you want to connect the account, run: ``` opencode mcp auth PI_CONNECTION_NAME ``` ### WorkBuddy Follow the current WorkBuddy connector guide to add the Pi remote connection. Official guide: https://www.workbuddy.ai/docs/zh/workbuddy/From-Beginner-to-Expert-Guide/Function-Description/Connector 1. Before adding Pi, identify the effective user-, project-, or plugin-level configuration source within the user's scope. Compare complete MCP URLs, not domain labels: reuse an existing connection under any name only when it exactly matches this URL. When an exact match already exists, skip every add or save step below. Otherwise keep existing connections unchanged and choose an unused local alias, such as one derived from the target domain. Ask if the effective source cannot be safely identified. Replace PI_CONNECTION_NAME in every example below with that selected name; do not execute the placeholder literally. Change only the selected connection: never replace the whole configuration file or modify other connections. Do not read, print, copy, or write credentials. 2. Only when no existing connection has this exact MCP URL, use the current WorkBuddy official guide only to save the remote Pi URL: https://mcp.pi.inc/api/v1/mcp 3. Keep credentials managed by WorkBuddy and complete browser OAuth when the client requests it. ### DeepSeek Harness (dsh) Use dsh's documented remote HTTP MCP flow to add the Pi remote connection when your current dsh version supports the required OAuth flow. Official guide: https://github.com/deepseek-ai/deepseek-harness/blob/master/packages/mcp/mcp-client/README.zh.md 1. Before adding Pi, identify the effective user-, project-, or plugin-level configuration source within the user's scope. Compare complete MCP URLs, not domain labels: reuse an existing connection under any name only when it exactly matches this URL. When an exact match already exists, skip every add or save step below. Otherwise keep existing connections unchanged and choose an unused local alias, such as one derived from the target domain. Ask if the effective source cannot be safely identified. Replace PI_CONNECTION_NAME in every example below with that selected name; do not execute the placeholder literally. Change only the selected connection: never replace the whole configuration file or modify other connections. Do not read, print, copy, or write credentials. 2. Only when no existing connection has this exact MCP URL, use dsh's official remote HTTP MCP method only to save this URL: https://mcp.pi.inc/api/v1/mcp 3. Keep credentials managed by dsh and complete browser OAuth when your current dsh version requests it. ### Other clients Choose a client that supports remote Streamable HTTP MCP and standard OAuth, then use its documented workflow to add the Pi connection. 1. Before adding Pi, identify the effective user-, project-, or plugin-level configuration source within the user's scope. Compare complete MCP URLs, not domain labels: reuse an existing connection under any name only when it exactly matches this URL. When an exact match already exists, skip every add or save step below. Otherwise keep existing connections unchanged and choose an unused local alias, such as one derived from the target domain. Ask if the effective source cannot be safely identified. Replace PI_CONNECTION_NAME in every example below with that selected name; do not execute the placeholder literally. Change only the selected connection: never replace the whole configuration file or modify other connections. Do not read, print, copy, or write credentials. 2. Only when no existing connection has this exact MCP URL, use that client's official workflow to save https://mcp.pi.inc/api/v1/mcp. 3. Use that client's documented steps, with credentials managed by the client and browser OAuth completed when requested. ## What Pi can do Create presentations, check tasks, choose themes, and work with saved outlines. ### `pi_create_document` — Create a presentation Create a new presentation from an idea or prepared text. ### `pi_get_task` — Check generation progress Check an existing task's progress and delivery result. ### `pi_list_themes` — Find presentation themes Browse available themes or find candidates for a visual preference. ### `pi_get_status` — View account status View the current account's quota and generation eligibility. ### `pi_get_outline` — View a presentation outline Read a saved outline and its version. ### `pi_update_outline` — Update and save an outline Save outline changes without rewriting completed presentation pages. ## Set up the Pi MCP connection This guide covers saving a connection and, when setup requires it, starting host-managed account authorization. Setup varies by client; listing a client is not a compatibility claim for every version. Saving the endpoint never authorizes tool calls, document creation, generation, or spending account quota. Your client manages OAuth, eligible token refresh, tool discovery, tool loading, and credentials; Pi does not take over those client responsibilities. Identify the effective user-, project-, or plugin-level configuration source within the user's scope, the client version, and its documented remote MCP and OAuth workflow. Compare complete MCP URLs, not domain labels. Reuse any existing connection under any name when its complete URL exactly matches the target, without rewriting it. For a different URL, preserve the old connection and choose an unused local alias, which may be derived from the target domain. Do not pick a Pi connection at random when the target is not specified; ask when the effective source cannot be safely identified. Change a same-name, different-URL connection only when the user explicitly asks to replace it. Change only that selected source and connection, retain still-applicable non-authentication settings, and do not transfer endpoint-specific authorization headers, credential references, OAuth clients, or scope parameters to the new URL. Credentials remain managed by the host and must not be read, copied, or written. If an in-place replacement is not safe, propose adding a new connection and wait for authorization before disabling the old one. ## Account authorization and tool availability Report installation, authorization, and tool availability as separate phases. Connection setup includes saving the endpoint and, when setup requires it, starting the host-managed OAuth flow. The Agent must proactively use the host's native login entry or authorization challenge; the host opens the system browser or a protected native authentication window, and the user signs in and approves access personally. If no native entry is available, explain the exact manual step. Do not move authorization into an ordinary embedded browser controllable by the Agent. The Agent does not register clients, construct authorization URLs, run separate PKCE, exchange or inject tokens, read or fill credentials, read cookies, or approve consent for the user. Pi cannot control or enforce the host's browser choice. After installation, use the host's documented connection refresh, tool reload, or session restart process when needed, then report the resulting phase. Do not call `pi_list_themes` merely to prove that configuration was saved. When setup requires OAuth, start it through the host as described above rather than waiting for the user to find the login entry. If setup does not require OAuth, defer account connection until the user first asks to use Pi. Reuse a valid connection or let the host refresh an eligible access token without user interaction. If authorization is still needed, the Agent starts the host flow and the user completes sign-in and consent. OAuth discovery, client registration, PKCE, refresh, and credential storage belong to the host. Missing PI tools are a connection problem to report, not permission to use browser automation or direct business HTTP to create, advance, or recover a generation. These instructions do not give Pi control of the host browser. After authorization, use the client's documented connection refresh, tool reload, or session restart workflow when OAuth, discovery, or loading evidence calls for it. Use the tools your client actually discovers. When the user requests a read-only verification, call `pi_list_themes` once; after it succeeds, use the discovered tools for later authorized requests. Use `pi_create_document` only for an authorized creation request. ## Use Pi safely - For an authorized generation, create once and query the original task with `pi_get_task`. Status and theme queries are optional, not prerequisites. Omitted `share_permission` defaults to 1: after completion, authorized read-only sharing lets link holders read. Explicit 0 does not open link sharing; existing member and collaborator permissions still apply. The host must obtain `pi:documents:share` for 1, without silently changing the request. For result display, prefer the host panel only when the backend confirms the content is ready and anonymously readable. Otherwise provide the actual link; open an external browser for the result only when requested. This result-display rule does not apply to OAuth authorization. Unfinished content is progress, not a finished deck. Login or display failure does not authorize using another browser identity, changing ACL, or generating again. - Create from an idea, prepared content, or text organized by the host; the host organizes attachments into usable text, and Pi does not promise to read arbitrary files directly. Theme and page count are optional: Pi selects defaults when omitted, while an explicit supported value takes priority. - `pi_get_task` checks an existing task. `pi_get_outline` reads a saved outline. `pi_update_outline` adjusts a saved outline when requested; it does not promise to automatically rewrite a completed presentation. ## Theme selection and semantic recommendations - Theme browsing is optional. When the user gives visual or template preferences and wants a recommendation, call `pi_list_themes` with `preferences.query` (1-300 characters), compare the returned names and previews, and use a real `theme_ref`. Respect an explicitly selected theme. When no theme is supplied, let Pi choose its visible default rather than inventing a reference. - Semantic search uses `offset=0` and returns at most 10 visible candidates from a bounded search. Candidates are not guaranteed matches. Disclose `no_match`, unavailable previews, unsuitable candidates, or recommendation failure; use alternatives only within the user's authorization. It creates no document or task, but may incur embedding-provider cost. Do not automatically retry or paginate semantic searches. Older deployments may not support `preferences.query`; report that limitation rather than claim a match. ## Account and workspace continuity - On first use, retain internally the non-credential `auth_context` in the first successful Pi tool result; do not add a status or theme preflight merely to obtain it. Both text JSON and structuredContent tool results include the same `auth_context`; later calls pass only `expected_auth_context` with that original value. Do not require the user to inspect a summary. Do not silently replace it after refresh or sign-in. If `auth_context_changed` is returned, stop and ask to confirm the account and workspace. If a client cannot use this tool schema, identity-safe recovery cannot be guaranteed. Do not guess a parameter or claim automatic resume. ## Quota, recovery, and unknown outcomes - A request to create a presentation authorizes normal available quota and the disclosed default `share_permission=1` for that generation, not historical documents. Account balance or admission is not a final price. Do not promise an unsupported price cap, purchase credits, recharge, or repeat the same confirmation. Sharing is attempted only after completion and is rechecked against OAuth and workspace permission. An owner-closed share is not reopened. For missing scope, use host consent; do not silently substitute 0. OAuth approval and saving a connection do not themselves authorize generation. - If a task is `awaiting_credits`, retain and query that original task. When automatic recovery is enabled (both execute and recovery are enabled), a top-up may resume it automatically; this does not guarantee a scheduler is running. Stopping polling is not cancellation. For an unknown write outcome, reconcile only the original task or idempotency key. Do not create a replacement, submit the operation again, retry creation, or change the idempotency key. A 503 is a service failure: do not loop OAuth login. - Treat a nonterminal task as waiting for its server-provided `poll_after_ms` delay. If it is `0`, stopped, manually reviewed, or budget-limited, do not busy-poll, infer completion, or submit a replacement. Query the original task only when the service or user directs a next read. - Use the saved connection for a later authorized Pi request; your client manages the OAuth and tool workflow. - A task reference, idempotency key, or `auth_context` remains bound to its original connection. Do not query, replay, or resume it through a different service. ## Tell your assistant what you want Pi to do - Create a Chinese product launch presentation from this content, with a target of 10 content pages. - Show me clean business presentation themes first. Do not create a presentation yet. - Read this presentation's saved outline, move market analysis before product introduction, and save the outline. Do not create a new presentation. ## FAQ and the complete guide - Fees: creation uses normal available quota only after you ask to create. A balance or eligibility result is not a final price, and natural-language theme recommendations may incur provider cost. - Sharing: a new presentation requests anonymous read-only sharing by default. Once sharing opens successfully, people with its link can read it; actual access depends on the result, and existing workspace and collaborator permissions still apply. - Attachments: Pi does not directly read arbitrary files. Your host assistant organizes supported attachment content into usable text first. - Editing and export: return to the Pi website to edit pages or export files; MCP does not provide page editing or file export tools. - Stopping queries: stopping polling does not cancel a task. For an unknown result or awaiting credits, query the original task or idempotency key instead of creating another one.