Agent
Tool reference
Every tool the MCP server exposes, what it takes, and what it returns.
Tools are listed only when your token carries the scope they need. An agent that cannot see a tool will not call it.
Every tool calls the same REST route the API uses. There is no second implementation, so a limit enforced over REST is enforced over MCP.
Scopes
| Name | Type | Description |
|---|---|---|
accounts:read | read | List connected channels. |
posts:read | read | Read publishing history, replies and insights. |
posts:write | write | Publish, delete, reply, hide and upload. |
offline_access | oauth | Keep the agent connected after the browser closes. |
accounts:read reads connected channels. posts:read reads publishing history. posts:write publishes, deletes, replies and uploads. offline_access keeps the connection alive after you close the browser.
Tools
| Name | Type | Description |
|---|---|---|
list_accounts | accounts:read | Connected channels with their ids. Call it before publishing. |
select_channels | accounts:read | Pick which channels to post to, and show the result to the person before publishing. |
list_platforms | accounts:read | Every channel and its limits. |
list_posts | posts:read | Recent publishes made through uplika. |
list_channel_posts | posts:read | What is on the channel right now, including posts written in the app. Each item carries a permalink. |
publish | posts:write | content, accountIds, optional mediaIds, and options for per-channel settings. YouTube needs options.youtube.title and exactly one video. |
open_post | posts:read | One post's text, reply thread and metrics in a single call. The right tool when someone hands you a link. |
get_post | posts:read | One publish and the status of each target. |
retry_post | posts:write | Retry only the targets that failed. |
delete_post | posts:write | Delete the post from the channel. |
list_replies | posts:read | The reply thread under a post. |
reply | posts:write | id, content, optional replyTo for a nested reply. |
hide_reply | posts:write | replyId, postId, optional hide (default true). |
get_insights | posts:read | Views, likes, replies, reposts, quotes, shares. |
get_quota | posts:read | How much of the 24 hour allowance is used. Live usage from the platform, not the static limits. |
media_upload_link | posts:write | Ask the person to upload from their own device. Returns a short-lived link to hand them. |
media_upload_status | posts:read | Has the person uploaded yet? Returns waiting, ready or expired plus the media ids. |
media_from_url | posts:write | Attach a file that is already on the public web. One step, no upload. Share links from Drive and Dropbox return HTML, not the file. |
media_presign | posts:write | Get a media id and a one-time upload URL. |
media_complete | posts:write | Confirm the upload before publishing. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "publish",
"arguments": {
"content": "Shipped nested replies today.",
"accountIds": ["acc_01H..."],
"mediaIds": ["med_01H..."]
}
}
}Common questions
Why can my agent not see a tool?
Because the token does not carry that tool's scope. Tools are listed per scope, so a read-only connection never shows publish at all rather than failing when it is called.
Which tool should the agent call first?
list_accounts. publish takes account ids, not handles, so an agent that skips it either guesses or asks you a question it could have answered itself.
Do the tools behave differently from the REST API?
No. Every tool calls the same route REST does. There is no second implementation, so a limit enforced over REST is enforced over MCP.