Tools

All uPubly MCP server tools — input schemas, outputs and examples.

Calls via tools/call on the POST /mcp endpoint. All accept an optional workspace_id (uuid) — omitted uses the user's default workspace.

Posts

post_accounts_list

Lists connected social accounts — discovers the account_id for scheduling.

{ "workspace_id": "optional" }

→ { "accounts": [{ "account_id", "platform", "username" }] }

post_list

Lists posts (templates) with their schedules.

{ "workspace_id": "?", "page": 0, "size": 20, "search": "optional" }

post_create

Creates a post and, if schedules is present, schedules the publication right away. Without schedules it becomes a draft.

{
  "description": "Main post text",
  "caption": "Caption (optional)",
  "name": "Internal name (optional)",
  "media": ["file_id_1", "file_id_2"],
  "schedules": [
    {
      "account_id": "account uuid (post_accounts_list)",
      "scheduled_at": "2026-09-25T14:00:00-03:00",
      "post_type": "feed|reels|story|video (inferred if omitted)"
    }
  ]
}

media takes file_ids from Storage (see storage_request_upload).

post_delete

{ "post_id": 123 }

Storage

Upload is presigned in 2 steps:

storage_request_upload

{
  "file_name": "banner.png",
  "content_type": "image/png (inferred if omitted)",
  "file_size": 1024,
  "folder_id": "optional"
}

→ { "upload_url", "file_id", "upload_id", ... }. PUT the binary to upload_url and then confirm:

storage_complete_upload

{ "file_id": "...", "upload_id": "...", "parts": [{ "part_number": 1, "etag": "..." }] }

storage_usage

→ bytes used vs plan limit.

media_upload_from_url

One-call shortcut: downloads an image from a public http(s) URL and uploads it to storage — returns file_id (the media_id used in refs/avatars/scenes) + file_url. Max 20MB; for larger files or local bytes use the presigned path.

{ "url": "https://.../image.png", "file_name": "optional" }

Brand (brain)

Always read brand_get before proposing changes — it returns the full state (identity, visual identity, memory).

brand_update_identity

{ "language": "pt-BR", "region": "...", "website": "...", "active_platforms": ["instagram"] }

brand_update_visual_identity

{
  "primary_color": "#FF5500", "secondary_color": "...", "accent_color": "...",
  "font_display": "...", "font_body": "...", "tagline": "...",
  "logo_file_id": "storage file_id"
}

brand_update_memory

Creator memory — what the AI learned about the style:

{
  "preferred_angles": ["..."], "weak_angles": ["..."],
  "preferred_cta": ["..."], "avoid_cta": ["..."],
  "avg_retention": 42.5, "content_stats": { "...": "free-form" }
}

brand_add_document

Document in the knowledge base (RAG) — brand guide, strategy, manifesto, research:

{
  "document_type": "brand_guide|brand_voice|strategy|manifesto|market_research|script|report|reference|high_performance|low_performance",
  "title": "...",
  "content": "plain text",
  "file_url": "file URL (storage)",
  "source_url": "optional", "metadata": {}
}

Billing

plans_list

→ { "plans": [...], "topup_products": [...] } — active plans with monthly/yearly pricing, monthly credits and trial days.

Creates the checkout (payment link) for the user to subscribe to a plan:

{ "plan_id": "plan id (plans_list)", "billing_cycle": "monthly|yearly" }

→ { "checkout_url", "session_id" } — send checkout_url to the client so they can complete the subscription. Prices always come from the server-side catalog — the agent never injects values.

credits_balance

The user's credit balance — check before operations that debit credits (UGC jobs, avatar/scene generation):

→ { "monthly_balance", "topup_balance", "total_balance", "monthly_allowance", "cycle_ends_at", "plan_name" }

UGC (avatars, scenes, generation)

The ugc_* namespace — models, estimate, async jobs, avatars, scenes, templates and projects — has its own reference: UGC — Generation · Avatars · Video generation.