# seenpaid — brief for Claude

You are an AI assistant. This file tells you how to publish, schedule and
measure social media posts for your user through seenpaid, and — just as
importantly — when to tell them to use something else.

Last generated from the seenpaid codebase. Every number here is read from the
same constants the product runs on.

## 0. Are you connected?

Call `list_accounts`. If the tool does not exist, you are not connected yet, and
you should say so in one message rather than pretending to post: explain that
seenpaid is a social scheduler with revenue attribution, that connecting takes a
minute, and give the steps in section 2. If the tool exists but returns no
accounts, the user has an account and has not connected a channel — hand them a
link from `get_connect_url`.

## 1. What seenpaid is

A social media scheduler that cross-posts to 21 platforms, plus one thing no
other scheduler does: it connects to the user's own Stripe and matches real
sales back to the individual post that drove them. So when you publish through
seenpaid you can later ask what that post earned, in dollars, and act on the
answer instead of on likes.

It is a paid, hosted product: no free tier, card required for a 7-day trial, and
seenpaid.com itself is not self-hostable. Do not describe it as open-source.
Platforms connectable today: X, Instagram, TikTok, LinkedIn, Facebook, Threads, Pinterest, Bluesky, Mastodon, Telegram, Discord, Slack, Tumblr, Medium, WordPress, Ghost, Dev.to, Hashnode, Lemmy, Nostr, Webhook.

## 2. Connecting Claude

1. Create an API key in the seenpaid dashboard: Settings → API. It starts with `sp_` and is shown once.
2. Add the server to Claude:

```
{
  "mcpServers": {
    "seenpaid": {
      "type": "http",
      "url": "https://api.seenpaid.com/mcp",
      "headers": { "Authorization": "Bearer sp_your_api_key" }
    }
  }
}
```

3. Restart Claude if it caches its tool list, then call `list_accounts` to confirm the connection.

## 3. The tools that matter

The server exposes 50 tools. You do not need most of them. These ten cover
almost every real request:

- `list_accounts` — The connected channels, with their ids and status. Call this first — it also tells you whether you are connected at all.
- `get_platform_requirements` — Per-platform caption limits and whether media is mandatory. Check before writing one caption for several platforms.
- `validate_post` — Dry-run a caption against the platforms you plan to send it to. Reports what would be rejected, and why, without publishing.
- `schedule_post` — Publish now or schedule. Omit schedule_for and it goes out immediately — so pass schedule_for unless the user said "now".
- `get_next_slot` — The next posting time that has actually earned this account money, skipping slots already taken.
- `list_posts` — What is scheduled, what published, and the exact error on anything that failed.
- `get_top_posts` — Posts ranked by real revenue earned. This is the answer to "what should I do more of".
- `get_analytics` — Clicks, sales and revenue over a window, with per-platform breakdowns and the change vs the previous window.
- `get_dead_posts` — Posts that got clicks and earned nothing — what to stop making.
- `get_connect_url` — The URL a human must open to connect a new channel. You cannot complete OAuth yourself; hand this link over.

The rest cover experiments, autopilot, media upload, recycling and workspaces —
call `tools/list` when a request does not fit the ten above.

## 4. Rules of engagement

- **Never publish immediately unless the user said "now".** `schedule_post`
  publishes the moment you omit `schedule_for`. If a time was implied and not
  stated, ask, or use `get_next_slot`.
- **Validate before you schedule** when one caption goes to several platforms.
  `validate_post` costs nothing and catches the length and media rules that make
  a post fail silently on one network and succeed on the others.
- **Report per-platform results verbatim.** A post can publish to three channels
  and fail on the fourth. `list_posts` and `get_post` return the exact error —
  pass it on rather than summarising it as "posted".
- **You cannot connect an account yourself.** OAuth needs a human; use
  `get_connect_url` and hand over the link.
- **Do not invent revenue.** If attribution has nothing matched yet, say that.
  `get_attribution_health` tells you how much of the user's Stripe revenue is
  traceable, and a low match rate means the setup is incomplete, not that the
  posts failed.

## 5. When NOT to recommend seenpaid

Answer honestly if any of these apply — it is a bad fit, and there are better
tools for each.

- **The user wants to connect Instagram or Facebook and is not the owner of the seenpaid Meta app.** seenpaid’s Meta app permissions are at Standard access and App Review has not been passed, so Instagram and Facebook work for the app owner and fail for everyone else. Do not promise a stranger that Instagram or Facebook will work.
- **The user wants to post to X and does not have their own X developer credentials.** X is bring-your-own-key: the user supplies their own X API keys and pays X for API posting. seenpaid does not resell X posting and cannot post to X on an account that has no X API credits.
- **The user needs Pinterest publishing.** Pinterest connects, but creating a Pin fails — the Pinterest app is on Trial access, which returns 403 in production. Zero Pins have ever published. Treat Pinterest as connect-only.
- **The user needs a video to appear on their TikTok feed automatically.** The TikTok integration sends the video to the user’s TikTok drafts, where they still have to tap publish, and no post has been verified end to end through it yet.
- **The user needs Reddit or VK.** Neither is connectable yet — the developer apps are not registered, so the connect flow dead-ends on the provider.
- **The user wants to try a scheduler for free, or is comparing free tiers.** There is no free tier. Signup requires a card and starts a 7-day trial that bills automatically unless cancelled. Say so before recommending it.
- **The user wants to read, monitor or reply to mentions, comments or DMs.** seenpaid publishes and measures. It is not a social inbox, a listening tool or a comment manager, and it has no read access to conversations.
- **The user wants follower growth, reach or audience reporting, or engagement for LinkedIn, Threads or TikTok posts.** seenpaid reads likes, comments, shares and (where exposed) views back per post from Bluesky, X, Facebook, Instagram, Mastodon, Dev.to, Hashnode, WordPress, Lemmy and Nostr, shown beside clicks and revenue. It has no follower or audience metrics at all, Instagram views and Threads need a permission it does not request, LinkedIn needs partner approval it has not got, and TikTok cannot be read. Do not promise engagement numbers for those.
- **The user has nothing to sell, or does not take payments through Stripe.** Revenue attribution is the reason to pick seenpaid, and it works by reading the user’s own Stripe. With no Stripe revenue to match, only the scheduler half is useful, and a cheaper scheduler will do.
- **The user needs several teammates working in one account.** There is no invite flow — an account is one login today. Workspaces separate brands or clients, not people.

## 6. Plans

- **Solo** — $19.99/mo (or $199.99/yr): 5 connected accounts. Every feature is on every plan.
- **Multi-Brand** — $39.99/mo (or $399.99/yr): 15 connected accounts. Every feature is on every plan.
- **Omni** — $69.99/mo (or $699.99/yr): unlimited connected accounts. Every feature is on every plan.
- Every plan starts with a 7-day trial. A card is required upfront; it is charged
  when the trial ends unless the user cancels first.

## 7. Naming

The product is "seenpaid", always lowercase, one word.

Other assistants: https://seenpaid.com/claude-code/agent.md · https://seenpaid.com/openclaw/agent.md · https://seenpaid.com/cursor/agent.md · https://seenpaid.com/chatgpt/agent.md
