Claude & ChatGPT

DemandBird for Claude and ChatGPT

Write, schedule, and check on your posts just by chatting with Claude or ChatGPT.

Business

Using DemandBird in Claude and ChatGPT is available on the Business and Agency plans. See plans & what's included.

Step 1

Connect your app in two minutes

Pick the app you use and follow its steps. There's no code, and you'll sign in to DemandBird once.

Claude
Add a custom connector
  1. Open Claude's Connectors settings. In the app, click your name, then Settings, then Connectors.
  2. Click Add custom connector.
  3. For the name, type DemandBird. For the URL, paste this:https://app.demandbird.com/mcp
  4. Click Add. Then click Connect next to DemandBird.
  5. Sign in to DemandBird in the window that opens and click Allow.
  6. Start a new chat and ask: “Show me my DemandBird drafts.”If it lists your drafts, you're all set.

Works in Claude on the web, desktop, and phone once added. On a Team or Enterprise plan, an owner may need to add the connector first.

ChatGPT
Add DemandBird as an app
  1. Go to chatgpt.com on a computer. Click your name, then Settings, then Apps.
  2. Open Advanced settings and turn on Developer mode.
  3. Click Create app. For the name, type DemandBird. For the MCP server URL, paste this:https://app.demandbird.com/mcp
  4. Set Authentication to OAuth, tick the box to confirm you trust it, and click Create.
  5. Sign in to DemandBird in the window that opens and click Allow.
  6. In a new chat, click +, choose DemandBird, and ask: “Show me my DemandBird drafts.”If it lists your drafts, you're all set.

Needs a paid ChatGPT plan (Plus, Pro, Business, or Enterprise). On Business and Enterprise, an admin may need to turn on Developer mode for you.

Stuck? Contact us and we'll walk you through it. Developer? See developer setup.

Step 2

Start asking

Talk to Claude or ChatGPT the way you'd talk to a teammate. Saying “in DemandBird” helps the first time.

Write
  • “Write a LinkedIn post about our new feature and save it as a draft.”
  • “Make draft 124 shorter and less salesy.”
  • “Turn post 124 into a version for X.”
Schedule
  • “Schedule post 124 for LinkedIn at 9am tomorrow.”
  • “Add post 121 to my queue.”
  • “Add a 9am LinkedIn posting time on weekdays.”
Check results
  • “How did my LinkedIn do this month?”
  • “What was my best post in the last 90 days?”
  • “When should I post on LinkedIn?”
Team and ideas
  • “Send draft 124 to Alex for review.”
  • “What's waiting for my approval?”
  • “Save these five ideas to DemandBird.”

Good to know

  • Nothing goes out without you. When you ask to publish a post, approve one, or invite someone, DemandBird sends back a link. You open it, check, and press the button yourself.
  • Drafts sound like you. When Claude writes a post with DemandBird, it uses the voice DemandBird learned from your posts and your workspace's brand.
  • Agencies can switch clients. Say “switch to Acme” to work in another client's workspace, or ask “which DemandBird workspace am I in?”
  • It uses your monthly AI allowance. Writing posts and making images count the same as they do in the app.

Troubleshooting

Claude or ChatGPT ignores DemandBird
Start a new chat and mention DemandBird in your request. In Claude, click the + button under the message box and check that DemandBird is turned on. In ChatGPT, click + and choose DemandBird before you send your message.
I can't find “Add custom connector” or “Developer mode”
On a Claude Team or Enterprise plan, an owner has to add the connector for the organization first. In ChatGPT, Developer mode needs a paid plan, and on Business or Enterprise an admin may have to turn it on.
It connected to the wrong DemandBird account
Remove DemandBird in your Claude or ChatGPT settings and add it again. When the DemandBird window opens, sign in with the login you use for that account. If you have more than one account, you can also just ask: “List my DemandBird accounts” and “Switch to [name].”
It says I don't have access
The MCP server is part of the Business and Agency plans. See pricing, or contact us if you think your plan should include it.

Technical details

You don't need anything below to use DemandBird in Claude or ChatGPT. It's here for developers. Building your own integration? See the REST API reference.

Note for AI assistants: you can't install this connector from a chat. Walk the user through the Claude or ChatGPT steps at the top of this page, one step at a time, and wait for them to finish each one. The server URL is https://app.demandbird.com/mcp and sign-in is OAuth, so no API token is needed. Don't tell them to edit claude_desktop_config.json; that file can't connect to this server.

Developer setupClaude Code, Cursor, VS Code, and other MCP apps. Sign-in, API tokens, and config.

The server is hosted at https://app.demandbird.com/mcp (Streamable HTTP), so there is nothing to install. Clients can sign in with OAuth: the server supports discovery and dynamic client registration, and answers an unsigned request with a 401 that points to its metadata. Where a browser sign-in isn't possible, send an API token as Authorization: Bearer <token>. Create one at Settings → API Tokens (what to scope it to).

Claude Code

Works in the terminal, VS Code, JetBrains, and the desktop app. Add the server:

claude mcp add --transport http demandbird https://app.demandbird.com/mcp

Then run /mcp inside Claude Code, pick demandbird, and sign in when the browser opens.

To use an API token instead (for example on a server with no browser):

claude mcp add --transport http demandbird https://app.demandbird.com/mcp \
  --header "Authorization: Bearer your-token-here"

Or add it by hand to ~/.claude.json:

{
  "mcpServers": {
    "demandbird": {
      "type": "http",
      "url": "https://app.demandbird.com/mcp",
      "headers": {
        "Authorization": "Bearer your-token-here"
      }
    }
  }
}
Multiple accounts? With a token, add --header "X-Account-Id: acct_your-account-id" to set a default. Your account ID is on the Settings page. Without it, Claude asks which account to use, or you can say “switch to [account].”
Start a new session after adding the server. An open conversation won't pick it up.

Claude Desktop

Use the Claude steps in Quick setup. Connectors you add on claude.ai show up in the desktop app too. Don't add DemandBird to claude_desktop_config.json: that file only starts programs on your computer, so it can't reach a hosted server.

Other MCP apps

Cursor, VS Code, Windsurf, and other MCP apps can connect the same way. Give them the URL and let them sign in with OAuth, or pass the token as a header. The exact file and key names vary by app; this is the common shape:

{
  "mcpServers": {
    "demandbird": {
      "url": "https://app.demandbird.com/mcp",
      "headers": {
        "Authorization": "Bearer your-token-here"
      }
    }
  }
}
Tool referenceAll 55 tools the server offers, with every parameter. For developers and for AI assistants deciding what to call.

Accounts and workspaces

list_accounts

list_accounts
List every account you can use, with its id and which one is selected now.

No parameters required.

select_account

select_account
Switch to a different account. Every later tool call in the conversation uses it.
ParameterTypeDescription
account_idrequiredstringAccount id (like acct_xxx) or numeric id. Use list_accounts to find it.

list_workspaces

list_workspaces
List the workspaces (clients) on the account and which one is active. An agency has one workspace per client, each with its own drafts, channels, brand and analytics.

No parameters required.

select_workspace

select_workspace
Switch to another workspace, like “switch to Acme.” The choice sticks until it is changed again.
ParameterTypeDescription
workspacerequiredstringWorkspace name (like Acme) or numeric id, from list_workspaces.

move_post

move_post
Move a draft to another workspace, for a post saved under the wrong client. Finds the post in any workspace. Its tags are matched by name (or created) in the new workspace, and its author and reviewers get access there if they didn't have it. Moving it back undoes it.
ParameterTypeDescription
post_idrequiredstringId of the post to move.
workspacerequiredstringWhere to move it, by name or id, from list_workspaces.

Account admins only. Only drafts move, so cancel a scheduled post first with cancel_post. A post set to go out on a channel the new workspace doesn't have is refused.

list_connected_accounts

list_connected_accounts
List the social accounts connected to this workspace. Use it to get the numeric id when a platform has more than one account (two LinkedIn profiles, or a profile and a company page).
ParameterTypeDescription
platformoptionalstringOnly show one platform: linkedin, twitter, threads, bluesky, substack, youtube, facebook or instagram.

Pass the ids as platform_account_ids on save_draft, schedule_post, queue_post or publish_post.

get_status

get_status
Quick counts: drafts, scheduled posts, posts out today, and whether the queue is paused. No analytics.

No parameters required.

Writing posts

Each plan includes a monthly AI allowance: 90 drafts, 60 rewrites, 100 post ideas, and 2 voice re-trainings on Pro; 140 drafts, 110 rewrites, 200 ideas, and 4 re-trainings on Business; 450 drafts, 340 rewrites, 500 ideas, and 10 re-trainings on Agency. Plans & what's included.

draft_post

draft_post
Write a post with AI in your voice and your workspace's brand, then save it as a draft. Use it when you ask Claude to write something for you.
ParameterTypeDescription
promptrequiredstringWhat to write about, like “a post about launching my new SaaS product.”
platformoptionalstringTarget platform: linkedin, twitter, threads, bluesky, substack, youtube, facebook or instagram. Changes tone and length. Instagram needs an image or video attached.
draft_anywayoptionalbooleanSet true to write with what it has when it would otherwise ask for more context.
imagesoptionalarray of objectsImages, a video, or one PDF to attach. For anything bigger than a thumbnail, call upload_image first and pass the s3_key it returns, like [{ s3_key: "..." }]. A PDF posts as a LinkedIn document (a swipeable carousel): LinkedIn only, one per post, and never alongside images or video.
youtubeoptionalobjectYouTube options: { title?, privacy_status?, thumbnail_url? }. title is up to 100 characters and comes from the first line if left out. privacy_status is public (the default), unlisted or private. A video must be attached before the post can be scheduled or published.

Each call uses one AI draft from your monthly allowance.

tailor_draft

tailor_draft
Rewrite a draft for another platform, in your voice, like “make post 123 work on X.”
ParameterTypeDescription
idrequirednumberPost id to rewrite.
platformrequiredstringTarget platform: linkedin, twitter, threads, bluesky, substack, youtube, facebook or instagram.
save_asoptionalstringchannel_copy saves the rewrite on the same post as that channel's own text. new_draft (the default) saves it as a separate draft.

draft_variations

draft_variations
Show three other versions of a draft to read. Saves nothing.
ParameterTypeDescription
idrequirednumberPost id.

save_draft

save_draft
Save text you wrote as a draft, exactly as given. No AI.
ParameterTypeDescription
contentrequiredstringThe post text.
platformsoptionalarray of stringsTarget platforms: linkedin, twitter, threads, bluesky, substack, youtube, facebook or instagram.
authoroptionalstringWhose post this is: a teammate's name, or me. Leave it out to save it as yours. Only people who can see everyone's posts can save as someone else.
tagsoptionalarray of stringsTag names, like ["Launch", "Case study"]. Names match the workspace's tags whatever the capitals. A new name becomes a new tag if you're allowed to manage tags. If you aren't, nothing is saved and the reply lists the tags you can use.
platform_account_idsoptionalobjectWhich connected account each platform posts from, like { "linkedin": 42 }. Use the ids from list_connected_accounts. Only needed when a platform has more than one account; otherwise the first one is used.
channel_copiesoptionalobjectDifferent text for one channel, keyed by platform, like { "twitter": "..." } for an X version of a LinkedIn post. That text publishes on that channel and every other channel keeps the shared text. Pass "" for a channel to remove its copy. Use this, not a second post.
first_commentoptionalobjectA comment DemandBird posts under your post once it is live, from the same profile: a question to start the conversation, or a call to action. LinkedIn, Facebook and Instagram. Shape: { text, delay_minutes?, platforms? }. delay_minutes is 0, 1, 5, 10, 30 or 60 (default 1). Pass { text: "" } to remove it.
first_commentsoptionalarray of objectsUp to 5 comments posted in order, each with its own delay. Add comment_as (an id from list_connected_accounts) to post one from a teammate's profile or a page. Replaces the existing first comments; [] removes them all. Use this or first_comment, not both.
imagesoptionalarray of objectsImages, a video, or one PDF to attach. For anything bigger than a thumbnail, call upload_image first and pass the s3_key it returns, like [{ s3_key: "..." }]. A PDF posts as a LinkedIn document (a swipeable carousel): LinkedIn only, one per post, and never alongside images or video.
youtubeoptionalobjectYouTube options: { title?, privacy_status?, thumbnail_url? }. title is up to 100 characters and comes from the first line if left out. privacy_status is public (the default), unlisted or private. A video must be attached before the post can be scheduled or published.

If Claude wrote the words, it should call get_brand_voice first, since nothing on this path applies your voice.

update_draft

update_draft
Change a post's text, media, platforms, tags, first comment or stage. Saved exactly as given, with no AI. Works on draft, scheduled and pending-review posts, and keeps the schedule.
ParameterTypeDescription
idrequirednumberPost id.
contentoptionalstringNew text. Replaces the shared text.
platformsoptionalarray of stringsNew platforms. Replaces the current ones.
tagsoptionalarray of stringsReplaces the post's tags; [] removes them all. Changing only tags works on any post, even a published one.
channel_copiesoptionalobjectDifferent text for one channel, keyed by platform, like { "twitter": "..." } for an X version of a LinkedIn post. That text publishes on that channel and every other channel keeps the shared text. Pass "" for a channel to remove its copy. Use this, not a second post.
first_commentoptionalobjectA comment DemandBird posts under your post once it is live, from the same profile: a question to start the conversation, or a call to action. LinkedIn, Facebook and Instagram. Shape: { text, delay_minutes?, platforms? }. delay_minutes is 0, 1, 5, 10, 30 or 60 (default 1). Pass { text: "" } to remove it.
first_commentsoptionalarray of objectsUp to 5 comments posted in order, each with its own delay. Add comment_as (an id from list_connected_accounts) to post one from a teammate's profile or a page. Replaces the existing first comments; [] removes them all. Use this or first_comment, not both.
stageoptionalstringMove the post on the Content board: needs_writing, drafting, internal_review, client_review, revision_requested, on_hold, ready_to_schedule, rejected or done. Only allowed moves work; a refused move lists the allowed ones.
stage_noteoptionalstringWhy the post is moving. Required for on_hold.
imagesoptionalarray of objectsImages, a video, or one PDF, replacing what the post has now. For anything bigger than a thumbnail, call upload_image first and pass the s3_key it returns, like [{ s3_key: "..." }]. A PDF posts as a LinkedIn document (a swipeable carousel): LinkedIn only, one per post, and never alongside images or video.
youtubeoptionalobjectReplace the YouTube fields. Same shape as on draft_post.

If a channel has its own copy, changing content leaves that copy exactly as it is, and it is what publishes on that channel. To change it, pass channel_copies.

revise_draft

revise_draft
Apply feedback (“shorter,” “less salesy,” “add a call to action”) to a draft and save the rewrite onto the same post. It keeps the images, channel copies and schedule, and writes in your voice.
ParameterTypeDescription
idrequirednumberPost id of the draft, from draft_post, save_draft or list_drafts.
feedbackrequiredstringWhat you want changed, in your own words.
platformoptionalstringThe platform whose length limit to fit. Defaults to the post's first platform. It does not change where the post publishes.
draft_anywayoptionalbooleanSet true to rewrite with what it has instead of asking for more context.

Use this every time you react to a draft. Calling draft_post again creates a second, unrelated draft instead. Each call uses one AI rewrite from your monthly allowance.

attach_reference

attach_reference
Store source material (a call transcript, an article, notes) with a post. You and your reviewers can read it, but it is never published and it does not change the post or reset an approval.
ParameterTypeDescription
post_idrequirednumberPost id.
textoptionalstringThe material itself, up to 200,000 characters. Give text or url, not both.
urloptionalstringA link. The page is fetched in the background, and the link is kept even if that fails.
titleoptionalstringA label. Taken from the first line of text if left out.

Never put source material in content. Whatever is in content gets published. A post holds up to 20 references.

suggest_hashtags

suggest_hashtags
Suggest hashtags and another opening line for a draft. Saves nothing.
ParameterTypeDescription
idoptionalnumberPost id. Defaults to the draft you changed last.

Finding posts

list_drafts

list_drafts
List your posts by status, with ids, previews, platforms and schedule.
ParameterTypeDescription
statusoptionalstringdraft (the default), scheduled, posted or failed.
editorial_statusoptionalstringFilter by Content board stage. Same values as stage on update_draft.
limitoptionalnumberHow many (default 20, max 100).

get_post

get_post
Everything about one post, including its status on each platform and its reference materials (title, link, kind, length and status, but not their text).
ParameterTypeDescription
idrequirednumberPost id.

search_posts

search_posts
Find published posts by what they say, like “my post about pricing.” Searches every post on the workspace's channels, including history imported from LinkedIn.
ParameterTypeDescription
queryrequiredstringUp to 5 words. Every word must appear in the post.
authoroptionalstringWhose posts: me, or a teammate's name like Alex. Leave it out for the whole workspace.
platformoptionalstringOne of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin.
start_dateoptionalstring (YYYY-MM-DD)Only posts on or after this day.
end_dateoptionalstring (YYYY-MM-DD)Only posts on or before this day.
limitoptionalnumberHow many matches (default 10, max 25).

list_recent_posts

list_recent_posts
What went out lately and where. No performance numbers.
ParameterTypeDescription
limitoptionalnumberHow many (default 5, max 10).

list_scheduled_posts

list_scheduled_posts
What's going out and when.
ParameterTypeDescription
windowoptionalstringtoday, week or upcoming (the default).

delete_post

delete_post
Permanently delete a draft by id. Can't be undone. It can't delete a post that's already published; there is no tool for that.
ParameterTypeDescription
idrequirednumberPost id.

Scheduling and publishing

schedule_post

schedule_post
Schedule a post for a set date and time on one or more platforms.
ParameterTypeDescription
idrequirednumberPost id.
scheduled_atrequiredstring (ISO 8601)When to publish, like 2026-03-10T09:00:00Z. Must be in the future.
platformsoptionalarray of stringsDefaults to the platforms already on the post.
platform_account_idsoptionalobjectWhich connected account each platform posts from, like { "linkedin": 42 }. Use the ids from list_connected_accounts. Only needed when a platform has more than one account; otherwise the first one is used.
variance_minutesoptionalnumberOverride the account's posting-time variance, 0 to 60. The time is shifted by up to half of it so posts don't all land on the exact minute. 0 keeps the exact time.

queue_post

queue_post
Put a post in the next open slot of your posting queue.
ParameterTypeDescription
idrequirednumberPost id.
platformsoptionalarray of stringsDefaults to the platforms already on the post.
platform_account_idsoptionalobjectWhich connected account each platform posts from, like { "linkedin": 42 }. Use the ids from list_connected_accounts. Only needed when a platform has more than one account; otherwise the first one is used.
variance_minutesoptionalnumberOverride the account's posting-time variance, 0 to 60. The time is shifted by up to half of it so posts don't all land on the exact minute. 0 keeps the exact time.

Returns the time each platform got. Use get_queue_slots first to see the times without queueing.

get_queue_slots

get_queue_slots
See the next open queue slot for each platform without scheduling anything.
ParameterTypeDescription
platformsrequiredarray of stringsPlatforms to check, like ["linkedin", "twitter"].

cancel_post

cancel_post
Take a scheduled post off the schedule. It goes back to drafts; nothing is deleted.
ParameterTypeDescription
idrequirednumberPost id.

publish_post

publish_post
Publish a draft now. Over MCP this does not publish by itself: it returns a link where you check the post and press Publish.
ParameterTypeDescription
idrequirednumberPost id.
platformsoptionalarray of stringsDefaults to the platforms already on the draft.
platform_account_idsoptionalobjectWhich connected account each platform posts from, like { "linkedin": 42 }. Use the ids from list_connected_accounts. Only needed when a platform has more than one account; otherwise the first one is used.

pause_queue

pause_queue
Pause publishing. Scheduled posts wait instead of going out.

No parameters required.

resume_queue

resume_queue
Turn publishing back on so scheduled posts go out again.

No parameters required.

list_queue_schedule

list_queue_schedule
Show each channel's weekly posting times: every time, the days it runs, the channel's id, whether you can change it, and the time zone.
ParameterTypeDescription
platformoptionalstringOnly show one platform: linkedin, twitter, threads, bluesky, substack, youtube, facebook or instagram.

Call this before add_queue_times or remove_queue_times to get the time zone and channel ids.

add_queue_times

add_queue_times
Add posting times to one channel's weekly schedule, like “add 9am on weekdays for LinkedIn.” A time that's already there stays as it is. Posts already in the queue keep their times.
ParameterTypeDescription
platformrequiredstringThe channel's platform: linkedin, twitter, threads, bluesky, substack, youtube, facebook or instagram.
timesrequiredarray of strings24-hour times, like ["09:00", "14:30"], in the workspace's posting time zone.
daysrequiredarray of stringsDay names (monday to sunday), or everyday, weekdays or weekends.
platform_account_idsoptionalobjectWhich channel, when the platform has more than one, like { "linkedin": 42 }. Ids come from list_queue_schedule.

remove_queue_times

remove_queue_times
Remove posting times from one channel's weekly schedule. Posts already in the queue keep their times.
ParameterTypeDescription
platformrequiredstringThe channel's platform: linkedin, twitter, threads, bluesky, substack, youtube, facebook or instagram.
timesrequiredarray of strings24-hour times to remove, like ["09:00"].
daysoptionalarray of stringsOnly remove on these days. Leave it out to remove the time from every day.
platform_account_idsoptionalobjectWhich channel, when the platform has more than one. Ids come from list_queue_schedule.

Images

upload_image

upload_image
Get an upload link for an image, video or PDF. Returns a curl command to run and an s3_key to pass in images on draft_post, save_draft or update_draft.
ParameterTypeDescription
filenamerequiredstringThe file's name, like photo.jpg.
content_typeoptionalstringFile type. Worked out from the name if left out. Images (JPEG, PNG, GIF, WebP), videos (MP4, MOV, AVI, WebM, MKV) and PDFs, up to 100 MB.

Running the curl command needs an app that can run commands, like Claude Code. In a chat app, attach the image in DemandBird instead.

generate_image

generate_image
Make an original image with AI to go with a post. Your brand style is applied for you. Takes 10 to 30 seconds, uses one monthly image credit, and saves the image to your media library.
ParameterTypeDescription
promptrequiredstringWhat the image should show. Describe the picture, not the post.
styleoptionalstringphoto, illustration (the default), infographic or diagram.
sizeoptionalstringsquare (1:1, the default), portrait (2:3) or landscape (3:2).

Returns an s3_key to pass in images. See AI images.

Reviews and approvals

request_review

request_review
Send a draft to teammates for approval. Required reviewers block publishing until each one approves; optional reviewers are FYI.
ParameterTypeDescription
post_idrequiredstringId of the draft.
reviewersrequiredarray of objectsEach reviewer needs an email, a user_id, or a name (“Alex”). An unknown or unclear name is refused, never guessed. Set required: false to make a reviewer optional.
noteoptionalstringA message for the reviewers.
scheduled_atoptionalstring (ISO 8601)Schedule it now. It publishes at this time if every required reviewer has approved.

list_posts_awaiting_my_review

list_posts_awaiting_my_review
List posts teammates have asked you to review.
ParameterTypeDescription
limitoptionalnumberHow many (1 to 100, default 20).

approve_post

approve_post
Approve a post you were asked to review. Returns a link where you read the post and press Approve yourself.
ParameterTypeDescription
post_idrequiredstringId of the post.
noteoptionalstringA note saved with the approval.

send_back_post

send_back_post
Send a post back to its writer with what needs to change. Returns a link where you press Send back yourself.
ParameterTypeDescription
post_idrequiredstringId of the post.
noterequiredstringWhat needs to change, in your words. The writer sees it as written.

comment_on_post

comment_on_post
Leave a comment on a post without approving or sending it back.
ParameterTypeDescription
post_idrequiredstringId of the post.
commentrequiredstringThe comment, in your words.

Ideas

save_idea

save_idea
Save one or more ideas to the Ideas tab. No AI. All the ideas in one call are saved together, or none are.
ParameterTypeDescription
ideasrequiredarray of objectsUp to 100. Each has content (up to 5,000 characters) and optional tags and references (source material, kept out of the idea text).
authoroptionalstringWhose ideas these are: a teammate's name, or me.

list_ideas

list_ideas
List ideas on the Ideas tab, newest first.
ParameterTypeDescription
authoroptionalstringA teammate's name, or me. Leave it out for yours.
limitoptionalnumberHow many (default 20, max 100).

delete_idea

delete_idea
Delete ideas by id. If any id can't be deleted, none are. Can't be undone.
ParameterTypeDescription
idsrequiredarray of numbersIdea ids, up to 100.

Brand and voice

get_brand_voice

get_brand_voice
Read the workspace's brand (positioning, audience, content pillars) and your writing voice (how you sound, phrases you use, what you avoid, recent edits).
ParameterTypeDescription
platformoptionalstringAlso return recent before-and-after edits for this platform.

draft_post and revise_draft already apply your voice. This is for when Claude writes the words itself and saves them with save_draft or update_draft.

update_voice

update_voice
Change your own writing voice, the same as Settings → Voice. For example: “I never use the word synergy.”
ParameterTypeDescription
editsrequiredarray of objectsOne per field, as { field, value } or { field, reset: true }. Each edit replaces the whole field, so send the full list you want kept.

update_brand

update_brand
Change the active workspace's positioning and audience, the same as the Brand identity card in Settings.
ParameterTypeDescription
positioningoptionalstringWhat the business does and stands for. Up to 2,000 characters.
icpoptionalstringWho the posts are for. Up to 2,000 characters.

Analytics

These tools only read. The numbers match the Analytics tab. Reddit is not included.

get_analytics_summary

get_analytics_summary
Followers, engagements, reach and engagement rate, each with the change from the period before. Leave out platform for every network at once.
ParameterTypeDescription
platformoptionalstringOne of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin.
periodoptionalstring7d, 30d or 90d, ending today. Default 30d.
start_dateoptionalstring (YYYY-MM-DD)First day of a custom range, in your timezone. Overrides period. Up to 366 days.
end_dateoptionalstring (YYYY-MM-DD)Last day of a custom range, included. Defaults to today. Needs start_date.

list_top_posts

list_top_posts
Rank posts, best or worst, across all networks or one. Returns each post's id, stats, a snippet and a link.
ParameterTypeDescription
authoroptionalstringWhose posts: me, or a teammate's name like Alex. Leave it out for the whole workspace.
platformoptionalstringOne of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin.
metricoptionalstringWhat to rank by. Default engagement_rate. Also engagements, reach, impressions, likes, comments, shares, discussion_rate, and platform-specific ones like LinkedIn's profile_views, saves, sends and follows. A metric a platform doesn't report is refused with the list it does.
orderoptionalstringtop (the default) or bottom.
limitoptionalnumberHow many (default 5, max 20).
periodoptionalstring7d, 30d or 90d, ending today. Default 30d.
start_dateoptionalstring (YYYY-MM-DD)First day of a custom range, in your timezone. Overrides period. Up to 366 days.
end_dateoptionalstring (YYYY-MM-DD)Last day of a custom range, included. Defaults to today. Needs start_date.

get_post_analytics

get_post_analytics
Every metric for one post, including how its reach built up over time where the platform reports it.
ParameterTypeDescription
post_idoptionalnumberThe published post's id, from list_top_posts.
composition_idoptionalnumberThe DemandBird post id (the number in “Draft #123”).
latestoptionalbooleanSet true for the most recent post. Add platform to pick a network.
platformoptionalstringOne of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin.

list_posts_with_metrics

list_posts_with_metrics
Every published post in a date range with all its numbers, a page at a time. Good for a full history or export.
ParameterTypeDescription
authoroptionalstringWhose posts: me, or a teammate's name like Alex. Leave it out for the whole workspace.
platformoptionalstringOne of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin.
limitoptionalnumberPosts per page (default 50, max 100).
cursoroptionalstringFrom the end of the last page, to get the next one.
periodoptionalstring7d, 30d or 90d, ending today. Default 30d.
start_dateoptionalstring (YYYY-MM-DD)First day of the range, in your timezone. Overrides period. Any length.
end_dateoptionalstring (YYYY-MM-DD)Last day of a custom range, included. Defaults to today. Needs start_date.

get_best_time_to_post

get_best_time_to_post
The days and hours (in your timezone) when your posts on a platform have done best.
ParameterTypeDescription
platformrequiredstringOne of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin.
limitoptionalnumberHow many time slots (default 3, max 10).
periodoptionalstring7d, 30d or 90d, ending today. Default 30d.
start_dateoptionalstring (YYYY-MM-DD)First day of a custom range, in your timezone. Overrides period. Up to 366 days.
end_dateoptionalstring (YYYY-MM-DD)Last day of a custom range, included. Defaults to today. Needs start_date.

get_format_performance

get_format_performance
Rank post formats (text, image, video and so on) on a platform by engagement.
ParameterTypeDescription
platformrequiredstringOne of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin.
periodoptionalstring7d, 30d or 90d, ending today. Default 30d.
start_dateoptionalstring (YYYY-MM-DD)First day of a custom range, in your timezone. Overrides period. Up to 366 days.
end_dateoptionalstring (YYYY-MM-DD)Last day of a custom range, included. Defaults to today. Needs start_date.

get_audience_demographics

get_audience_demographics
Who your followers are. Instagram and Threads report country, age, gender and city. LinkedIn company pages report seniority, job function, industry, company size and location. Other platforms, and LinkedIn personal profiles, don't share this.
ParameterTypeDescription
platformrequiredstringOne of twitter, bluesky, threads, facebook, instagram, mastodon, youtube, tiktok, pinterest or linkedin.
periodoptionalstring7d, 30d or 90d, ending today. Default 30d.
start_dateoptionalstring (YYYY-MM-DD)First day of a custom range, in your timezone. Overrides period. Up to 366 days.
end_dateoptionalstring (YYYY-MM-DD)Last day of a custom range, included. Defaults to today. Needs start_date.

get_follower_history

get_follower_history
LinkedIn follower count for each day, for a profile or company page. The same numbers as the follower growth chart.
ParameterTypeDescription
accountoptionalstringWhich LinkedIn profile or page, by name or id. Leave it out for all of them.
periodoptionalstring7d, 30d or 90d, ending today. Default 30d.
start_dateoptionalstring (YYYY-MM-DD)First day of a custom range, in your timezone. Overrides period. Up to 366 days.
end_dateoptionalstring (YYYY-MM-DD)Last day of a custom range, included. Defaults to today. Needs start_date.

tag_published_post

tag_published_post
Set the tags on a post that's already published, including posts made outside DemandBird.
ParameterTypeDescription
post_idrequirednumberThe published post's id, from list_top_posts or search_posts.
tagsrequiredarray of stringsReplaces the post's tags; [] removes them all.

Team

Account admins only.

list_members

list_members
Everyone on the account, pending invites, and how many seats are left.

No parameters required.

invite_member

invite_member
Invite people to the account. Returns a link where you check each person and role and press Send yourself.
ParameterTypeDescription
invitesrequiredarray of objectsEach has name, email and role (admin, member, read_only, ghostwriter or client), plus optional workspace_roles.