Back to home
MCP Server

MCP Server Documentation

Connect Claude Code or any MCP client to manage your Bullhorn content with AI.

Quick Start

1

Create an API Key

Go to Settings → API Keys in the Bullhorn app and create a new key.

Copy the key immediately — it won't be shown again.

Open Settings
2

Configure Claude Code

Add this to your .mcp.json file in your project root:

{
  "mcpServers": {
    "bullhorn": {
      "command": "npx",
      "args": ["-y", "@mean-weasel/bullhorn-mcp"],
      "env": {
        "BULLHORN_API_URL": "https://bullhorn.to"
      }
    }
  }
}

Note: Set BULLHORN_API_KEY in your shell environment or .env file. The MCP server reads it automatically at startup.

3

Start Using

Ask Claude to list your posts, create a campaign, or draft a blog post. The MCP server handles authentication and API calls automatically.

Available Tools

46 tools across 6 categories. Each tool maps to a Bullhorn API endpoint.

Posts9 tools
ToolDescription
create_postCreate a new social media post for a single platform
get_postGet a single post by ID
update_postUpdate an existing post
delete_postPermanently delete a post
archive_postArchive a post (soft delete, can be restored)
restore_postRestore an archived post back to draft
list_postsList posts with optional status, platform, and campaign filters
search_postsSearch posts by content, notes, platform, or campaign name
create_reddit_crosspostsCreate multiple Reddit posts to different subreddits with a shared group
Campaigns7 tools
ToolDescription
create_campaignCreate a new campaign to organize related posts
get_campaignGet a campaign by ID, including associated posts
update_campaignUpdate a campaign name, description, or status
delete_campaignDelete a campaign (posts become unlinked, not deleted)
list_campaignsList campaigns with optional status filter
add_post_to_campaignLink an existing post to a campaign
remove_post_from_campaignUnlink a post from a campaign (does not delete)
Projects12 tools
ToolDescription
create_projectCreate a project with optional brand kit (hashtags, colors, logo)
get_projectGet a project by ID, including brand kit and settings
update_projectUpdate project name, description, or brand kit
delete_projectDelete a project (campaigns become unassigned)
list_projectsList all projects with optional pagination
get_project_campaignsGet a project with all its campaigns
get_project_analyticsGet rolled-up analytics (campaign count, post counts by status)
add_account_to_projectAssociate a social account with a project
remove_account_from_projectRemove a social account association from a project
get_project_accountsGet all social accounts linked to a project
move_campaign_to_projectMove a campaign to a different project or make it unassigned
list_campaigns_by_projectList campaigns filtered by project or unassigned
Blog Drafts10 tools
ToolDescription
create_blog_draftCreate a new blog post draft with markdown content
get_blog_draftGet a blog draft by ID with full content
update_blog_draftUpdate title, content, date, notes, or status
delete_blog_draftPermanently delete a blog draft
archive_blog_draftArchive a blog draft (can be restored)
restore_blog_draftRestore an archived blog draft
list_blog_draftsList blog drafts with optional status and campaign filters
search_blog_draftsSearch blog drafts by content, title, or notes
add_image_to_draftCopy an image to blog media and attach it to a draft
get_draft_imagesGet list of images attached to a blog draft
Media3 tools
ToolDescription
upload_mediaUpload an image or video file (JPG, PNG, GIF, WebP, MP4, MOV, WebM)
list_mediaList all uploaded media files with filename, URL, size, and mimetype
delete_mediaDelete an uploaded media file by filename
Launch Posts5 tools
ToolDescription
create_launch_postCreate a launch post for Product Hunt, Hacker News, or other platforms
get_launch_postGet a single launch post by ID
update_launch_postUpdate an existing launch post
delete_launch_postDelete a launch post
list_launch_postsList launch posts with optional platform and status filters

Environment Variables

Configure the MCP server with these environment variables.

VariableRequiredDescription
BULLHORN_API_KEYRequiredYour API key from Settings → API Keys
BULLHORN_API_URLOptionalAPI base URL. Defaults to https://bullhorn.to

Rate Limits

API requests are rate-limited to 10 requests per 10 seconds per API key using a sliding window algorithm. If exceeded, requests return HTTP 429 with a Retry-After header.

Plan Limits

Resource creation is subject to plan limits. When a limit is reached, creation tools return an error with the current usage.

ResourceFree PlanPro Plan
Posts50500
Campaigns550
Projects320
Blog Drafts10100
Launch Posts10100
Storage50 MB2 GB

Tool Examples

Example tool calls showing the JSON arguments for common operations.

Create a Twitter Post

{
  "tool": "create_post",
  "arguments": {
    "platform": "twitter",
    "content": { "text": "Launching our new feature today!" },
    "status": "draft"
  }
}

Create a LinkedIn Post

{
  "tool": "create_post",
  "arguments": {
    "platform": "linkedin",
    "content": {
      "text": "Excited to announce our Series A funding!",
      "visibility": "public"
    },
    "status": "scheduled",
    "scheduledAt": "2026-03-01T09:00:00Z"
  }
}

Create a Reddit Post

{
  "tool": "create_post",
  "arguments": {
    "platform": "reddit",
    "content": {
      "subreddit": "SideProject",
      "title": "Show r/SideProject: I built a social media scheduler",
      "body": "After 6 months of development..."
    },
    "status": "draft"
  }
}

Create Reddit Crossposts

{
  "tool": "create_reddit_crossposts",
  "arguments": {
    "subreddits": ["SideProject", "startups", "webdev"],
    "title": "Show: I built Bullhorn",
    "body": "A social media post scheduler...",
    "status": "draft"
  }
}

Ready to automate?

Create an account, grab an API key, and start managing your content with AI.

Get started free