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"
      }
    }
  }
}
Multiple accounts? Add an X-Account-Id header with your account ID to set a default account. You can find your account ID on the Settings page. If omitted, Claude will ask which account to use.
"headers": {
  "Authorization": "Bearer your-token-here",
  "X-Account-Id": "acct_your-account-id"
}
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"
      }
    }
  }
}
Multiple accounts? Add --header "X-Account-Id: acct_your-account-id" to set a default. If omitted, Claude will ask which account to use.
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

list_accounts

list_accounts
List all accounts you have access to. Shows account IDs, names, roles, and which one is currently selected.

No parameters required.

select_account

select_account
Switch to a different account for the current request. All subsequent tool calls in this conversation will use this account.
ParameterTypeDescription
account_idrequiredstringAccount prefix ID (e.g., acct_xxx) or numeric ID. Use list_accounts to find your IDs.

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. 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.

update_draft

update_draft
Revise an existing draft's content and/or platforms. Replaces the existing values.
ParameterTypeDescription
idrequirednumberPost ID to update.
contentoptionalstringNew post content. Replaces the existing text.
platformsoptionalarray of stringsUpdated target platforms. Replaces the existing selection.

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"].

list_connected_accounts

list_connected_accounts
List the social accounts connected to the current DemandBird account. Useful when a platform has more than one connected account (e.g. two Twitter logins) and you need the numeric id to target a specific one.
ParameterTypeDescription
platformoptionalstringFilter to a single platform. Same values as draft_post.

Use the returned ids with platform_account_ids on schedule_post or queue_post to post from a specific account.

request_review

request_review
Send a draft to one or more teammates for approval. Required reviewers block publishing until every one approves; optional reviewers are FYI. The post must already exist as a draft.
ParameterTypeDescription
post_idrequiredstringID of the draft to send for review.
reviewersrequiredarray of objectsEach reviewer needs either email (their email on this account) oruser_id. Set required: false to make a reviewer optional; defaults to true.
noteoptionalstringA message to include when notifying the reviewers.
scheduled_atoptionalstring (ISO 8601)Pre-schedule the post. It will auto-publish at this time if every required reviewer has approved by then.

list_posts_awaiting_my_review

list_posts_awaiting_my_review
List posts that teammates have asked the authenticated user to review. Returns posts with a pending review assigned to the user.
ParameterTypeDescription
limitoptionalnumberMax posts to return (1–100, default 20).

upload_image

upload_image
Get a presigned S3 upload URL for an image or video. Use this for files too large to pass inline. Returns a curl command to run plus an s3_key to reference on draft_post, save_draft, or update_draft.
ParameterTypeDescription
filenamerequiredstringOriginal filename (e.g. photo.jpg).
content_typeoptionalstringMIME type. Inferred from the filename extension if omitted. Supports images (JPEG, PNG, GIF, WebP) and videos (MP4, MOV, AVI, WebM, MKV).