Connect an AI agent to your SystemSculpt account
Updated for SystemSculpt 6.18 ·
Claude Code, Codex and other MCP apps can read and manage your own SystemSculpt account at https://systemsculpt.com/mcp. You sign in once in the browser and choose what the app may do. No license key, copied token or paid plan is needed to connect.
On this page
Connect
Add https://systemsculpt.com/mcp to your app as a remote (Streamable HTTP) MCP server, with OAuth. The app opens the SystemSculpt sign-in page. Sign in, or sign up there if you are new, then read the consent page and choose Allow. The app keeps the token; you never copy one.
- The consent page lists every permission the app asked for. Some apps ask for all of them at once. Deny if that is more than you want.
- The token works only for your account. No tool takes another person, email or account ID.
- An app that asked for less gets
insufficient_scopeon a tool outside its grant. Sign in again from the app to add that permission. - An unpaid or expired account can still connect and use every tool except sending and processing captures.
Apps we checked
Checked on November 1, 2026 on a Mac, with a test account: the app's own sign-in, then one read of that account through the app's own MCP client. "Not checked yet" means the setup follows the app's documentation, but we have not run it.
| App | How it signs in | Status |
|---|---|---|
| Claude Code 2.1.316 | Client ID metadata document | Checked: sign-in, then get_account |
| Codex CLI 0.165 | Client ID metadata document | Checked: sign-in, then get_plan |
| opencode 1.19.5 | Dynamic client registration | Checked: sign-in, then get_account |
| Claude (claude.ai) and Claude Desktop | Custom connector | Not checked yet: our test agents may not sign in to Claude accounts |
| ChatGPT | Custom connector (developer mode) | Not checked yet: needs a ChatGPT plan and workspace that allow custom MCP servers |
| Cursor | Dynamic client registration | Not checked yet: not installed on our test Mac |
| VS Code | OAuth sign-in in the browser | Not checked yet: its sign-in opens the desktop browser, which our test run could not use |
| Gemini CLI | Dynamic client registration | Not checked yet: not installed on our test Mac |
Claude Code
claude mcp add --transport http systemsculpt https://systemsculpt.com/mcpStart claude, run /mcp, choose systemsculpt, then Authenticate. Allow in the browser. Claude Code asks for every permission at once. claude mcp remove systemsculpt removes it.
Codex
codex mcp add systemsculpt --url https://systemsculpt.com/mcp
codex mcp login systemsculptCodex finds the sign-in itself and opens the browser. On a machine without a browser, add --no-browser and paste the address the browser lands on. Codex asks for read access first. codex mcp logout systemsculpt disconnects.
opencode
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"systemsculpt": { "type": "remote", "url": "https://systemsculpt.com/mcp", "enabled": true }
}
}opencode mcp auth systemsculpt
opencode mcp listLeave OAuth on (the default). Do not add an Authorization header.
Claude and Claude Desktop
Not checked yet. In Claude, open Settings → Connectors → Add custom connector, name it SystemSculpt, enter https://systemsculpt.com/mcp and choose Add, then Connect. Claude Desktop uses the same connectors as your Claude account. On Team and Enterprise plans an owner adds it first. See Claude's custom connector steps (opens in a new tab).
ChatGPT
Not checked yet. Where your ChatGPT plan and workspace allow custom MCP servers, add https://systemsculpt.com/mcp with OAuth. See OpenAI's plan and workspace rules (opens in a new tab).
Cursor
{
"mcpServers": {
"systemsculpt": { "url": "https://systemsculpt.com/mcp" }
}
}Not checked yet. In Cursor's MCP settings, connect SystemSculpt and allow it in the browser. The Cursor CLI uses the same file: agent mcp login systemsculpt.
VS Code
{
"servers": {
"systemsculpt": { "type": "http", "url": "https://systemsculpt.com/mcp" }
}
}Not checked yet. Run MCP: List Servers, start systemsculpt and allow it in the browser when VS Code asks.
Gemini CLI
{
"mcpServers": {
"systemsculpt": { "httpUrl": "https://systemsculpt.com/mcp", "oauth": { "enabled": true } }
}
}Not checked yet. Start Gemini CLI and run /mcp auth systemsculpt.
HTTP and your own client
Every tool is also an HTTPS endpoint under /api/account/, with the same token, input and { status, data } result. A script uses the token its OAuth client received; there is no separate key to create.
curl -s https://systemsculpt.com/api/account/plan \
-H "Authorization: Bearer $SYSTEMSCULPT_TOKEN"/mcpanswers401withWWW-Authenticate: Bearer resource_metadata="https://systemsculpt.com/.well-known/oauth-protected-resource/mcp"until a token is sent.- That metadata names the resource
https://systemsculpt.com/mcp, the authorization serverhttps://clerk.systemsculpt.comand every scope. - The authorization server's metadata lists its authorize, token, registration and revocation endpoints. A client identifies itself with a client ID metadata document (an HTTPS
client_id) or registers dynamically. - Use the authorization code flow with PKCE (
S256) andresource=https://systemsculpt.com/mcp. A token without that resource is refused. - Ask for
offline_accessto get a refresh token. Refreshing ends the previous access token. - Send
Authorization: Bearer <token>in a header, never in a URL.{ "error": { "code", "message" } }is the HTTP error body. - Keep the token in a secret store, not in a prompt, file or log.
Tools, endpoints and permissions
MCP tools/list gives each tool's input and output JSON Schema, a title and hints. Every tool that changes something is marked destructive, so your app can ask before it runs. Billing tools also list their money effects in _meta["systemsculpt.com/effects"].
| Tool | HTTP route and permission |
|---|---|
get_account | GET /api/account/profile, needs account:read |
get_plan | GET /api/account/plan, needs account:read |
get_balance | GET /api/account/balance, needs account:read |
get_usage | GET /api/account/usage, needs account:read |
get_billing_preferences | GET /api/account/billing-preferences, needs account:read |
get_newsletter_preference | GET /api/account/newsletter, needs account:read |
set_newsletter_preference | POST /api/account/newsletter, needs account:preferences |
list_gifts | GET /api/account/gifts, needs account:read |
get_gift_code | GET /api/account/gifts/code, needs gifts:manage |
send_gift | POST /api/account/gifts/send, needs gifts:manage |
redeem_gift | POST /api/account/gifts/redeem, needs gifts:manage |
get_license_key | GET /api/account/license-key, needs credentials:read |
list_sign_in_sessions | GET /api/account/sessions, needs sessions:manage |
revoke_sign_in_session | POST /api/account/sessions/revoke, needs sessions:manage |
get_account_deletion_status | GET /api/account/deletion, needs account:read |
request_account_deletion | POST /api/account/deletion, needs account:delete |
| Tool | HTTP route and permission |
|---|---|
create_billing_portal_link | POST /api/account/billing-portal, needs billing:portal |
get_renewal_consent_offer | POST /api/account/billing/consent-offer, needs billing:manage |
cancel_subscription | POST /api/account/subscription/cancel, needs billing:manage |
resume_subscription | POST /api/account/subscription/resume, needs billing:manage |
cancel_recurring_credits | POST /api/account/credits/recurring/cancel, needs billing:manage |
resume_recurring_credits | POST /api/account/credits/recurring/resume, needs billing:manage |
set_auto_reload | POST /api/account/credits/auto-reload, needs billing:manage |
quote_checkout | POST /api/account/checkout/quote, needs account:read |
create_checkout_link | POST /api/account/checkout, needs billing:checkout |
get_checkout_status | GET /api/account/checkout/status, needs account:read |
| Tool | HTTP route and permission |
|---|---|
list_captures | GET /api/account/captures, needs captures:read |
get_capture | GET /api/account/captures/{capture_id}, needs captures:read |
create_capture | POST /api/account/captures, needs captures:process |
get_capture_upload_part_url | GET /api/account/captures/{capture_id}/upload/part-url, needs captures:process |
complete_capture_upload | POST /api/account/captures/{capture_id}/upload/complete, needs captures:process |
run_capture_action | POST /api/account/captures/{capture_id}/actions, needs captures:read and captures:process |
ask_captures | POST /api/account/captures/ask, needs captures:read and captures:process |
delete_capture | DELETE /api/account/captures/{capture_id}, needs captures:delete |
- Restarting a charge (
resume_subscription,resume_recurring_credits, turning on or raisingset_auto_reload) needs the person to accept the exact offer fromget_renewal_consent_offer. The agent shows its text word for word and passes itsofferFingerprintonly after the person agrees. Connecting the app is not that agreement. create_checkout_linkreturns a Stripe checkout page. Nothing is charged until the person pays there. A renewing purchase also needs the quoted terms accepted.create_capture,complete_capture_upload,run_capture_actionandask_capturesuse credits and need an idempotency key: MCPidempotency_key, HTTPIdempotency-Keyheader. A repeat returns the first result and charges once.- A capture reaches your vault only when the Obsidian plugin syncs it.
get_captureshowsdelivery.state: "verified"once the plugin confirmed the file; an agent cannot mark it delivered. get_license_keyreturns your existing plugin key, a full credential. Grantcredentials:readonly to an app you trust with it.request_account_deletionstarts the same permanent deletion as the dashboard. Notes in your vault stay. After it, every other tool answersACCOUNT_DELETION_PENDING.
Dashboard actions and their agent route
| Action | Agent route |
|---|---|
| Plan and renewal | See plan, renewal and payment status: get_plan, get_billing_preferences |
| Credits | See credits and cycle dates: get_balance |
| Usage | get_usage |
| License key | get_license_key |
| Cancel the plan | cancel_subscription |
| Resume the plan | get_renewal_consent_offer, then resume_subscription. The person accepts the renewal terms. |
| Recurring credit packs | Cancel or resume: cancel_recurring_credits, resume_recurring_credits. Resuming needs the person to accept the terms. |
| Auto-reload | On, off or a new limit: set_auto_reload. Turning on or raising the limit needs the person to accept the terms. |
| Buy plan or credits | quote_checkout, create_checkout_link, get_checkout_status. The person pays on Stripe's page. |
| Card and invoices | create_billing_portal_link. Browser only: card changes, invoices, billing details and plan switches are in Stripe's billing portal, which the person opens from this link. |
| Gifts | See: list_gifts |
| Gift code | Copy: get_gift_code |
| Send a gift | Send or resend: send_gift |
| Redeem a gift | redeem_gift |
| Product news | On or off: get_newsletter_preference, set_newsletter_preference |
| Browser sessions | See and sign out: list_sign_in_sessions, revoke_sign_in_session |
| Sign-in details | Browser only: email, password and Google sign-in changes are confirmed by the sign-in service with the person. |
| Delete the account | request_account_deletion, get_account_deletion_status |
| Captures | Read, send, process or delete: capture tools (above) |
| Saved in the vault | Plugin only: the Obsidian plugin writes the vault, so only its receipt counts. |
| Connect the plugin | Plugin only: started from the plugin, which holds the one-time verifier for that vault. |
| Disconnect an agent | In that app (see each app above). There is no list of connected apps yet. To cut off an app you can't reach, contact support. |
Still need help? Contact SystemSculpt.