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:
- 1ChallengeA request without a token is a 401 whose WWW-Authenticate header names https://mcp.postjam.app/.well-known/oauth-protected-resource.
- 2DiscoveryThat document (RFC 9728) names the authorization server; its own discovery document lists the authorize, token and registration endpoints.
- 3RegistrationThe client registers itself with dynamic client registration. Nothing to create in a dashboard first.
- 4ConsentThe authorization-code flow with PKCE opens Postjam in the browser. The person signs in, or signs up, and approves the client by name.
- 5BearerThe 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:
- 1Uploadprepare_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.
- 2Hand 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.
- 3Post 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.