Skip to main content
Your ContentHero account (balance, spend cap, plan), the platforms available to publish to, and what the user is looking at. 4 tools. Every tool below is exposed by the hosted MCP server at https://mcp.contenthero.ai and by the @contenthero/mcp npm package. A write tool changes your account; a read tool does not.

get_account

read Get your ContentHero account: the credit balance, what is available to spend, credits reserved for work in progress, what was spent this month, the monthly spend cap, the plan and auto top-up. For a tracked social account, use get_tracked_account. Takes no parameters.

update_account

write Update your ContentHero account. Only the fields you pass change. spendCap sets the monthly spend cap in credits, or null removes it: every credit spent this month counts toward it, and anything that would cross it is refused until the cap resets on the 1st of the month (UTC). Changing it needs the billing:write scope and the account’s owner. Returns the account as it now is.
integer or null
The monthly spend cap in credits, or null for no cap.

get_context

read Read the live context of what the user is currently viewing in the open app: the active surface, the focused element, the playhead, and the current selection, so you act on what the user is looking at rather than guessing. Read this first. It is fast, structured, and does not disturb the live page, and structured context alone is enough whenever the task does not depend on the exact pixels; it returns no image by default. Acquire vision only when the task genuinely requires seeing, and pick the path by what you need to see. Set render=true to see the composed output itself: the actual rendered editor frame or canvas slide, reconstructed from saved data, so you can visually verify your own edits while iterating. Pass frame (editor) or slideId/slideIndex (canvas) to inspect a specific point, or render=true alone for the point the user is viewing. The render returns inline as an image, is ephemeral, leaves nothing in the user’s storage, and does not need a live tab. Set capture=true instead only when you need the user’s actual screen as shown right now, including transient interface state and unsaved edits; capturing renders the current screen on demand, so its latency and brief page interruption grow with how visually heavy that screen is. Do not use export_project to check your work: exports are permanent deliverables that count against the user’s storage; use render for previews. Returns the most-recent-active session and the live participant set, or nothing when no one is viewing (render still works with an explicit projectId). Optionally scope to one project. Requires the context:read scope.
boolean
Also return a screenshot of the user’s live viewport (their SCREEN), captured at read time. Default false returns structured context only. Request it only when the task depends on seeing the live, as-shown state including unsaved UI. To see the composed OUTPUT rather than the screen, use render instead.
integer
How many frames to return across the range. Omit for one frame at the focus point, or a proportional default when a range is given.
integer
Editor: which single timeline frame to render. Omit to render the current playhead frame.
integer
Start timeline frame of the range, for several frames. Omit to start at the beginning.
string
Scope to a specific project (editor/canvas). Omit for the user’s most-recent-active surface anywhere. Required for render when no session is live.
object
Render only this rectangle, in composition units (get_project’s compositionSpace), to inspect detail at full resolution. Without width, it renders at native scale; rendered reports pixelsPerCompositionUnit.
boolean
Also render your work so you can visually verify edits. Ephemeral, stored nowhere, counts against no quota, works without a live tab. render=true alone renders the current focus point as one image; add count with fromFrame/toFrame for several across a range. Frames across a range are how you judge motion, timing and pacing: the closer together they are, the finer the motion they show. Use this to check your work, not export_project, which produces a file the user KEEPS. To watch a RAW source clip instead of your composition, use get_media with a video item.
string
Canvas: the id of the slide to render. Omit to render the focused slide.
integer
Canvas: the 1-based slide index to render (alternative to slideId).
integer
End timeline frame of the range. Omit to run to the end.
integer
The width in pixels to render at, to check legibility at the size it will be seen (a thumbnail, a feed card). Height follows the aspect ratio. The size used is reported in rendered.

get_schema

read Get a vocabulary another call accepts, by kind. ‘platform’: with no platform, the platforms this account can publish to, each with its formats and whether a connected account exists; with a platform (and optionally a format), the fields, options (enums) and character limits a post requires per format. Ground a post’s platformSettings against it instead of guessing the fields. ‘timeline’: the EDITOR timeline clip types (video, image, text, shape, audio) with their fields (each with who writes it, its range and its allowed values), the track types and what each holds, a copy-pasteable example clip skeleton per type, and a creation section documenting the CREATE ops (create_clip, insert_track, insert_prebuilt_track); read it before building any clip with update_timeline. ‘layer’: the CANVAS layer types (image, text, shape, video) with their fields and the shared prop groups (base, animation, template, transform, decoration, adjust), so you know what update_canvas ops can create and set. ‘export’: the export formats and their options per project type, so you know what export_project accepts. ‘link’: the grammar of app addresses and every noun and section it takes (what each opens, its tabs, what a tab’s item names) plus the app’s origin, so you can build a link to any item from its noun and id. ‘code’: the authoring guide for a code clip or code layer (a video, audio or image whose content is code): what the sandbox can import and what it cannot use, the box the code draws in, the sound it can synthesize, the brand prop names, the size limit, the workflow and examples; read it before writing or changing a clip’s code. ‘effect’: every effect code or a video or image clip can use, by group, with what it does, where code imports it, and whether a clip can carry it; with a name, that effect’s parameters with their ranges and defaults, and which of them keyframe on a clip. Read it before giving anything effects. ‘timeline’, ‘layer’, ‘export’, ‘code’ and ‘effect’ require the editor:read scope.
`platform` \| `timeline` \| `layer` \| `export` \| `link` \| `code` \| `effect`
required
Which vocabulary to read.
string
kind ‘platform’ with a platform only: a format to narrow to (e.g. “reel”, “short”, “story”, “thread”).
boolean
kind ‘timeline’ or ‘layer’ only: also return each type’s full JSON Schema. It is large; ask for it only to validate a whole item before sending it.
string
kind ‘effect’ only: the effect to read in full (such as “glow”). Omit to list the effects.
`youtube` \| `instagram` \| `tiktok` \| `facebook` \| `linkedin` \| `x` \| `threads` \| `general`
kind ‘platform’ only: the platform to read (such as “instagram”). Omit to list every platform.