MCP server

Use SelfScale from your AI assistant

Connect Claude, Cursor, VS Code and other AI tools to SelfScale, so they can read your voice, brand, analytics, competitors, trends and drafts while you work.

On this page

What it is

MCP (the Model Context Protocol) is the standard way AI assistants connect to other apps. Once you add SelfScale, you can ask your assistant things like “what did my best LinkedIn posts this month have in common?” or “which of my competitors had a breakout video this week?” and it answers from your real SelfScale data.

It works with any MCP client that can send a header with your key, including Claude Code, Claude Desktop, Cursor and VS Code. Every tool is read-only: it looks things up and never posts, edits, deletes or spends credits.

Server URLhttps://selfscale.app/api/mcp
TransportStreamable HTTP
AuthPersonal API key: Authorization: Bearer ss_live_...

Which plans include it

The MCP server comes with Premium and Power.

PlanMCP calls per day
StandardNot included
Premium25 calls per day
Power25 calls per day
Pro (existing subscribers)5 calls per day

First-cohort members get the Premium allowance. Change your plan in Settings › Billing.

Create a key

  1. Open SelfScale and go to Settings › Developer.
  2. Create a key, give it a name you'll recognize, like “Claude on my laptop”, and choose when it expires: 30 days, 90 days (the default) or a year.
  3. Copy the key. It starts with ss_live_ and is shown only once. If you lose it, revoke it and create a new one.

You can have up to 5 active keys. Use a separate key for each app or computer, so you can revoke one without breaking the others.

Set up your client

In each snippet, replace ss_live_your_key_here with your key, or set it in an environment variable where the client supports one.

Claude Code

Run this in your terminal:

Terminal
claude mcp add --transport http selfscale https://selfscale.app/api/mcp \
  --header "Authorization: Bearer ss_live_your_key_here"

Add --scope user to use SelfScale in every project, not just the current one. Then run /mcp inside Claude Code to check it's connected. To share the setup with a project without committing your key, put this in .mcp.json and set SELFSCALE_API_KEY in your shell:

.mcp.json
{
  "mcpServers": {
    "selfscale": {
      "type": "http",
      "url": "https://selfscale.app/api/mcp",
      "headers": {
        "Authorization": "Bearer ${SELFSCALE_API_KEY}"
      }
    }
  }
}

Claude Desktop

Go to Settings › Connectors › Add custom connector and enter the server URL. If the dialog shows a Request headers section, add Authorization with the value Bearer followed by your key. Anthropic is still rolling that section out, so not every account has it yet.

If you don't see it, connect through the mcp-remote bridge instead (needs Node.js). Open Settings › Developer › Edit Config and add:

claude_desktop_config.json
{
  "mcpServers": {
    "selfscale": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://selfscale.app/api/mcp",
        "--header",
        "Authorization:${AUTH_HEADER}"
      ],
      "env": {
        "AUTH_HEADER": "Bearer ss_live_your_key_here"
      }
    }
  }
}

Keep the key in env as shown: some systems split arguments at spaces. Restart Claude Desktop afterwards.

Cursor

Add this to ~/.cursor/mcp.json (every project) or .cursor/mcp.json (one project), and set SELFSCALE_API_KEY in your environment:

mcp.json
{
  "mcpServers": {
    "selfscale": {
      "url": "https://selfscale.app/api/mcp",
      "headers": {
        "Authorization": "Bearer ${env:SELFSCALE_API_KEY}"
      }
    }
  }
}

VS Code

Add this to .vscode/mcp.json in your workspace, or run MCP: Open User Configuration to add it for every workspace. VS Code asks for the key the first time the server starts and stores it securely.

.vscode/mcp.json
{
  "inputs": [
    {
      "type": "promptString",
      "id": "selfscale-key",
      "description": "SelfScale API key",
      "password": true
    }
  ],
  "servers": {
    "selfscale": {
      "type": "http",
      "url": "https://selfscale.app/api/mcp",
      "headers": {
        "Authorization": "Bearer ${input:selfscale-key}"
      }
    }
  }
}

ChatGPT

ChatGPT connects to MCP servers through developer mode, which is in beta for some plans. Its connector form signs in with OAuth and has no field for a personal key, so SelfScale can't be added to ChatGPT yet. It will work once sign-in arrives (see Coming soon).

Other clients

Any MCP client that supports Streamable HTTP and custom headers works: point it at https://selfscale.app/api/mcp and send Authorization: Bearer with your key. To call the server from your own code, see the API docs.

Tools reference

Every tool below is read-only and costs no credits. Your assistant picks the right tool from your question, so you rarely need to name one. Tools that call AI or use credits aren't available with a personal key.

Your SelfScale workspace

Read what SelfScale knows about you: your voice, your brand, your numbers, your competitors, trends and drafts.

get_voice_profileRead-only

Get my voice profile

Your SelfScale voice profile: the rules your writing follows, your signature phrases, words you avoid, and your tone settings. Use it to write in your voice.

No arguments.

Try asking: “Read my SelfScale voice profile, then rewrite this intro so it sounds like me.”

Example response
Response
{
  "success": true,
  "hasProfile": true,
  "profile": {
    "name": "My voice",
    "active": true,
    "version": 3,
    "updatedAt": "2026-10-02T12:00:00.000Z"
  },
  "voice": {
    "learned": true,
    "rules": [
      "Short sentences.",
      "Open with a concrete number."
    ],
    "signaturePhrases": [
      "Here's the thing"
    ],
    "avoidedWords": [
      "leverage",
      "synergy"
    ]
  },
  "tone": {
    "...": "your tone settings"
  },
  "toneOmitted": false
}
get_brand_kitRead-only

Get my brand kit

Your SelfScale brand kit: your brand rules, words you never say, who you sound like, your fonts and your visual styles.

Needs the Brand & Business page to be available on your account.

No arguments.

Try asking: “Check this caption against my brand kit and flag anything off-brand.”

Example response
Response
{
  "success": true,
  "hasKit": true,
  "profileName": "My voice",
  "rules": [
    "Always plain English."
  ],
  "neverSay": [
    "game-changer"
  ],
  "soundsLike": [
    "A friendly operator, not a guru."
  ],
  "typography": {
    "...": "your fonts"
  },
  "visualStyles": [
    {
      "title": "Clean desk",
      "body": "..."
    }
  ],
  "updatedAt": "2026-10-01T09:00:00.000Z"
}
get_channel_analyticsRead-only

Get my channel analytics

Your channel analytics from SelfScale: connection status, post count and totals (likes, comments, shares, views) for the last 30 days, and your latest follower count, per channel.

Needs Full Analytics on your plan.

ArgumentTypeRequiredDescription
channel"linkedin" | "x" | "instagram" | "threads" | "tiktok" | "skool"NoOne channel. Leave out for every channel.

Try asking: “How are my channels doing this month?”

Example response
Response
{
  "success": true,
  "channels": [
    {
      "channel": "linkedin",
      "connection": {
        "connected": true,
        "account": "yourhandle",
        "via": "oauth",
        "expiresAt": "2026-12-01T00:00:00.000Z"
      },
      "stats": {
        "windowDays": 30,
        "posts": 12,
        "truncated": false,
        "likes": 840,
        "comments": 96,
        "shares": 41,
        "views": 21500,
        "followers": 4210,
        "countCapturedAt": "2026-10-09T06:00:00.000Z"
      }
    }
  ]
}
list_top_postsRead-only

List my top posts

Your best-performing posts from SelfScale's stored analytics, ranked by engagement, views, likes or comments over the period you choose.

Needs Full Analytics on your plan.

ArgumentTypeRequiredDescription
channelstringNoOne channel (linkedin, x, instagram, threads, tiktok, skool). Leave out for every channel.
daysinteger 1-90NoHow many days back to look (default 30)
sortBy"engagement" | "views" | "likes" | "comments"Noengagement is likes + comments + shares (default)
limitinteger 1-20NoHow many posts to return (default 10)

Try asking: “What were my five best posts by views in the last 90 days, and what do they have in common?”

Example response
Response
{
  "success": true,
  "days": 90,
  "sortBy": "views",
  "scanned": 64,
  "posts": [
    {
      "channel": "linkedin",
      "title": "...",
      "url": "https://...",
      "publishedAt": "2026-09-14T15:00:00.000Z",
      "contentType": "text",
      "likes": 410,
      "comments": 52,
      "shares": 19,
      "views": 18200,
      "score": 18200
    }
  ]
}
list_competitorsRead-only

List my competitors

The creators you track on SelfScale's Competitors page, with their follower counts, last upload and best recent video. Numbers are stored observations; nothing is estimated.

Lists the creators you follow on the Competitors page, up to 50. A creator you just followed appears after you open that page once.

ArgumentTypeRequiredDescription
list"competitor" | "adjacent" | "all"Nocompetitor (default), adjacent (near your niche) or all

Try asking: “Who am I tracking, and who posted most recently?”

Example response
Response
{
  "success": true,
  "updatedAt": "2026-10-10T08:00:00.000Z",
  "total": 6,
  "creators": [
    {
      "name": "Creator name",
      "platform": "youtube",
      "list": "competitor",
      "profileUrl": "https://www.youtube.com/@...",
      "pinned": false,
      "followers": 182000,
      "followersHidden": false,
      "followersRounded": true,
      "niche": "...",
      "statsStatus": "ok",
      "lastUploadAt": "2026-10-08T17:00:00.000Z",
      "checkedAt": "2026-10-10T08:00:00.000Z",
      "tracked": null,
      "best": {
        "title": "...",
        "url": "https://...",
        "publishedAt": "...",
        "isShort": false,
        "views": 410000,
        "likes": 12000,
        "comments": 800,
        "multiplier": 3.4
      }
    }
  ]
}
get_competitor_outliersRead-only

Get competitor outliers

Recent videos (the last two weeks) from the creators you track that beat that creator's normal views, ranked by how many times their median views they got.

ArgumentTypeRequiredDescription
minMultipliernumber 1.5-50NoOnly videos with at least this many times the channel's normal views (default 2)
limitinteger 1-20NoHow many outliers to return (default 10)

Try asking: “Which competitor videos broke out recently, and what hooks did they use?”

Example response
Response
{
  "success": true,
  "windowDays": 14,
  "minMultiplier": 3,
  "updatedAt": "2026-10-10T08:00:00.000Z",
  "outliers": [
    {
      "creator": "Creator name",
      "list": "competitor",
      "title": "...",
      "url": "https://...",
      "publishedAt": "...",
      "isShort": true,
      "views": 920000,
      "likes": 41000,
      "comments": 1300,
      "multiplier": 6.1,
      "baselineMedian": 151000,
      "baselineSize": 20
    }
  ]
}
list_draftsRead-only

List my drafts

Your saved SelfScale posts and drafts, newest first, optionally filtered by status.

ArgumentTypeRequiredDescription
status"planned" | "drafted" | "approved" | "scheduled" | "published" | "exported"NoOnly this status (default every status)
limitinteger 1-25NoHow many to return, newest first (default 10)

Try asking: “Show me the drafts I haven't approved yet.”

Example response
Response
{
  "success": true,
  "status": "drafted",
  "drafts": [
    {
      "id": "6f1c...",
      "status": "drafted",
      "channel": "linkedin",
      "title": "...",
      "text": "...",
      "truncated": false,
      "createdAt": "2026-10-09T10:00:00.000Z",
      "updatedAt": "2026-10-09T10:05:00.000Z"
    }
  ]
}
get_credits_balanceRead-only

Get my credits balance

Your SelfScale credits: how many you have left, this month's allowance and when it renews.

No arguments.

Try asking: “How many SelfScale credits do I have left this month?”

Example response
Response
{
  "success": true,
  "plan": {
    "id": "ultimate",
    "name": "Premium"
  },
  "creditsRemaining": 212,
  "monthly": {
    "allocated": 300,
    "rollover": 0,
    "used": 88
  },
  "topUpCredits": 0,
  "periodEndsAt": "2026-11-01T00:00:00.000Z"
}

Limits

LimitValue
Requests per minute, per key60
Calls per day, Premium25
Calls per day, Power25
Calls per day, Pro (existing subscribers)5
Messages per request1 (batches are refused)
Active keys per account5

Daily calls reset at midnight UTC and are shared by all your keys. Every request counts, including the one your client makes to list tools when it connects. Responses carry X-MCP-Limit, X-MCP-Used and X-MCP-Remaining headers.

Errors

Request errors

StatusWhenWhat to do
400The body was a JSON-RPC batch (an array of messages).Send one message per request.
401The Authorization header is missing, or the key is wrong, revoked or expired.Check the header reads Bearer followed by your full key, or create a new key.
403Your plan doesn't include MCP, or the request came from a browser origin that isn't allowed.MCP comes with Premium and Power. Browser pages can't call it; call from a server, script or desktop app.
406The Accept header doesn't list both application/json and text/event-stream.Send Accept: application/json, text/event-stream.
413The request body is larger than 256 KB.Send smaller arguments.
429You went over 60 requests a minute, or your plan's calls for the day.Wait for Retry-After or the daily reset (resetAt), then retry.
503SelfScale couldn't check your key, plan or usage just then, or MCP is paused. Nothing was run.Retry after the seconds in Retry-After.

Tool errors

When a tool can't finish, your assistant gets isError: true with a code and a message it can read to you.

CodeMeaning
INVALID_INPUTAn argument is missing, the wrong type, out of range or too long. The message says which. Arguments that don't match the schema come back as "Invalid input" with details.
UNAUTHORIZEDYour key or plan can't use this tool (the analytics tools need Full Analytics), or a connected app rejected SelfScale's stored connection. The message says which; for a connected app, reconnect it on the Integrations page.
NOT_FOUNDThe thing you asked for doesn't exist, or the feature isn't available on your account yet.
RATE_LIMITEDA connected app (or that tool's own limit) asked to slow down. Try again later.
UNAVAILABLEYour data couldn't be read just then. Nothing changed; try again.

Security

  • Keys are shown once. SelfScale stores only a hash of each key, so nobody, including us, can show it to you again.
  • Revoke anytime. Revoking a key in Settings › Developer stops it on the next request. Revoke a key straight away if it leaks. Every key also expires on the date you picked, at most a year after you made it.
  • Scopes. Each key holds scopes that decide what it can do. Personal keys hold the read scope only, so they can read your data but can't post, edit, delete or spend credits.
  • Your data only. A key reads only your own account, and the apps you connected yourself.
  • Not for browsers. The server refuses requests from web pages on other sites, so a key can't be used from someone else's website. Keep keys out of front-end code and public repos.

Troubleshooting

My client says it can't connect, or shows 401 Unauthorized.

Check the header is exactly Authorization: Bearer ss_live_..., with one space after Bearer and the whole key. Check the key wasn't revoked in Settings › Developer. When in doubt, create a new key.

I get 403 and a message about my plan.

The MCP server comes with Premium and Power. Change your plan in Settings › Billing, then try again.

A tool I expected isn't listed.

A personal key reaches the tools listed on this page. Tools that use credits aren't available with a personal key.

A tool says NOT_FOUND.

That feature isn't available on your account yet.

I get 429 Too Many Requests.

You went over 60 requests a minute, or used your calls for the day. Wait a minute, or until midnight UTC for the daily reset.

Claude Desktop has no Request headers option.

Use the mcp-remote setup under Claude Desktop. It needs Node.js installed.

curl returns 406 Not Acceptable.

Add -H "Accept: application/json, text/event-stream". The server needs both.

I get 503 Service Unavailable.

SelfScale couldn't check your key or usage just then, so nothing ran. Wait the seconds in Retry-After and try again.

Coming soon

  • SoonSign in from Claude's connector directory (OAuth). Add SelfScale with one click and sign in, no key to copy.
  • SoonWrite tools. Ask your assistant to write a draft, and it lands in your SelfScale approval queue for you to review. Nothing goes out without your approval.
Questions or requests? Email support@selfscale.app.