MCP Server

DemandBird for Claude

Connect DemandBird to Claude Desktop or Claude Code and manage your social posts with plain English, no API calls needed.

← Also available: REST API Reference

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.

The DemandBird MCP server is hosted β€” no installation or Node.js required. MCP is available in Claude Desktop and Claude Code.

Setup

  1. Get your API token
    In DemandBird, go to Settings β†’ API Tokens and create a token. Copy it β€” you'll need it in the next step.The API Tokens page in DemandBird
  2. Configure your Claude app
    Follow 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"
      }
    }
  }
}
Restart Claude Desktop after saving β€” the server won't appear until you do. After restarting, you should see a DemandBird tool indicator in the toolbar when starting a new conversation.
On Windows, the config path is %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"
      }
    }
  }
}
Start a new session after adding the server β€” it won't be picked up in an existing conversation.

Example prompts

Once connected, you can talk to DemandBird in plain English:

YouWrite a LinkedIn post about our new feature launch and save it as a draft.
ClaudeI'll generate a LinkedIn post in your voice and save it as a draft... [uses draft_post]

Done! Draft saved (post #124). Here's what I wrote: β€œWe just shipped something that's been...”
YouShow me my current drafts.
Claude[uses list_drafts]

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...”
YouSchedule post 124 for LinkedIn at 9am tomorrow.
Claude[uses schedule_post]

Post #124 scheduled for 2026-03-03T09:00:00Z on LinkedIn.
YouAdd post 121 to the queue for Twitter and Threads.
Claude[uses queue_post]

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

draft_post
Generate an AI-written social post using your writing style and voice, then save it as a draft. Uses your stored comments and posts to match your tone.
ParameterTypeDescription
promptrequiredstringWhat to write about. E.g., β€œa post about launching my new SaaS product”
platformoptionalstringTarget platform: linkedin, twitter, threads, bluesky, substack, reddit. Influences tone and length.

save_draft

save_draft
Save a piece of content you've written as a draft: no AI generation involved.
ParameterTypeDescription
contentrequiredstringThe post text to save.
platformsoptionalarray of stringsTarget platforms. Same values as draft_post.

list_drafts

list_drafts
List your posts filtered by status. Returns post IDs, content previews, platforms, and schedule info.
ParameterTypeDescription
statusoptionalstringOne of: draft, scheduled, posted, failed. Defaults to draft.
limitoptionalnumberMax posts to return (default 20, max 100).

get_post

get_post
Fetch full details of a specific post by ID, including all schedule statuses per platform.
ParameterTypeDescription
idrequirednumberPost ID.

delete_post

delete_post
Permanently delete a draft post by ID. Cannot be undone.
ParameterTypeDescription
idrequirednumberPost ID to delete.

schedule_post

schedule_post
Schedule a draft for a specific date and time on one or more platforms.
ParameterTypeDescription
idrequirednumberPost ID to schedule.
scheduled_atrequiredstring (ISO 8601)When to publish. E.g., 2026-03-10T09:00:00Z. Must be in the future.
platformsoptionalarray of stringsPlatforms to schedule on. If omitted, uses platforms already set on the post.

queue_post

queue_post
Add a post to the next available time slot in your posting queue. Uses the schedule you've configured in DemandBird.
ParameterTypeDescription
idrequirednumberPost ID to queue.
platformsoptionalarray of stringsPlatforms 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

get_queue_slots
Check the next available queue slot for one or more platforms without scheduling anything.
ParameterTypeDescription
platformsrequiredarray of stringsPlatforms to check. E.g., ["linkedin", "twitter"].