What is MCP?
The Model Context Protocol (MCP) lets Claude connect to external tools and services. With the DemandBird MCP server connected, Claude can read your drafts, generate AI-written posts in your voice, schedule content, and manage your queue β all through natural conversation.
Setup
- Get your API tokenIn DemandBird, go to Settings β API Tokens and create a token. Copy it β you'll need it in the next step.

- Configure your Claude appFollow the Claude Desktop or Claude Code instructions below.
Claude Desktop
Open (or create) ~/Library/Application Support/Claude/claude_desktop_config.jsonand add the demandbird server under mcpServers:
{
"mcpServers": {
"demandbird": {
"type": "http",
"url": "https://app.demandbird.com/mcp",
"headers": {
"Authorization": "Bearer your-token-here"
}
}
}
}%APPDATA%\Claude\claude_desktop_config.json.Claude Code
This works for Claude Code in the terminal, VS Code, JetBrains, and the desktop app.
Run this command in your terminal:
claude mcp add --transport http demandbird https://app.demandbird.com/mcp \
--header "Authorization: Bearer your-token-here"Or add it manually to ~/.claude.json:
{
"mcpServers": {
"demandbird": {
"type": "http",
"url": "https://app.demandbird.com/mcp",
"headers": {
"Authorization": "Bearer your-token-here"
}
}
}
}Example prompts
Once connected, you can talk to DemandBird in plain English:
Done! Draft saved (post #124). Here's what I wrote: βWe just shipped something that's been...β
You have 3 drafts:
β’ Post #124: LinkedIn: βWe just shipped something...β
β’ Post #121: Twitter, Threads: βThe one thing I wish I knew...β
β’ Post #118: LinkedIn: βHot take on AI in marketing...β
Post #124 scheduled for 2026-03-03T09:00:00Z on LinkedIn.
Post #121 queued on Twitter and Threads.
Scheduled times:
β’ twitter: 2026-03-03T08:00:00Z
β’ threads: 2026-03-03T10:00:00Z
Tool reference
draft_post
| Parameter | Type | Description |
|---|---|---|
| promptrequired | string | What to write about. E.g., βa post about launching my new SaaS productβ |
| platformoptional | string | Target platform: linkedin, twitter, threads, bluesky, substack, reddit. Influences tone and length. |
save_draft
| Parameter | Type | Description |
|---|---|---|
| contentrequired | string | The post text to save. |
| platformsoptional | array of strings | Target platforms. Same values as draft_post. |
list_drafts
| Parameter | Type | Description |
|---|---|---|
| statusoptional | string | One of: draft, scheduled, posted, failed. Defaults to draft. |
| limitoptional | number | Max posts to return (default 20, max 100). |
get_post
| Parameter | Type | Description |
|---|---|---|
| idrequired | number | Post ID. |
delete_post
| Parameter | Type | Description |
|---|---|---|
| idrequired | number | Post ID to delete. |
schedule_post
| Parameter | Type | Description |
|---|---|---|
| idrequired | number | Post ID to schedule. |
| scheduled_atrequired | string (ISO 8601) | When to publish. E.g., 2026-03-10T09:00:00Z. Must be in the future. |
| platformsoptional | array of strings | Platforms to schedule on. If omitted, uses platforms already set on the post. |
queue_post
| Parameter | Type | Description |
|---|---|---|
| idrequired | number | Post ID to queue. |
| platformsoptional | array of strings | Platforms to queue for. If omitted, uses platforms already set on the post. |
Returns the exact scheduled time for each platform based on your posting queue. Use get_queue_slots first if you want to see available times before queueing.
get_queue_slots
| Parameter | Type | Description |
|---|---|---|
| platformsrequired | array of strings | Platforms to check. E.g., ["linkedin", "twitter"]. |