MCP server
The same endpoints this reference documents, offered as tools an AI assistant can call. Point an MCP client at Vsub, approve one workspace, and it can create videos, check on them and export them without you writing any code.
Connect your client
One url, spoken over Streamable HTTP. Clients that can sign in need nothing else: paste it, approve one workspace in the browser tab that opens, and the tools appear. Clients that only send static headers can carry an API token instead.
https://api.vsub.io/mcp- 1Open Settings and go to Connectors.
- 2Click Add custom connector and paste the url.
- 3Click Connect, sign in, then pick a workspace and approve.
https://api.vsub.io/mcpMenu names move around between client versions, and any client built on an MCP SDK works the same way. The url is the part that matters.
Tools
Each tool is one endpoint of this API, with the same validation, credit cost and webhooks. Creating a video returns immediately with a processing status, so an assistant should call get_video again a little later, or pass webhookUrl and wait to be told.
create_caption_videocreate_ai_videocreate_quiz_videocreate_roblox_videocreate_fake_text_videoget_videorender_videoupload_filelist_voiceslist_caption_templatesget_workspacelist_credit_logslist_balance_logsTools marked video spend credits, exactly as the same call over HTTP would. A tool that fails answers with the error text rather than breaking the conversation, so an assistant can correct its arguments and try again.
Authorization
Vsub is both the resource server and the authorization server, so there is nothing to set up before connecting. A client registers itself, sends you here to approve a workspace, and receives a token scoped to that one workspace. PKCE is required and client secrets are not used.
GET /.well-known/oauth-protected-resourceGET /.well-known/oauth-authorization-serverPOST /oauth/registerGET /oauth/authorizePOST /oauth/tokenPOST /oauth/revokeAn unauthorized call to /mcp answers 401 with the resource metadata url in WWW-Authenticate, which is how a client finds its way to the flow above on its own.
curl -i -X POST "https://api.vsub.io/mcp"
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="https://api.vsub.io/.well-known/oauth-protected-resource"Trying it by hand
The endpoint speaks plain JSON-RPC, so an API token is enough to see what an assistant sees.
curl -X POST "https://api.vsub.io/mcp" \
-H "Authorization: Bearer vp_a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_roblox_video",
"arguments": {
"script": "My little brother deleted my Roblox account...",
"render": {}
}
}
}'