Docs

The Postjam MCP server and API

Everything the dashboard does, as 66 tools an agent can call: import a post, edit it, schedule it and post it to every account you connected, or post the slides and reels the agent made itself.

Quickstart

Add the server to your agent, then ask it to call workspace_status. The first call opens a browser tab to sign in; after that the agent works on its own.

{
  "mcpServers": {
    "postjam": { "url": "https://mcp.postjam.app" }
  }
}
Claude Code
claude mcp add --transport http postjam https://mcp.postjam.app
Cursor
Paste the JSON above into .cursor/mcp.json
Codex
codex mcp add postjam --url https://mcp.postjam.app
Claude Desktop and claude.ai
Customize → Connectors → Add custom connector, paste the URL

Any other client: add a remote HTTP server at https://mcp.postjam.app, with no headers.

Endpoint

URL
https://mcp.postjam.app
Transport
Streamable HTTP (MCP), JSON-RPC 2.0 over POST
Sessions
None. Every request stands alone and carries its own token
Auth
OAuth 2.1 bearer token. No API keys
Timeout
300 seconds per call

Authentication

There is no API key to copy. A client gets a token the standard MCP way, and any client that implements MCP authorization does all of this for you:

  1. 1
    ChallengeA request without a token is a 401 whose WWW-Authenticate header names https://mcp.postjam.app/.well-known/oauth-protected-resource.
  2. 2
    DiscoveryThat document (RFC 9728) names the authorization server; its own discovery document lists the authorize, token and registration endpoints.
  3. 3
    RegistrationThe client registers itself with dynamic client registration. Nothing to create in a dashboard first.
  4. 4
    ConsentThe authorization-code flow with PKCE opens Postjam in the browser. The person signs in, or signs up, and approves the client by name.
  5. 5
    BearerThe token endpoint returns an access token and a refresh token. Every call carries the access token as Authorization: Bearer.

A token is a grant to one client from one person, and it acts as that person. Revoke it any time from Settings → Agents in the dashboard. A browser session token is refused here, even a valid one: only a token somebody consented to opens this door.

Calling the API

The API is the MCP endpoint itself, so you can call it without an agent. List the tools with tools/list and run one with tools/call:

curl https://mcp.postjam.app \
  -H "Authorization: Bearer $POSTJAM_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": { "name": "workspace_status", "arguments": {} }
  }'

Each tool answers in plain text written for an agent to read back to a person: what happened, and the link to see it. A refusal (credits short, an account missing) is an answer too, not an HTTP error, and says what to do next.

Workspaces

Every tool takes an optional workspace argument, an id from list_workspaces. Leave it out and the call goes to your usual workspace.

Prompts

Three prompts ship with the server. Claude Code offers them as slash commands.

start
Reads the workspace and proposes the one next step, then waits for your yes.
import <url>
Imports a TikTok post as a format, then proposes accounts and a schedule.
post <files>
Uploads slides or a reel the agent made, hands them in as an export, and proposes where and when to post it.

Your own slides or reel

An agent that drew a carousel with Pillow, cut a reel with ffmpeg or generated clips elsewhere does not need a format to post it. Three calls take a finished post from the agent's machine to any account you connected, as a one-off, now or at a time you name:

  1. 1
    Uploadprepare_upload names the files on the agent's machine and answers with one curl per file; finish_upload lands them in a gallery folder. Files already at a link go through upload_to_gallery instead.
  2. 2
    Hand increate_export names the gallery files in slide order with the caption and hashtags, and answers with an export and its page. 1 credit, the price of an export.
  3. 3
    Post or schedulepost_exports sends that export to the accounts you name: `when: "now"` for the next drain, or `when: "at"` with an ISO instant for later. Scheduling needs a plan; posting is free.

Images make a slideshow — a carousel on Instagram, Threads and Facebook, a photo post on TikTok — and one video makes a Reel, a Short or a TikTok. The platform's own limits apply when it is sent: Instagram takes 2 to 10 slides, Threads up to 20, TikTok up to 35. The export has a page like any other, stands on the calendar until its time, and can be brought forward or deleted there.

Tools

66 tools in 6 groups. Anything that sends something out (set_schedule, bind_accounts, post_exports) takes explicit accounts, days and times, and defaults to nothing.

Workspace10

workspace_status
What you have, and the next step.
list_workspaces
The workspaces the account belongs to.
billing
Plan, credits, and where to top up.
credit_balance
Credits left, and what an import and an export cost.
credit_history
What the credits went on.
list_accounts
Connected accounts and their numbers.
connect_account
Connect or reconnect one: a link, or a QR code in text.
connect_status
Whether the sign-in has landed.
choose_account
Which account, when a sign-in reached several.
calendar
Exports and planned posts by day.

Automations10

import_post
Turn a TikTok slideshow link into an automation.
import_status
How far the import has got.
retry_import
Run a failed import again.
create_format
Start from scratch.
list_formats
Every automation, by status.
get_format
Slots, text, music, sources, blockers.
rename_format
Rename it, or its slug.
duplicate_format
Copy it.
archive_format
Put it away, or bring it back.
delete_format
Delete it, history and all.

Studio23

list_folders
Your gallery folders and what they hold.
upload_to_gallery
Put generated clips and images into a gallery folder from their links.
prepare_upload
Upload files from your machine: one command per file.
finish_upload
Land them once the commands have run.
upload_status
Where each upload or import stands.
list_gallery
Browse and search the gallery.
create_folder
Make a folder.
rename_in_gallery
Rename a folder or file.
move_in_gallery
Move folders and files.
delete_from_gallery
Delete folders and files.
import_to_gallery
Import a Pinterest board, YouTube channel or TikTok sound.
add_slot
Add a slot.
remove_slot
Remove one.
reorder_slots
Put them in order.
update_slot
Source, background, zoom, sound, length.
set_slide_text
The lines on a slide: words, mode, band, style, width.
set_track_text
A line over the video.
remove_track_text
Take one off.
set_text_look
The format's text style and colour.
shuffle_background
Another background.
dislike_background
Never that one again.
set_stickers
Stickers on a slide.
set_music
Music from the gallery, and its range.

Schedule and accounts6

set_schedule
Days, times, timezone, and what it stops on.
set_schedule_stop
Only what it stops on.
clear_schedule
Switch it off.
bind_accounts
Where the automation posts.
set_caption
Caption mode and text.
set_hashtags
The tags.

Captions and queues7

list_upcoming
The next posts a schedule will make.
edit_upcoming
Write a caption or line for one, or the same for all.
rewrite_upcoming
AI rewrite of their captions.
unpin_upcoming
Back to the plan.
create_queue
A bulk schedule of finished videos, a caption each.
get_queue
Its videos, captions and what has posted.
save_queue
Change its videos, captions, hashtags or name.

Exports and posting10

export_format
Render one export.
run_status
How far a run has got.
list_exports
What an automation has made.
get_export
Status, legs, caption, files.
create_export
Your own slides or reel, from the gallery, as an export.
post_exports
Post exports to accounts you name, now or at a time.
post_now
Bring a scheduled export forward.
retry_post
Try a failed post again.
revert_run
Undo a run.
format_analytics
Views and likes per post.

Credits

The same credits as the dashboard. An import is 3 credits, an export is 1 whether Postjam rendered it or your agent handed it in, and posting it everywhere is free. A new account starts with 10. credit_balance and billing say what is left; when it runs short, the tool says so and hands back the link to top up.

What stays in the browser

The platform's own sign-in when connecting an account: connect_account hands back a single-use link, or the same as a QR code drawn in text, that any browser or phone opens, and connect_status says when it has landed. Choosing or changing a plan, TikTok's choice of who can see a direct post, and workspace settings stay in the dashboard; the tools that need them answer with the link. Everything else the dashboard does, a tool does. Everything an agent schedules shows on the format's Exports tab and the calendar before it goes out, where you can review it, post it early or pull it.

New here? Start with the MCP page.