{"id":72875,"plugin_id":"plugin_asdk_app_6ab2a4a6b6008191a57909ccabc1ddae","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-31T01:14:30.747Z","digest":"7bd68d0dcd1cef72336b3494949fbf1783762a0d4b8f339afe57e335492f0267","against":null,"payload":{"description":"Connect this agent (Claude Code, Codex, Cursor, VS Code or another MCP-capable agent) to the Stripo MCP server (stripo-mcp) with the organization's Client ID, or check an existing connection. Use when stripo-mcp is missing, not authenticated or rejecting calls, when the user shares a Stripo Client ID, or before the first Stripo task after installing the plugin. Never signs in on the user's behalf.","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":316}],"name":"connect","skill_md_contents":"---\nname: connect\ndescription: Connect this agent (Claude Code, Codex, Cursor, VS Code or another MCP-capable agent) to the Stripo MCP server (stripo-mcp) with the organization's Client ID, or check an existing connection. Use when stripo-mcp is missing, not authenticated or rejecting calls, when the user shares a Stripo Client ID, or before the first Stripo task after installing the plugin. Never signs in on the user's behalf.\nallowed-tools: Bash(claude mcp add:*), Bash(claude mcp get:*), Bash(claude mcp list:*), Bash(claude mcp remove:*), Bash(codex mcp get:*), Bash(codex mcp list:*)\n---\n\n# Connect Stripo MCP\n\nThe Stripo plugin ships no MCP server entry, because Stripo authenticates every organization\nwith its own pre-registered OAuth client. This skill registers the server in the agent that runs\nit and hands the browser sign-in to the user.\n\n| Setting | Value |\n| --- | --- |\n| Server name | `stripo-mcp` |\n| URL | `https://mcp.stripo.email/mcp` (streamable HTTP) |\n| OAuth client | the organization's Client ID, a public client without a secret |\n| Scopes | `mcp:tools` and `offline_access` |\n\nRules: change nothing except the `stripo-mcp` entry. Never start the OAuth sign-in yourself, and\nnever ask for, print or store tokens. The Client ID is not a password, but keep it out of files\nother than the agent's own MCP configuration, and out of public repositories.\n\n## 1. Inspect the existing connection\n\n- Claude Code: run `claude mcp get stripo-mcp` to identify the effective entry and its scope.\n  Inspect the `stripo-mcp` entries in the user/local configuration (`~/.claude.json`, or\n  `$CLAUDE_CONFIG_DIR/.claude.json` when that directory is set) and the project's `.mcp.json`.\n  The native Client ID is `oauth.clientId`; local and project entries override a user entry.\n- Codex: run `codex mcp get stripo-mcp`, then inspect `mcp_servers.stripo-mcp` in the user\n  configuration (`$CODEX_HOME/config.toml` when set, otherwise `~/.codex/config.toml`) and any\n  project configuration overriding it. The native Client ID is `oauth.client_id`; `mcp get`\n  does not display it.\n- Cursor: inspect the `stripo-mcp` entry in the global `~/.cursor/mcp.json` and in the\n  project's `.cursor/mcp.json`. The native Client ID is `auth.CLIENT_ID`.\n- VS Code (GitHub Copilot): inspect the `stripo-mcp` entry in the user-level `mcp.json` that\n  **MCP: Open User Configuration** opens (for a default install: macOS\n  `~/Library/Application Support/Code/User/mcp.json`, Linux `~/.config/Code/User/mcp.json`,\n  Windows `%APPDATA%\\Code\\User\\mcp.json`) and in the workspace's `.vscode/mcp.json`. The native\n  Client ID is `oauth.clientId`.\n- Other agents: inspect the existing server in the agent's MCP settings.\n- For an existing `mcp-remote` entry, recover `client_id` from its\n  `--static-oauth-client-info` argument. Read only the relevant connection fields; never dump\n  configuration files or token stores into the conversation.\n\n## 2. Reuse the saved Client ID\n\nUse the Client ID already saved for this Stripo connection without asking the user to provide\nit again, including when migrating a local/project entry or an `mcp-remote` bridge. Prefer the\neffective entry's ID when multiple scopes exist. A replacement ID explicitly supplied by the\nuser for this connection takes precedence; do not change organizations based on an unrelated ID.\n\nIf no connection has a saved ID, use the plugin's configured value (Claude Code only):\n`${user_config.client_id}`. An empty value or the literal placeholder is not an ID.\nOnly when neither the existing connection nor the plugin nor the user supplies an ID, ask for\nit: a workspace Owner or Admin copies it from Stripo **Workspace Settings → MCP integration**\n(turn on *Connect AI tools* first), and other members ask them. Stop until you have it.\n\nA user-scope HTTP entry with this URL, the selected ID and no local/project override needs no\nconfiguration change.\nIf its tools are already available, call `whoami` and report the account/workspace; a successful\ncall completes this skill without another login. Otherwise continue with step 4. For other\nentries, explain the migration to user scope before step 3.\n\n## 3. Register the server (pick the host you run in)\n\n**Claude Code**: the target scope is always **user**. Preserve the selected Client ID before\nchanging any entry. Keep a matching user entry; otherwise replace only the user entry and add\nthe HTTP server with the saved ID:\n\n```bash\nclaude mcp remove stripo-mcp --scope user   # only when an existing user entry needs replacement\nclaude mcp add --transport http --scope user --client-id '<CLIENT_ID>' stripo-mcp https://mcp.stripo.email/mcp\n```\n\nAfter the user entry is saved, remove each `stripo-mcp` override found in the current project's\nlocal and project scopes. Do not recreate it at either scope:\n\n```bash\nclaude mcp remove stripo-mcp --scope local     # only if a local entry exists\nclaude mcp remove stripo-mcp --scope project   # only if a project entry exists\nclaude mcp get stripo-mcp\n```\n\nVerify that the effective entry now reports **User config**, HTTP and the Stripo URL, and that\nthe user configuration retains the selected Client ID. If an overriding entry cannot be removed,\nreport that remaining blocker instead of claiming the connection was migrated.\n\n**Codex**: edit the user configuration located in step 1 (create it when missing). Replace only\nthe `mcp_servers.stripo-mcp` entry, including its `oauth` and obsolete transport-specific\nsub-tables; preserve all other server entries and settings. After saving, remove only the\ncorresponding entry from any project configuration that\noverrides it, and verify the effective entry uses the user configuration and the saved ID.\nUse the host's approval flow if it requires approval for the configuration write. Do not use\n`codex mcp add --oauth-client-id` from inside a session: it starts a browser sign-in at once,\nwhich cannot complete from a sandboxed agent.\n\n```toml\n[mcp_servers.stripo-mcp]\nurl = \"https://mcp.stripo.email/mcp\"\nscopes = [\"mcp:tools\", \"offline_access\"]\n\n[mcp_servers.stripo-mcp.oauth]\nclient_id = \"<CLIENT_ID>\"\n```\n\n**Cursor**: edit the global `~/.cursor/mcp.json` (create it when missing; the project's\n`.cursor/mcp.json` only when the user asks for a project-only connection). Keep every other\nserver and add or replace the `stripo-mcp` entry inside `mcpServers`. Cursor needs the `auth`\nobject in exactly this shape, with the scopes pinned. The file is outside the workspace and\nCursor's sandbox denies writes to it: write it with a terminal command, and when the sandbox\nblocks the write, ask the user to approve rerunning the command outside the sandbox instead of\nstopping.\n\n```json\n{\n  \"mcpServers\": {\n    \"stripo-mcp\": {\n      \"url\": \"https://mcp.stripo.email/mcp\",\n      \"auth\": {\n        \"CLIENT_ID\": \"<CLIENT_ID>\",\n        \"scopes\": [\"mcp:tools\", \"offline_access\"]\n      }\n    }\n  }\n}\n```\n\n**VS Code (GitHub Copilot)**: edit the user-level `mcp.json` located in step 1 (create it when\nmissing; the workspace's `.vscode/mcp.json` only when the user wants Stripo in one project).\nKeep every other server and add or replace `stripo-mcp` inside `servers`. VS Code takes the\nscopes from the server itself and reads `oauth.clientId` from version 1.123 on.\n\n```json\n{\n  \"servers\": {\n    \"stripo-mcp\": {\n      \"type\": \"http\",\n      \"url\": \"https://mcp.stripo.email/mcp\",\n      \"oauth\": { \"clientId\": \"<CLIENT_ID>\" }\n    }\n  }\n}\n```\n\n**Other agents**: add a user-level HTTP MCP server named `stripo-mcp` with the URL above, the saved\nClient ID as a pre-registered OAuth client without a secret, and the scopes `mcp:tools offline_access`, in the\nagent's own MCP settings. When the agent cannot write its settings, give the user these values.\nAn agent without OAuth support for remote servers can run the bridge as a local stdio server\n(Node.js 18 or later): `npx -y mcp-remote@0.14.3 https://mcp.stripo.email/mcp 3334 --static-oauth-client-info '{\"client_id\":\"<CLIENT_ID>\"}' --static-oauth-client-metadata '{\"scope\":\"mcp:tools offline_access\"}'`.\n\n## 4. Hand over the sign-in\n\nTell the user what to do next; do not run it:\n\n- Claude Code: exit and start Claude Code again, run `/mcp`, select `stripo-mcp`, choose\n  **Authenticate**, and sign in to Stripo in the browser. On a machine without a browser:\n  `claude mcp login stripo-mcp --no-browser`.\n- Codex: run `codex mcp login stripo-mcp --scopes mcp:tools,offline_access` in a terminal, or\n  choose **Authenticate** next to `stripo-mcp` in the Codex app's MCP settings, then start a new\n  session.\n- Cursor: restart Cursor, open **Customize → MCPs**, find `stripo-mcp` under **Needs Attention**,\n  click **Authenticate**, sign in to Stripo in the browser tab and click **Return to Cursor**\n  (port 8787 must be free for the return).\n- VS Code: click **Start** above the `stripo-mcp` entry (or **MCP: List Servers → stripo-mcp →\n  Start Server**), confirm that the server is trusted, click **Allow** when VS Code asks to\n  authenticate, and sign in to Stripo in the browser. Ignore the **Set Client Secret** action.\n- Other agents: start the server or connection and complete the browser sign-in it opens.\n\n## 5. Verify\n\nIn the new session, call `whoami` on `stripo-mcp` without changing anything and report the\naccount and workspace it returns. \"Client not found\" on the sign-in page means a wrong, stale or\nregenerated Client ID: explain that the saved ID was rejected and use a replacement when the\nuser supplies one. A tool call refused with a plan message means the\norganization's Stripo plan does not include MCP integration.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}