Table of Contents
A Threads MCP server lets Claude Code, Cursor, Codex or another agent like Muse or OpenClaw publish to your Threads account: text, photos, videos and carousels. With PublishQ it takes two steps. Connect Threads in PublishQ, then add the server to your agent:
claude mcp add --transport http publishq https://publishq.com/mcpApprove it in the browser, and "post this photo to Threads with the topic photography" works on the first try. When a post does get refused, it's almost always one of the six Threads rules further down, and each one has a one-line fix.

Two minutes of setup
- Connect your Threads account in PublishQ.
- Add the server to your client. Claude Code is the command above. Cursor takes
{"mcpServers": {"publishq": {"url": "https://publishq.com/mcp"}}}in~/.cursor/mcp.json. Codex takescodex mcp add publishq -- npx -y @publishq/mcp@latestafternpx @publishq/cli@latest login. - Ask your agent: "List my Threads accounts." If it answers with your handle, you're done.
Each client has its own page with prompts that suit it: Claude Code, Cursor and Codex.
What a post looks like
{
"content": "Shot this on the way home. Same lens, different light.",
"mediaIds": [
"dddd4444-eeee-5555-ffff-666677778888",
"eeee5555-ffff-6666-aaaa-777788889999"
],
"accounts": [
{
"accountId": "ffff6666-aaaa-7777-bbbb-888899990000",
"platformSpecificSettings": { "topicTag": "photography" }
}
],
"publishNow": true
}Two photos make it a carousel. A Threads carousel takes 2 to 20 items, and it can mix photos and videos. The only Threads-specific setting is topicTag.

The six Threads rules behind most refused posts
| What happened | Why | The fix |
|---|---|---|
| Text is too long | Threads allows 500 characters | Keep the long text for LinkedIn and give Threads a short version with postOverrides |
| Short text still too long | Emojis count as several characters (🚀 counts as 4) | Trim a few emojis, or count before you send |
| Topic tag refused | A topic is 1 to 50 characters with no . or & | Send nodejs, not node.js, and leave out the # |
| Carousel refused | A carousel needs at least 2 items | Send one item as a single photo or video post instead |
| Video refused | Threads takes videos up to 5 minutes and 1 GB | Trim it, or post the full cut to YouTube and a clip to Threads |
| Wrong link preview | Threads previews the first URL in the text | Put the link you want previewed first |
When Threads refuses a post, the error your agent gets back names the rule, so it can usually fix the post and try again by itself.
Posting the same thing to Threads and other platforms
Threads posts are often a short version of something you wrote elsewhere. Put your LinkedIn, X and Threads accounts in one publishq_create_post call and let postOverrides give each one its own text. One call, one entry in your calendar, three posts. The Threads scheduler shows them next to everything else you've queued, and the Threads post previewer shows how a post will look before it goes out.

For visual posts, the Threads carousel generator designs the slides, and the Instagram MCP guide shows how to post the same carousel to Instagram.
Reference
- Threads API guide: every field and limit
- Threads limits: the numbers on one page
- MCP docs: every tool the server gives your agent
Setup in Muse, OpenClaw and other agents
The six rules above apply in every agent. The setup for each one is on its own page:
| Agent | Guide |
|---|---|
| Muse | Threads from Muse |
| OpenClaw | Threads from OpenClaw |
| Hermes Agent | Threads from Hermes Agent |
| Manus | Threads from Manus |
| Kiro | Threads from Kiro |
| Gemini CLI | Threads from Gemini CLI |
| Claude Cowork | Threads from Claude Cowork |
For an agent that isn't listed, open publishq.com/agents and copy the line at the top of that page into your agent. It reads the page, sets itself up, and gives you a link to approve the login in your browser.
Create a PublishQ account, connect Threads, and ask your agent to list your accounts.
