MCP server for QPost — lets AI agents publish video and image posts to YouTube, TikTok, Instagram.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
API key from your QPost dashboard (Settings > API Keys)
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Create and publish (or schedule) a video or image post to connected platforms. Media must be supplied as a publicly reachable URL (mediaUrl / imageUrls) or base64 (mediaBase64) — this is a hosted server and cannot read files from your machine. Omit scheduledFor to publish immediately.
Main text/caption of the post
Optional title (YouTube)
Publicly reachable URL of the video or single image
IANA timezone, default "UTC"
Multiple image URLs for a carousel
Base64-encoded media bytes, if you have no public URL
ISO datetime; omit to publish immediately
Filename for mediaBase64, e.g. clip.mp4 — sets the MIME type
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Create and publish (or schedule) a video or image post to connected platforms. Media must be supplied as a publicly reachable URL (mediaUrl / imageUrls) or base64 (mediaBase64) — this is a hosted server and cannot read files from your machine. Omit scheduledFor to publish immediately.
| Argument | Type | Description |
|---|---|---|
| title | string | Optional title (YouTube) |
| caption* | string | Main text/caption of the post |
| mediaUrl | string | Publicly reachable URL of the video or single image |
| timezone | string | IANA timezone, default "UTC" |
| imageUrls | array | Multiple image URLs for a carousel |
| mediaKind* | string | |
| platforms* | array | |
| mediaBase64 | string | Base64-encoded media bytes, if you have no public URL |
| scheduledFor | string | ISO datetime; omit to publish immediately |
| mediaFilename | string | Filename for mediaBase64, e.g. clip.mp4 — sets the MIME type |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"caption",
"platforms",
"mediaKind"
],
"properties": {
"title": {
"type": "string",
"description": "Optional title (YouTube)"
},
"caption": {
"type": "string",
"minLength": 1,
"description": "Main text/caption of the post"
},
"mediaUrl": {
"type": "string",
"format": "uri",
"description": "Publicly reachable URL of the video or single image"
},
"timezone": {
"type": "string",
"description": "IANA timezone, default \"UTC\""
},
"imageUrls": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"description": "Multiple image URLs for a carousel"
},
"mediaKind": {
"enum": [
"video",
"image"
],
"type": "string"
},
"platforms": {
"type": "array",
"items": {
"type": "object",
"required": [
"platform"
],
"properties": {
"metadata": {
"type": "object",
"description": "Platform-specific options (privacy, tags, category…). See https://qpost.dev/docs",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"platform": {
"enum": [
"YOUTUBE",
"TIKTOK",
"INSTAGRAM"
],
"type": "string"
}
}
},
"minItems": 1
},
"mediaBase64": {
"type": "string",
"description": "Base64-encoded media bytes, if you have no public URL"
},
"scheduledFor": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "ISO datetime; omit to publish immediately"
},
"mediaFilename": {
"type": "string",
"description": "Filename for mediaBase64, e.g. clip.mp4 — sets the MIME type"
}
}
}Permanently delete a post you own.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}Get a single post by ID, including per-platform publish status.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}How a published post is doing: views, likes, comments and shares per platform, read live from the platform (TikTok so far), plus each platform's public URL.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}List the YouTube/TikTok/Instagram accounts connected to this QPost account. Call this before creating a post to see which platforms are available.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}List posts on this account, optionally filtered by status or platform.
| Argument | Type | Description |
|---|---|---|
| status | string | |
| platform | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"status": {
"enum": [
"DRAFT",
"SCHEDULED",
"POSTED",
"FAILED"
],
"type": "string"
},
"platform": {
"enum": [
"YOUTUBE",
"TIKTOK",
"INSTAGRAM"
],
"type": "string"
}
}
}Retry publishing a post that previously failed.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
}
}Update a post's caption, schedule, timezone, or status. Only the fields you pass are changed.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| status | string | |
| caption | string | |
| timezone | string | |
| scheduledFor | any |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"status": {
"enum": [
"DRAFT",
"SCHEDULED",
"POSTED",
"FAILED"
],
"type": "string"
},
"caption": {
"type": "string"
},
"timezone": {
"type": "string"
},
"scheduledFor": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
}
}
}