MCP Guide
The Yapper hosted MCP connector — a thin client over the public API.
Status: live. The API endpoints behind every tool are live.
The Yapper hosted MCP connector is a thin client over the public API. It contains no provider logic, Firebase reads, credit accounting, model routing, or private serializers.
Install
Hosted connector (recommended):
https://yapper.so/mcp/connectorPaste that URL into an MCP client that supports hosted HTTP connectors, then sign in with your Yapper account when prompted.
The hosted connector supports local files through a signed-upload handshake. A remote server cannot open a path on your computer itself, so the MCP client does the byte transfer locally:
- Call
yapper_create_asset_uploadwith the file's MIME type and optional name. PUTthe raw file bytes to the returneduploadUrl, including every returned header exactly.- Call
yapper_complete_asset_uploadwith the returnedassetId.
The completed asset's hosted URL can then be passed to a generation. Local stdio
clients can use yapper_upload_asset instead; it performs all three steps in one
call. Use yapper_import_asset only for media that already has a public HTTP(S)
URL. Agents should never send users to the Yapper UI just to upload a local file.
In ChatGPT, attach the file to your message instead. yapper_import_file
declares an Apps SDK file parameter, so ChatGPT hands Yapper a temporary download
link for the attachment and Yapper stores it as an asset. Google Drive links work
with yapper_import_asset when the file is shared as "Anyone with the link".
Grouping work into sessions
Sessions are the workspaces that group generations in the Yapper web app. To
keep a project's work together, create one with yapper_create_session (or pick
one with yapper_list_sessions) and pass its sessionId to
yapper_start_process, yapper_import_asset, and uploads. The process and its
outputs then appear together in that session. yapper_update_session renames a
session or sets its image from an asset, and the session's webUrl opens it in
the web app. Without a sessionId, outputs only appear in the team's asset
library.
To pick up where the in-app Yapper agent left off, yapper_list_session_messages
reads the session's conversation, newest first: each message's text, the asset
ids of its attachments, and the steps the agent took. The agent's reasoning and
its tool data are not included.
Working inside a session's workspace
Each session has a workspace: the folders, media, text documents, notes, and
pins you see in the web app, which the in-app Yapper agent also works from.
Start with yapper_get_workspace to see the tree. Items are addressed by id or
by path, such as /Characters/hero, and yapper_read_workspace_item reads a
folder's contents, a document's text, or an asset.
yapper_create_workspace_folder, yapper_write_workspace_document, and
yapper_place_assets_in_workspace create folders, write text documents, and
file existing media into a folder. yapper_update_workspace_item moves,
renames, pins, or annotates an item, and yapper_remove_workspace_item takes it
out of the tree without deleting any assets. Removing a tree item does not
always take its media out of the session, so the result lists what left and what
is still there unfiled; yapper_remove_assets_from_session takes media out of
the session itself, filed or not. Pass workspaceFolderId to
yapper_start_process to file its outputs into a folder as they finish.
Everything you change shows up in the web app, and the in-app Yapper agent in
that session is told about it on its next turn. For multi-step productions,
write a brief (for example /Brief.md with brief: true): the in-app agent
always reads it.
Building on a session's canvas
Each session also has a node canvas, the Canvas tool in the web app: text,
image, video, and audio cards wired into image, video, and LLM generation cards.
yapper_get_canvas returns every card with its settings, ports, and latest
versions, plus the wires between cards. yapper_add_canvas_nodes adds up to 50
cards in one call, already wired: give a card a ref and later cards wire from
it with inputs: [{ sourceRef }]. Media cards take an asset id and join the
session; generation cards take a model from yapper_list_models (or, for LLM
cards, from textModels in yapper_get_canvas) and that model's settings.
yapper_update_canvas_node, yapper_connect_canvas_nodes,
yapper_disconnect_canvas_nodes, and yapper_remove_canvas_nodes edit the
graph; wires are checked like a drag in the app. yapper_update_canvas_nodes
edits up to 100 cards in one call (all or nothing), for example to lay cards
out in a grid. While a client edits, the canvas shows it in the header and its
cursor on the card it last touched, like another member.
yapper_run_canvas runs generation cards in wiring order, each one reading the
selected output of the cards that feed it. It spends credits, so quote it first
with dryRun: true, and pass an idempotencyKey on the real run. The run
continues on the server with no tab open; poll yapper_get_canvas_run for each
card's state and outputs, and yapper_cancel_canvas_run takes cards that have
not started out of the queue. Every change shows up live on the canvas in the
web app.
Client integration rules
- Use the exact HTTPS connector URL above. Do not rewrite it to
http://. - A
401response from/mcp/connectorbefore sign-in is expected. It includesWWW-Authenticatemetadata that points the MCP client to the OAuth protected resource metadata. - Do not configure
/api/mcp/oauth/*as the MCP server URL. Those routes are only the OAuth registration, authorization, approval, and token endpoints. - Do not treat an unauthenticated JSON-RPC call as a connector failure. Complete
the hosted MCP OAuth flow first, then call
initializeandtools/list.
Tools
| Tool | Purpose | Status |
|---|---|---|
yapper_load_skill | Load image or video prompting guidance | Live |
yapper_whoami | Show connected team, your role, and scopes | Live |
yapper_estimate_process | Quote a generation's credits without starting it | Live |
yapper_start_process | Start a generation process (spends credits) | Live |
yapper_generate_speech | Legacy synchronous speech (may spend credits) | Live |
yapper_get_process | Poll one process | Live |
yapper_list_processes | List recent processes | Live |
yapper_list_assets | List generated or imported assets | Live |
yapper_get_asset | Fetch one asset | Live |
yapper_update_asset | Favorite an asset, or restore it from the trash | Live |
yapper_trash_asset | Move an asset to the trash (purged after 30 days) | Live |
yapper_import_asset | Import an external HTTP(S) asset | Live |
yapper_import_file | Import a file attached in ChatGPT | Live |
yapper_create_asset_upload | Create a hosted signed-upload ticket | Live |
yapper_complete_asset_upload | Finalize a hosted signed upload | Live |
yapper_upload_asset | Upload a local path in one call (local stdio only) | Live |
yapper_list_models | List available models and capabilities | Live |
yapper_get_model_schema | Fetch one model's authenticated input schema | Live |
yapper_list_audio_voices | List voices compatible with an audio model | Live |
yapper_list_sessions | List or search the team's sessions | Live |
yapper_get_session | Read one session and its web link | Live |
yapper_list_session_messages | Read a session's chat with the in-app Yapper agent | Live |
yapper_create_session | Create a session to group work | Live |
yapper_update_session | Rename a session or set its image | Live |
yapper_add_assets_to_session | Add existing assets to a session | Live |
yapper_remove_assets_from_session | Take media out of a session (keeps the assets) | Live |
yapper_get_workspace | List a session's folders, files, and unfiled media | Live |
yapper_read_workspace_item | Read a folder, a document's text, or an asset | Live |
yapper_create_workspace_folder | Create folders along a workspace path | Live |
yapper_write_workspace_document | Create or overwrite a text document or the brief | Live |
yapper_place_assets_in_workspace | File existing media into a workspace folder | Live |
yapper_update_workspace_item | Move, rename, pin, or annotate a workspace item | Live |
yapper_remove_workspace_item | Remove an item from the tree (keeps its assets) | Live |
yapper_get_canvas | Read a session's canvas: cards, wires, versions | Live |
yapper_get_canvas_node | Read one canvas card with every version | Live |
yapper_add_canvas_nodes | Add wired cards to a canvas | Live |
yapper_update_canvas_node | Edit a card's prompt, model, settings, or layout | Live |
yapper_update_canvas_nodes | Edit up to 100 cards at once (e.g. a re-layout) | Live |
yapper_remove_canvas_nodes | Remove cards and their wires | Live |
yapper_connect_canvas_nodes | Wire one card's output into another card | Live |
yapper_disconnect_canvas_nodes | Remove a wire between two cards | Live |
yapper_run_canvas | Run canvas cards in order (spends credits) | Live |
yapper_get_canvas_run | Check a canvas run's progress and outputs | Live |
yapper_cancel_canvas_run | Take queued cards out of a canvas run | Live |
yapper_get_credits | Check team credit balance | Live |
yapper_get_usage | Check team and acting-member usage | Live |
yapper_get_usage_breakdown | Credit spend by model and source over time | Live |
yapper_get_usage_cycle | This billing cycle's credits and the next refill | Live |
yapper_get_agent_usage | Included agent allowance and usage by model | Live |
yapper_list_usage_ledger | List individual credit charges and refunds | Live |
yapper_list_session_usage | List sessions with their all-time spend | Live |
yapper_list_member_usage | Spend per member (owner or admin connection) | Live |
yapper_list_members | Team members with their roles | Live |
yapper_get_storage_usage | Stored bytes and asset counts by type | Live |
Resources
yapper://processes/{processId}
yapper://assets/{assetId}Use resources/templates/list to discover these templates and
resources/read to fetch one process or asset as JSON.
Agent behavior
- Call
yapper_get_creditsbefore expensive work when the user asks about feasibility. - Call
yapper_whoamibefore mixing hosted and local connectors. - Quote paid work with
yapper_estimate_process, tell the user what will be generated and the total credits, and wait for their go-ahead before the first paid run of a batch. Skip the wait only when they already approved that exact batch or gave a credit budget that covers it. - Use idempotency keys for retried
yapper_start_processcalls. - Poll process status instead of assuming immediate completion, waiting the
returned
suggestedPollAfterSecondsbefore eachyapper_get_processcall. - Return asset ids and URLs from the public response shape only.
Security boundary
The hosted MCP connector uses 24-hour ymcp_ access tokens plus rotating
90-day refresh tokens from the Yapper OAuth flow. Active clients renew the
refresh window automatically. Local stdio MCP clients receive credentials from
local config or environment. MCP clients should never request browser session
cookies or Firebase credentials.
AI Consumption Guide
How AI agents should discover and call the Yapper API.
Add canvas cards POST
Adds 1-50 cards in one request, already wired. Give a card a ref and later cards in the same request can wire from it with inputs: [{ sourceRef }]; sourceNodeId wires from a card already on the canvas. A wire without port goes to the first free port that takes the source's type (text into prompt, images into references); wires are checked like a drag in the app: matching types, room in the port for the card's model, and no loops. Cards without a position are laid out left to right after the existing cards. Media cards take an assetId of their type and add that asset to the session. Generation cards default to the web app's default model and settings; modelId comes from GET /models for image-gen and video-gen and from textModels in GET /canvas for text-gen, and settings are checked against that model (video settings snap to the model's nearest supported values, as in the app). A field that does not apply to the card's kind is rejected. Shows up live on the canvas in the Yapper web app. Free. Uses the processes:write scope.