Skip to content
Content Rabbit

Overview

The Content Rabbit MCP server exposes your team through the Model Context Protocol. An AI assistant that speaks MCP can list and manage posts, schedule and publish content, generate text and hashtags, and read analytics — all scoped to the team that owns the API key.

The server uses Streamable HTTP transport in stateless mode:

  • POST /api/v1/mcp — JSON-RPC messages (initialize, tools/list, tools/call, …)
  • GET /api/v1/mcp — Server-Sent Events stream for server-initiated messages
  • DELETE /api/v1/mcp — Close the session

Every tool call runs under the same tenant scope and authorization checks as the public REST API. See the Content Rabbit API for REST equivalents and the Terminology glossary for team and platform terms.

API keys are team-scoped. A key can only read or mutate data in the team it was issued for. Rotate keys regularly and delete unused keys immediately.

Endpoint

https://<your-domain>/api/v1/mcp

In production this is https://contentrabbitai.com/api/v1/mcp. The server handles MCP over Streamable HTTP with enableJsonResponse: true and no server-persisted session.

Authentication

All requests must include a Bearer API key:

Authorization: Bearer YOUR_API_KEY

The server authenticates with the same Authorization: Bearer <key> mechanism as the public REST API, and rejects a missing or invalid key with 401 Unauthorized. Your API key scopes every tool call to its team and plan.

Getting an API key

  1. Open Settings > Team.
  2. Choose the team you want to automate.
  3. Go to the API & Integrations tab and press Generate API key.
  4. Copy the value immediately — you can always rotate to get a fresh key.

Sandbox keys (metadata.sandbox === true) simulate mutating tools and never write to the database or call external services. Read tools run normally against the sandbox team's data.

Rate limiting

The MCP endpoint shares the same plan-tiered, per-team rate limit as the public REST API. Inspect response headers to track usage:

HeaderDescription
X-RateLimit-LimitMaximum requests allowed per window
X-RateLimit-RemainingRequests remaining in current window
X-RateLimit-ResetUnix timestamp when the window resets

Exceeding limits returns 429 Too Many Requests. Retry with exponential backoff.

Connect an MCP client

Any MCP client that supports Streamable HTTP works. Configure the server URL plus an Authorization header with your API key. The shape varies by client — the fields below are the portable part:

{
  "mcpServers": {
    "content-rabbit": {
      "url": "https://contentrabbitai.com/api/v1/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

For clients that split transport options, use:

  • Transport: http / streamable-http
  • URL: https://contentrabbitai.com/api/v1/mcp
  • Header: Authorization: Bearer YOUR_API_KEY

Test the connection by listing tools (tools/list) — you should see 39 tools. A 401 means the key is missing, revoked, or pasted with extra whitespace.

Available tools

Both MCP servers — this hosted server and the stdio npm package @contentrabbit/mcp-server — mount one shared tool registry, so the same 39 tools exist on both. All tools are scoped to the caller's team. Only these tools exist — the server exposes no other names.

Posts

ToolWhat it doesKey parameters
posts_listList posts with optional filtering by status, platform, or search query.status (draft, scheduled, published, error), platform (e.g. twitter, linkedin), search (title search, max 200), limit (1–100), page, sortBy (createdAt, updatedAt, scheduledAt), sortOrder (asc, desc)
posts_getGet a single post by id, including platform settings and publish results.postId (required)
posts_createCreate a post. Draft by default; scheduled when scheduledAt is set.platformType (required, e.g. twitter), content (max 100,000, nullable), title (max 500, nullable), status (draft or scheduled), scheduledAt (ISO datetime), tags (up to 50, each max 100), category (max 200)
posts_updateUpdate a post's content, title, status, schedule, or tags.postId (required), content (max 100,000, nullable), title (max 500, nullable), status (post status enum), scheduledAt (ISO datetime, nullable to clear), tags (up to 50)
posts_deleteDelete a post permanently.postId (required)
posts_scheduleSchedule a post for future publishing, optionally overriding the selected platforms.postId (required), scheduledAt (required, ISO datetime), selectedPlatforms (string array)
posts_unscheduleRemove the schedule from a post, reverting it to draft.postId (required)
posts_publishPublish a draft or scheduled post to its connected social accounts now. This posts to real external accounts.postId (required), platforms (string array override), firstComment (max 3,000, supported on some platforms)
posts_retryRetry publishing a failed or partially-failed post.postId (required)
posts_statusGet the publish status of a post including per-platform results.postId (required)

Teams

ToolWhat it doesKey parameters
teams_listList all teams accessible with the current API key.none
teams_createCreate a new team.name (required)
teams_getGet a specific team by ID.teamId (required)
teams_updateUpdate a team's name or avatar.teamId (required), name, avatarUrl (nullable to clear)
teams_deleteDelete a team (only the owner can do this).teamId (required)

Accounts

ToolWhat it doesKey parameters
accounts_listList connected social media accounts with optional platform filter.platform (max 40, e.g. twitter, linkedin)
accounts_getGet details of a specific connected account.accountId (required)
accounts_healthCheck the health and token status of a connected account.accountId (required)
accounts_disconnectDisconnect a social media account from the team (owner only).accountId (required)

Queue

ToolWhat it doesKey parameters
queue_list_slotsList all schedule slots configured for the team.none
queue_create_slotCreate a new schedule slot for automated posting.day (required, day of week), time (required, HH:MM)
queue_update_slotUpdate an existing schedule slot.slotId (required), day, time
queue_delete_slotDelete a schedule slot.slotId (required)
queue_next_slotGet the next available schedule slot for posting.none

Webhooks

ToolWhat it doesKey parameters
webhooks_listList all webhook subscriptions for the team.none
webhooks_createCreate a new webhook subscription.targetUrl (required, URL), eventTypes (string array), description
webhooks_getGet a specific webhook subscription by ID.webhookId (required)
webhooks_deleteDelete a webhook subscription.webhookId (required)
webhooks_testSend a test event to a webhook endpoint to verify it works.webhookId (required)

Utility

ToolWhat it doesKey parameters
usage_statsGet usage statistics for the team (posts this month, connected accounts, etc.).none
validate_postValidate post content against platform character limits.content (required), platforms (required string array)
validate_mediaValidate media file requirements for specific platforms.mediaType (required, image or video), platforms (required string array), fileSize (bytes), mimeType

Generate

ToolWhat it doesKey parameters
generate_textGenerate text content with an AI model (e.g. a post draft, caption, or idea).prompt (required, 1–50,000), system (max 10,000), model (e.g. google/gemini-3.1-pro-preview or openai/gpt-4o, max 200; default google/gemini-3.1-pro-preview)
generate_hashtagsGenerate hashtags for a piece of content, tuned to a platform.content (required, 1–50,000), platform (general | linkedin | twitter, default general), count (1–50, default 10)

Media

ToolWhat it doesKey parameters
media_list_imagesList images owned by this account, newest first.search (max 200, over title/description/alt text), limit (1–100, default 25)
media_list_videosList videos owned by this account, newest first.search (max 200, over title/description), limit (1–100, default 25)

Analytics

ToolWhat it doesKey parameters
analytics_get_calendarGet scheduled and published posts grouped by day for a date range.start (ISO datetime), end (ISO datetime), timezone (IANA, max 80), statuses (array of scheduled, publishing, published, error)
analytics_get_activityGet the team's post activity feed for a date range (created/scheduled/published events). Cursor-paginated.start (ISO datetime), end (ISO datetime), timezone, limit (1–100, default 50), cursor
analytics_get_postsGet a summary of post counts by status and platform for a date range.start (ISO datetime), end (ISO datetime), timezone

Tool responses are JSON text payloads. Mutating tools called with a sandbox key return a simulated success with sandbox: true and a synthetic id (<prefix>_sandbox_<uuid>) without touching the database or external accounts.

Was this helpful?