Model Context Protocol

An MCP server for marketing and sales

Revvify exposes 37 tools over Model Context Protocol, so the assistant you already pay for can plan a week, draft the posts, schedule them, read what happened, and work the leads that came in. No chat box bolted onto a UI, and no second AI bill.

Endpoint

https://mcp.revvify.io/mcp

OAuth 2.1 with PKCE and dynamic client registration (RFC 7591) — nothing to paste. An unauthenticated call answers 401 with a WWW-Authenticate header pointing at the protected-resource metadata (RFC 9728), which is how a compliant client discovers where to authenticate.

Connect a client

Any client that speaks MCP over Streamable HTTP with OAuth. The flow opens a browser once, you approve the workspace, and the token is stored by the client.

Claude, ChatGPT, Cursor

Add a remote MCP server in the client’s settings and give it the URL above. For clients configured by file, it is the standard shape:

{
  "mcpServers": {
    "revvify": {
      "url": "https://mcp.revvify.io/mcp"
    }
  }
}

Not an MCP client?

There is a versioned REST API at /api/v1, described by OpenAPI. Same limits, same error contract — the MCP server and the REST facade both call the same procedures, so neither can drift into being the permissive one.

Start with get_capabilities

It reports the plan, which channels are actually connected and working, which media kinds are available on the current AI tier, the operating mode, and the consent table. An agent that calls it first plans against reality instead of discovering the limits through failed calls — which is the difference between an assistant that looks competent and one that apologises.

All 37 tools

Grouped by the job they do. read tools only read; write tools change something, and every one of them is scoped to the workspace you approved. Five of them belong to the sales suite and need the Pro plan — they are marked, and on a lower plan they answer plan_required rather than failing vaguely.

Understand the workspace

list_brandsread
List the brands in the connected workspace.
get_brand_contextread
Voice profile, goal, spice dial, and products for a brand — use before drafting.
get_capabilitiesread
The concrete shape of this connection: plan limits, remaining budget, which media kinds can be produced and what happens to the result, and the actions that ALWAYS end in a human decision. Call this first — discovering limits by hitting errors wastes calls and produces worse plans.
get_calendarread
Scheduled/published posts for a brand within a date range.
list_outgoingread
Every post and newsletter with a future or recent date, as ONE item per piece of work carrying its per-channel statuses. This is the shape to use when asking 'what is scheduled' or 'did anything fail' — unlike get_calendar it can express partial failure, e.g. LinkedIn published while X did not.
get_analyticsread
A compact performance summary for a brand over a range (7d/30d/90d).
get_lead_inboxreadPro
Recent leads for a brand, optionally filtered by status.
get_radar_feedread
What's hot now for a brand — discovered items with type + brief.
get_product_briefread
The compiled brief for one product: what it is, who it is for, its proof points and its 'never say' list, plus the source material behind it. Read this before writing anything about the product — it is the owner's own material, and drafting without it is where invented features come from.
get_prompt_healthread
How well the AI is describing one product, measured: shipped-without-edits rate, how much evidence there is, and which family of results (content vs sales) has been driving the brief's revisions.
get_pending_approvalread
Poll a handle returned by a tool that hands off to a human (§17.5). Returns its state and, once resolved, what the human decided. Polling never advances it — only a person can.
list_reelsread
Reels this workspace has cut from its own footage, with render status and the finished video when there is one. Read-only: an agent can see and schedule a reel a human built, but cannot build one.
get_budget_statusread
The spend pool for this workspace: credits remaining, today's ceiling, the monthly platform allowance, and whether the workspace is on its own key. Check this before planning a batch of generations.
project_automation_costread
Estimate the monthly cost of running something on a cadence — posts, and optionally an image with each — against the workspace's actual budget. Use this before suggesting an automation, especially one that generates media.
estimate_video_costread
Price a video clip before anyone commits to it: provider cost if the workspace uses its own key, or credits if it uses the platform pool, plus the plan's maximum clip length. Video cannot be generated through this connection — see the note in the result.
list_cold_templatesreadPro
The cold outreach templates, each with the situation it suits and the fields that matter. Read this before draft_cold_email so the choice is made on the situation rather than at random.
get_agent_receiptread
A receipt for agent activity in this workspace: calls made, calls refused and why, and the outcomes those calls produced — posts actually published, leads touched, drafts still waiting for a human. Use it to report on your own work honestly, including what you could not do.

Draft and plan

create_campaignwrite
Create a draft campaign and generate a full multi-channel plan (AI drafts; you approve in the app).
create_email_draftwrite
Draft a newsletter from a topic or a roundup of recent posts (AI drafts; you review in the app).
create_landing_pagewritePro
Create a draft landing page and generate its copy (AI drafts; you review + publish in the app).
draft_lead_replywritePro
AI-draft a first reply to a lead. The draft is saved for a human to review + send (never auto-sent).
draft_cold_emailwritePro
AI-draft a cold outreach email from one of the built-in templates. Returns a DRAFT for a human to review and send — there is no tool that sends it, and cold email is never auto-sent. Call list_cold_templates first to choose a template and see which fields matter.
submit_topicswrite
Push research findings into the Radar as items (source=mcp) — let your assistant do the web research on its own subscription.
add_product_materialwrite
Give a product a note or a reference link. Notes are the owner's own words about positioning, audience, features, proof, pricing or things never to say. Links are references we cite and NEVER fetch. Adding material does not change the brief on its own — compile it afterwards.
compile_product_briefwrite
Recompile a product's brief from its current source material. Costs one AI generation — but only if something actually changed: identical material is detected before any provider call and returns unchanged, free.
set_operating_modewrite
Record whether a product is run by automations ('Run it for me'), by hand ('I'll drive'), or both. This changes what the app suggests first and NOTHING else — every capability stays available in every mode, so it is safe to set and safe to change.

Schedule and publish

schedule_postwrite
Create a post and schedule it to channels at an ISO time. Validated per network before scheduling.
publish_nowwrite
Create a post and publish it immediately to the given channels.
update_postwrite
Edit a draft/scheduled post's text or scheduled time.
reschedule_postwrite
Change when an already-scheduled post goes out. Re-enqueues its per-channel publish jobs, so the old time is genuinely cancelled rather than left to fire.
repost_itemwrite
Duplicate an existing post's text into a NEW draft for a different network. It never widens the original's reach: copy a human approved for one audience must not silently go to another.
delete_postwrite
Permanently delete a post. Destructive — requires confirm=true.

Media

upload_mediawrite
Copy an image or video from a public URL into a brand's media library. We fetch the file and store it ourselves, so it keeps working after your URL expires.
generate_imagewrite
Generate an image from a structured brief — subject, scene, mood, style, and what to avoid — and add it to the media library. Runs on whichever key the workspace connected; costs are visible in Settings → AI.
request_videowrite
Video is never generated through this connection. This prices the clip and returns a pending-approval handle describing exactly what a person must do; poll it with get_pending_approval. There is no tool that turns a generated clip into a stored asset.
import_videowrite
Bring a video you already made — in Motion, or anywhere else — into this workspace's media library so it can be attached to a post and scheduled. The file must be a video you have the rights to; importing is the same act as uploading one. Requires an idempotency key so a retry cannot import the same video twice.
request_reelwrite
Reels are cut by a person in the reel builder. This queues the request with your suggested angle and returns a pending-approval handle to poll. Deciding which seconds of someone's footage represent them is an editorial judgement, not a scheduling one — there is no tool that cuts a reel.

What no agent can do

These hold because the tools that would cross them do not exist, or because the database refuses — not because a prompt asks nicely.

  • Message a person. There is no tool to send a DM, a cold email or a reply — only draft_lead_reply, which leaves a draft for you. It CAN publish posts to channels you connected, and marketing email still goes to people who opted in on the schedule you set; that is the product's purpose.
  • Follow or unfollow anyone. No such tool.
  • Generate video. request_video only asks a human to make one. When a person does run it, the clip is billed the moment it renders — accepting the preview is what keeps it, not what pays for it.
  • Publish controversy-mode content unattended. STANCE and HUMOR spice always wait for a person, whatever the automation is set to.
  • Reach another workspace. Every query is scoped and enforced by row-level security in Postgres, with the app connecting as a role that cannot bypass it.
  • Spend without saying so. estimate_video_cost and project_automation_cost price the work first, and name which key pays.

Errors an agent can act on

Every failure carries a stable code, a human-readable message, a remediation URL and, where it helps, the next step to try. An agent branches on the code; a person follows the link. Prose-only errors force the agent to guess.

  • invalid_request

    The arguments do not satisfy the schema.

  • not_found

    A brand, channel or post id does not exist here.

  • forbidden

    The token is not permitted to do this.

  • missing_capability

    The plan does not include it — remediation points at billing.

  • needs_human_approval

    Correct call, but a person must decide.

  • rate_limited

    120 requests per minute per token; retry after the window.

  • conflict

    Already done, or a competing write won.

Writes accept an idempotency key on their natural unique tuple, so a retry after a timeout cannot double-post.

Questions

What is the Revvify MCP server endpoint?
https://mcp.revvify.io/mcp — Streamable HTTP. Authentication is OAuth 2.1 with PKCE, and the server supports dynamic client registration (RFC 7591), so a compliant client sets itself up without you pasting a key. An unauthenticated request answers 401 with a WWW-Authenticate header naming the protected-resource metadata (RFC 9728).
Which clients work with it?
Anything that speaks Model Context Protocol over Streamable HTTP with OAuth — Claude (desktop and web), ChatGPT, Cursor, and custom clients built on an MCP SDK. For clients that do not speak MCP there is a versioned REST API at /api/v1, described by OpenAPI.
Can the agent publish without asking me?
It can publish posts to channels you connected — that is what a scheduler is for. It cannot message a person: there is no tool to send a DM, a cold email or a reply, only draft_lead_reply, which leaves a draft for you. (Marketing email to people who opted in does send on its own — on a schedule you set, not because an agent decided to.) It cannot follow or unfollow accounts, cannot generate video, and cannot see another workspace — that last one is enforced by the database rather than by our code.
Do I need to pay Revvify for AI usage to drive it from an agent?
No. Driving it from your own assistant over MCP is the first of three tiers, and it means your existing subscription is the intelligence — no AI bill from us. The alternatives are your own API key, billed by your provider at cost, or prepaid credits, which are never required by any feature.