readOnlyHint annotations, so clients like Claude run them without per-call confirmation; outward-facing tools (schedule_post, publish_post) always prompt.
Guides (call these first)
get_content_guide
Returns the content-operator workflow: the post lifecycle, the platform-first rule, X character limits, gap tracking, the two visual paths, and the schedule/publish confirmation contract. No arguments. Call once per session before creating or editing posts.
get_canvas_guide
Returns the canvas workflow — how to brief the design agent, review frames, and deliver graphics. No arguments. Call once before creating graphics.
Workspace
list_organizations
Lists the workspaces your account belongs to. Every content tool takes one of these ids as organization_id. No arguments.
get_workspace_context
Loads the workspace’s content context in one call.
Returns
{ business_context, memories, viral_formats: { linkedin, x }, agent_canvas_id }. agent_canvas_id is the canvas where designed post graphics live — use it for create_canvas_frame and set_post_graphic.
list_post_options
Lists the workspace’s publishing options: platforms, connected social accounts (integration_id, author_urn), and saved voice personas. Accounts resolve automatically when omitted from create_post, so this is only needed when the user names a specific account or voice.
Posts
create_post
Creates a post as a draft — one post with one variant per platform, each carrying real copy written for that platform. Never publishes or schedules.
Returns
{ post_id, variants: [{ variant_id, platform }], status: "draft" }.
X copy is weighted-counted server-side (URLs 23 chars, emoji 2) against the connected account’s limit — 280, or 25k with X Premium. A too-long tweet fails the whole call with a clear message; shorten and retry.
list_posts
Lists the workspace’s posts, newest first, with per-variant lifecycle and schedule state.
get_post
Reads one post in full: per-variant copy, visual_urls (photos), frame_ids (canvas graphics), schedule state, and missing_info gaps. Always call before editing, attaching visuals, scheduling, or publishing.
update_post_variant
Edits one variant’s copy (text, caption) or toggles enabled. Character limits are enforced server-side; published variants only accept text edits. Visuals go through the two set_post_* tools instead.
flag_post_gaps
Records what a post still needs from the user — shown as an alert banner on the draft in the studio. Kinds: photo, data, other. Replace semantics: gaps becomes the post’s full open list; an empty array clears it. Photos attached via set_post_photos clear photo gaps automatically.
Visuals
Two disjoint paths: uploaded photos (request_upload_url → set_post_photos) and designed canvas graphics (create_canvas_frame → set_post_graphic). The last one applied wins.
request_upload_url
Returns a short-lived signed URL to upload one photo or video into the workspace. HTTP PUT the raw bytes to upload_url with exactly the returned headers (Content-Type and Content-Length are part of the signature). After the PUT, public_url is the file’s permanent address.
Returns
{ upload_url, method: "PUT", headers, key, public_url, expires_in_seconds }. The URL expires in 10 minutes; one call per file.
set_post_photos
Attaches uploaded photos/videos to a post as its published visuals. Urls must be public_url values from this workspace’s upload flow — unknown urls are skipped. Replaces designed canvas visuals if the post had them.
set_post_graphic
Attaches designed canvas frames to a post. Exports the frames to PNG fresh on every call — re-call after a graphic is edited. canvas_id defaults to the workspace’s agent canvas.
Publishing
schedule_post
Schedules a post for delivery at a specific time. Only after the user explicitly confirmed the exact post and time — the tool refuses without user_confirmed: true.
publish_post
Publishes a post right now (delivery starts within seconds). Same confirmation contract as schedule_post.
unschedule_post
Cancels a scheduled delivery — the post returns to drafts. Safe and reversible.
Analytics
Read-only views over the workspace’s indexed social history (built by Index history in the app’s Analytics page) and its tracked competitors. Competitors are added and removed in the app.get_content_analytics
Aggregated performance of the workspace’s indexed posts.
get_top_posts
The workspace’s real best-performing indexed posts — copy, engagement, category, media type, image urls — optionally filtered by category or media_type (image, video, carousel, document, poll, text). Takes organization_id, optional platform, and limit (1–20).
list_competitors
Lists tracked competitor companies and creators with company ids, enrichment state, and indexing progress. Takes organization_id. Resolve ids here before the two tools below.
get_competitor_analysis
Head-to-head comparison vs tracked competitors: share of voice, engagement share, monthly trend, category mix, frequency, authors, follower counts. Takes organization_id, optional competitor_company_id (self-vs-one; omit for aggregate), range_months, include_reposts.
get_competitor_evidence
Bounded evidence for one competitor: strategic profile, top posts, topics, formats, engagement. Takes organization_id, competitor_company_id, optional limit (1–15).
Memory
remember
Saves a durable user preference for the workspace’s content (voice, wording, topics). Comes back via get_workspace_context. Takes organization_id, text, optional kind (style / wording / fact), importance (1–5), and supersedes_id.
forget
Deletes a saved preference by memory_id. Takes organization_id and memory_id.
Canvas (graphics engine)
list_canvases
Lists your canvases, most recent first. Paginated.
Returns
{ canvases: [{ canvas_id, name, organization_id, preview_image_url, created_at, updated_at }], next_cursor, is_done }.
create_canvas
Creates a new canvas.
get_canvas
Returns one canvas’s metadata. Takes canvas_id.
list_canvas_frames
Lists every frame on a canvas (metadata, no HTML). Takes canvas_id, optional cursor and limit.
get_canvas_frame_code
Returns the raw HTML of one frame. Takes canvas_id and frame_id.
screenshot_canvas_frames
Renders 1–4 frames to images so the agent can see the actual result, not just its HTML. Takes canvas_id and frame_ids; returns the screenshots as inline images.
create_canvas_frame
Starts an asynchronous agent job: the VibeFlow design agent reads your natural-language brief, plans the frames, authors the HTML, and may create several frames in one run. Consumes credits. Also the edit path — brief it again on the same canvas, naming the frames to change.
Returns
{ job_id } immediately.
get_canvas_frame_creation
Polls an agent job started by create_canvas_frame. Takes job_id; returns the job status (pending / running / completed / failed) and, once completed, the created frame ids.
export_canvas
Starts an export job for a canvas. Takes canvas_id, format (png, jpg, pdf, pptx), optional frame_ids. Returns { job_id }.
get_canvas_export
Polls an export job. Takes job_id; returns the status and, once completed, a download URL.
Auth + errors
Every tool requires auth — OAuth (default) or an API key bearer header; see the overview. Errors come back as actionable messages, not bare status codes: an over-limit X post explains the weighted count, a skipped upload url says where valid urls come from, and an empty balance returns an “insufficient credits” message instead of running.Next
Connect your agent
Claude, Claude Code, Cursor, Codex, OpenClaw, Hermes — step by step.
Credits
What each tool costs.