Docs

Everything your agent needs to run the channel.

Post Ripple exposes one agent surface: an MCP server for clients that speak MCP, and the same 51 tools as plain HTTP endpoints for everything else. Both authenticate with a personal, scoped API key. Both are included on every paid plan.

The MCP server is a thin local process. It registers 51 tools, and each one is a single POST to the Post Ripple API — no state of its own, nothing cached, nothing to keep in sync. If your client can't run an MCP server, you lose nothing by calling the endpoints directly.

Keys are personal. A key acts as the member who created it, its membership is re-verified on every request, and it carries only the scopes you checked when you made it. Revoke it and every agent holding it loses access on the next call.

Quickstart

Connected in three steps

There's no SDK to install and no OAuth dance. One key, one config block, one question to confirm it worked.

1

Create a key

In Post Ripple, open Settings → API Keys and create one. Pick its scopes — publish is off unless you turn it on. The key is shown once, so paste it straight into your agent's config.

2

Paste one snippet

One line for Claude Code, one block for everything else. The server runs locally over stdio and reads your key from POSTRIPPLE_API_KEY. That's the whole configuration.

3

Ask your agent

Restart the client and try “What's in my Post Ripple workspace?” It calls whoami, and the call shows up in your audit log on the same API Keys page.

Client setup

Pick your client

The server is a local stdio process launched with npx, so any MCP client that can start one works. Swap pr_... for your key. There is no hosted endpoint to point at.

terminal

Claude Code

claude mcp add postripple \
  -e POSTRIPPLE_API_KEY=pr_... \
  -- npx -y @post-ripple/mcp@latest

Run it, then restart Claude Code.

claude_desktop_config.json

Claude Desktop

{
  "mcpServers": {
    "postripple": {
      "command": "npx",
      "args": ["-y", "@post-ripple/mcp@latest"],
      "env": { "POSTRIPPLE_API_KEY": "pr_..." }
    }
  }
}

Merge into the config, then quit and reopen the app.

.cursor/mcp.json

Cursor

{
  "mcpServers": {
    "postripple": {
      "command": "npx",
      "args": ["-y", "@post-ripple/mcp@latest"],
      "env": { "POSTRIPPLE_API_KEY": "pr_..." }
    }
  }
}

Project-local file, same shape. Reload the window.

~/.codex/config.toml

Codex

[mcp_servers.postripple]
command = "npx"
args = ["-y", "@post-ripple/mcp@latest"]
env = { POSTRIPPLE_API_KEY = "pr_..." }

Add the block, then restart Codex.

opencode.json

opencode

{
  "mcp": {
    "postripple": {
      "type": "local",
      "command": [
        "npx", "-y", "@post-ripple/mcp@latest"
      ],
      "environment": {
        "POSTRIPPLE_API_KEY": "pr_..."
      }
    }
  }
}

Merge into opencode.json, then restart opencode.

stdio server

Any MCP client

command: npx -y @post-ripple/mcp@latest
env:     POSTRIPPLE_API_KEY=pr_...

Register a local stdio server with this command and env.

One optional variable is worth knowing: POSTRIPPLE_ORG pins a default organization for keys that span several. A per-call organizationId always wins over it.

Scopes

You decide what a key can reach

Three scopes, checked independently when you create the key. A call outside a key's scopes fails with insufficient_scope — it doesn't partially run.

read

25 tools

List content, posts, accounts, and analytics

Everything an agent needs to answer questions about the workspace. Nothing it can call changes state.

content:write

20 tools

Create and organize videos, groups, and content

Creates content in your libraries. It can't put a post on an account or wire a rotation to one — that needs publish. It isn't inert, though: adding videos to a rotation that a publish-scoped key (or a human) already wired up re-rolls which videos that rotation will publish, and when.

publish

6 tools

Schedule and cancel posts to connected social accounts, and manage rotation-group schedules

Required for schedule_post, publish_slideshow, anything that edits a queued post, and update_group_schedule — which hands an account a rotation queue that publishes on its own. Unchecked by default when you create a key; opt in deliberately.

Organizations

Which workspace am I in?

A key is personal, not per-workspace, so it works in every organization you belong to unless you restricted it to one at creation. Start with whoami: it reports who the key acts as, its scopes, and the organizations it can work in.

After that there are three ways a call resolves a workspace. Pass organizationId explicitly, set POSTRIPPLE_ORG once as a default, or rely on the key having access to exactly one. If none of those apply, the call returns ambiguous_org rather than guessing which brand you meant.

claude — orienting a fresh key
> What's in my Post Ripple workspace?

⏺ postripple · whoami
  member: you · scopes: read, content:write
  organizations:
    org_7fa2…  My Brand
    org_c41b…  Second Brand

Common questions

Before you wire it up

What do I need to use the Post Ripple API?

A paid plan and an API key. Every paid plan includes Agent API and MCP access. Create a key under Settings → API Keys in Post Ripple, give it to your agent as POSTRIPPLE_API_KEY, and you're connected.

Do I have to use the MCP server?

No. The MCP server is a thin wrapper over a plain HTTP API — every tool is a POST to https://api.postripple.app/agent/v1/<tool> with a JSON body and a bearer token. Use the MCP server if your client speaks MCP; call the endpoints directly from a script or a backend if it doesn't.

Which MCP clients work?

Any client that can launch a local stdio MCP server. That includes Claude Code, Claude Desktop, Cursor, Codex, and opencode. There is no hosted or remote MCP endpoint — the server runs on your machine and talks to the API from there.

Can an agent post to my real accounts?

Putting a post on an account, or wiring a rotation to one, requires the publish scope, which is off by default: schedule_post and publish_slideshow for a specific piece of content, and update_group_schedule for standing up or re-pointing an auto-publishing rotation group. A content:write key can still add videos to a rotation someone already wired up — which re-rolls which videos that rotation will publish, and when. If your team has approval enabled, publish-scoped calls create in-review items instead of scheduling, and return submittedForReview: true — and rotation groups are unavailable entirely while approval is on.

What happens if I have more than one workspace?

Keys are personal, so one key works in every organization you belong to unless you restricted it at creation. Pass organizationId per call, or set POSTRIPPLE_ORG to pin a default. If a call is ambiguous, the API returns ambiguous_org and whoami lists your organizations.

Can I see what an agent did?

Yes. Every call is audit-logged and attributed to the member who created the key, and the log is visible in-app under Recent agent activity on the API Keys page. You can revoke a key there at any time, and agents using it lose access immediately.

How do I stop an agent from double-posting?

Pass an idempotencyKey on schedule_post and publish_slideshow. Any unique string works. A retry carrying the same key resolves to the same post instead of creating a second one.

Give your agent the keys.

Create a scoped key, paste one snippet, and ask it what's in your workspace. Every paid plan includes Agent API and MCP access.