SystemSculpt
Manage your SystemSculpt account, credits, billing and server-side captures over OAuth. No local vault access.
Hosted MCP Server
npx add-mcp 'https://systemsculpt.com/mcp'Installs into Claude Code, Codex, Cursor and more
Documentation
Connect an AI agent to your SystemSculpt account
Updated for SystemSculpt 6.18 · November 1, 2026
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.
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.
What leaves SystemSculpt The server reads and changes data on SystemSculpt's servers only. It cannot see your vault or files on your computer. Whatever a tool returns, including capture text, goes to the app you connected and that app's model provider. Capture processing and questions run through our server, a model-routing service and model providers, as in the iPhone app. See Privacy.
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) | Custom connector, Claude's client ID metadata document | Checked: sign-in, then the tool list at /mcp/claude |
| 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
Terminal
claude mcp add --transport http systemsculpt https://systemsculpt.com/mcp
Start 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.
An agent cannot finish this sign-in for you from inside Claude Code. claude mcp login stops with "stdin isn't a terminal", even with --no-browser, and claude -p has no /mcp. If you are that agent, add the server, then ask the person to start claude in the same folder and run /mcp. Do not script your own OAuth client: the device grant is not open to dynamically registered clients.
Codex
Terminal
codex mcp add systemsculpt --url https://systemsculpt.com/mcp
codex mcp login systemsculpt
Codex 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.
An agent cannot finish this sign-in for you from inside codex exec either. codex mcp login --no-browser prints the link, then exits as soon as it finds no terminal to read the pasted address from, so the browser ends on a failed 127.0.0.1 page after Allow. If you are that agent, add the server, then ask the person to run codex mcp login systemsculpt in a terminal on the machine with their browser.
opencode
opencode.json
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"systemsculpt": { "type": "remote", "url": "https://systemsculpt.com/mcp", "enabled": true }
}
}
Terminal, in that project
opencode mcp auth systemsculpt
opencode mcp list
Leave OAuth on (the default). Do not add an Authorization header.
Claude and Claude Desktop
In Claude, open Customize → Connectors → Add custom connector, name it SystemSculpt, enter https://systemsculpt.com/mcp/claude and choose Add, then Connect. Sign in and choose Allow. 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).
https://systemsculpt.com/mcp/claude is the address submitted to Claude's connector directory. It has the account, usage and capture tools, cancelling at period end, the newsletter choice and sign-in sessions. It leaves out checkout, resuming or starting recurring charges, auto-reload, the billing portal, gifts, the license key and account deletion: those stay on https://systemsculpt.com/mcp and the dashboard. https://systemsculpt.com/mcp also works in Claude as a custom connector with every tool.
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
~/.cursor/mcp.json
{
"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
.vscode/mcp.json
{
"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
~/.gemini/settings.json
{
"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.
Terminal
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.