PublishQPublishQ

MCP Server

Run the PublishQ MCP server so any MCP client can list your connected accounts, upload media, and schedule posts across your social platforms.

Add PublishQ to your MCP client, and the assistant you already talk to can draft, schedule and publish to the accounts you have connected, and tell you what is queued. Any Model Context Protocol client works; the only thing that changes between them is which file the configuration goes in.

Install

There is nothing to install ahead of time. Every client below launches it with npx, which fetches the package on first run.

You need an API key. Create one under Settings → API Keys; it starts with pq_live_. The key's scopes decide what the agent can do, so a key that may write posts does not have to be a key that may create workspaces.

Configure your client

Add this to claude_desktop_config.json, then restart the app:

{
  "mcpServers": {
    "publishq": {
      "command": "npx",
      "args": ["-y", "@publishq/mcp"],
      "env": { "PUBLISHQ_API_KEY": "pq_live_your_key_here" }
    }
  }
}
claude mcp add publishq \
  --env PUBLISHQ_API_KEY=pq_live_your_key_here \
  -- npx -y @publishq/mcp

Add --scope project to write it into a .mcp.json the rest of the team shares.

codex mcp add publishq \
  --env PUBLISHQ_API_KEY=pq_live_your_key_here \
  -- npx -y @publishq/mcp

Codex stores it as TOML in ~/.codex/config.toml, under [mcp_servers.publishq].

Add this to ~/.cursor/mcp.json for every project, or .cursor/mcp.json for one:

{
  "mcpServers": {
    "publishq": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@publishq/mcp"],
      "env": { "PUBLISHQ_API_KEY": "pq_live_your_key_here" }
    }
  }
}
openclaw mcp add publishq \
  --command npx \
  --arg -y \
  --arg @publishq/mcp \
  --env PUBLISHQ_API_KEY=pq_live_your_key_here

openclaw mcp doctor publishq --probe

Any other MCP client works the same way: run npx -y @publishq/mcp with PUBLISHQ_API_KEY in its environment.

Configuration

VariableRequiredDescription
PUBLISHQ_API_KEYYesYour API key (pq_live_...).
PUBLISHQ_API_URLNoOverride the API base URL. Defaults to https://publishq.com/api/v1.

Tools

ToolWhat it does
publishq_list_postsList posts, paginated
publishq_get_postGet one post by ID
publishq_create_postCreate a draft, scheduled, or immediate post
publishq_update_postChange content, media, or schedule
publishq_delete_postDelete a post
publishq_remove_post_accountRemove one account's delivery from a post
publishq_list_accountsList connected social accounts
publishq_get_tiktok_creator_infoRead TikTok privacy options before posting
publishq_list_mediaList media in the library
publishq_get_mediaGet one media item
publishq_upload_mediaUpload a local file
publishq_list_workspacesList workspaces
publishq_get_workspaceGet one workspace
publishq_create_workspaceCreate a workspace

Send what you want

The server forwards the agent's arguments as they are, including fields it does not recognise, so any error you see is the API's own.

Keeping an agent inside bounds

  • Filter the tools. Most clients can hide individual tools. Exposing publishq_list_accounts and publishq_create_post and nothing else gives you an agent that can write posts and cannot delete them.
  • Ask for drafts and schedules. Publishing is a field on the create call, not a separate tool: a post with no scheduledAt and no publishNow is a draft that waits for you, and a scheduled post can be edited or cancelled until it fires. That, plus your client's approval prompt, is what keeps an unattended run off your accounts.
  • Scope the key. Scopes turn a whole resource on or off. posts:write covers creating, updating, deleting and publishing, so a key without it cannot draft either — useful for an agent that only needs to read.

On this page