Muse MCP Server
October 13, 2026
Table of contents
The useapi.net Muse MCP server lets an AI assistant such as Claude Code, Cursor or VS Code Copilot use Muse, Meta’s AI agent, on your own Muse account. It is a hosted Model Context Protocol server with 27 tools: generate images and videos, chat with the Muse agent, answer its permission requests, and manage the account’s files. Each tool calls the Muse API, so the same rules, limits and allowance apply. Nothing needs to be installed or hosted.
Endpoint and authorization
https://api.useapi.net/v1/muse/mcp
- Transport: Streamable HTTP.
- Authorization: your useapi.net API token in the
Authorization: Bearer …header, see Setup useapi.net. - You need at least one Muse account added with Setup Muse. Adding and removing accounts is not available over MCP: use POST /accounts or the Setup Muse page.
Setup
Replace YOUR_API_TOKEN with your useapi.net API token.
Claude Code
claude mcp add --transport http useapi-muse https://api.useapi.net/v1/muse/mcp --header "Authorization: Bearer YOUR_API_TOKEN"
Cursor
In ~/.cursor/mcp.json:
{
"mcpServers": {
"useapi-muse": {
"url": "https://api.useapi.net/v1/muse/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_TOKEN"
}
}
}
}
VS Code
In .vscode/mcp.json:
{
"servers": {
"useapi-muse": {
"type": "http",
"url": "https://api.useapi.net/v1/muse/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_TOKEN"
}
}
}
}
Windsurf and other clients
Any client that supports remote MCP servers over HTTP with custom headers works. The usual JSON shape:
{
"mcpServers": {
"useapi-muse": {
"serverUrl": "https://api.useapi.net/v1/muse/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_TOKEN"
}
}
}
}
Some clients name the address field url instead of serverUrl.
Test it with curl
curl -s https://api.useapi.net/v1/muse/mcp \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'
curl -s https://api.useapi.net/v1/muse/mcp \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
The first call answers with the server’s name useapi-muse and its instructions for the assistant, the second with the 27 tools.
Tools
Most tools take an optional email, the Muse account to use. It can be left out when the API token has one Muse account.
Accounts and permissions
| Tool | What it does | Main parameters |
|---|---|---|
muse_list_accounts | Lists your Muse accounts with health, maxJobs and weekly usage. | Â |
muse_get_account | Reads one account with its live weekly usage. | email |
muse_list_approvals | Lists the agent’s permission requests across all chats, pending and decided. | email, status, limit |
muse_get_permissions | Reads whether the agent asks before acting on websites and connected apps, and the standing rules. | email |
muse_set_permission_defaults | Sets web and connectors to auto_allow or always_ask. | email, web, connectors |
muse_set_permission_rule | Changes one rule to allow, ask or deny. | permissionId, mode |
muse_delete_permission_rule | Removes one rule. | permissionId |
Images and videos
| Tool | What it does | Main parameters |
|---|---|---|
muse_generate_image | Makes one image from a prompt, optionally from up to 9 input images. | prompt, image_1..image_9, email |
muse_generate_video | Makes one video of about 10 seconds with sound, from a prompt and optional input images, videos and audio. | prompt, image_1..image_9, video_1..video_3, audio_1..audio_3 |
muse_get_job | Reads a job, and with wait: true waits for it to finish. | jobid, wait, history |
muse_list_jobs | Lists the jobs running now. | Â |
The job tools also take replyRef, your own reference echoed back in the job record.
Chat
| Tool | What it does | Main parameters |
|---|---|---|
muse_chat | Sends a message to the Muse agent and returns its answer: text, files, widgets and permission requests. Without chatId it starts a new chat. | message, chatId, files, email |
muse_get_chat | Reads a chat. With wait: true it follows the running answer and returns the rest. | chatId, wait, after, limit, before |
muse_list_chats | Lists the account’s chats, newest first. | email, limit, cursor |
muse_delete_chat | Deletes a chat. Its files stay. | chatId |
muse_cancel_chat | Stops the answer Muse is working on. | chatId |
muse_answer_approval | Answers a permission request with allow_once, allow_always or deny, then follows the chat and returns the answer together with the agent’s continuation. | chatId, approvalId, decision, wait |
muse_answer_widget | Answers a quick-reply widget with an option index or your own text, then follows the reply. | chatId, widgetId, option or text, wait |
Assets
| Tool | What it does | Main parameters |
|---|---|---|
muse_list_assets | Lists the account’s images, videos and audio files as asset ids. | email, type, origin, limit, cursor |
muse_upload_asset | Uploads an image, video or audio file from a public https URL, up to 50 MB. | url, email |
muse_get_asset | Returns an image of up to about 1 MB as an image, or the file’s type, size and download URL. | assetId |
muse_delete_asset | Deletes an asset. | assetId |
Workspace files
| Tool | What it does | Main parameters |
|---|---|---|
muse_list_files | Lists a folder of the account’s workspace, or one file. | email, path |
muse_search_files | Finds files by part of the name and/or extension. | name, extensions, path, limit, offset |
muse_read_file | Returns a text file of up to about 200 KB as text, or an image of up to about 1 MB as an image. | path |
muse_write_file | Writes a file into the workspace, as text or base64, for the agent to use in a chat. | path, content or contentBase64, contentType |
muse_delete_file | Deletes a file. | path |
The full input schema of every tool comes from tools/list.
Long-running work
MCP clients usually give up on a tool call after about a minute, so a tool waits up to about 50 seconds:
- An image or a short answer usually finishes in that time, and the tool returns the result.
- A video usually takes longer.
muse_generate_videothen returns thejobid, andmuse_get_jobwithwait: truepicks it up. - A chat answer that is still running returns its
chatIdwithstatus: "running"and alastEventId.muse_get_chatwithwait: trueandafterset to thatlastEventIdreturns the rest.
Clients that ask for progress notifications get one about every 10 seconds while a tool waits. Results show up to two small images as previews, and every file comes with its assetId and download URL.
When a chat answer returns status: "waiting_for_approval", the agent waits for your permission: the assistant should ask you, then answer with muse_answer_approval.
Example prompts
- “Make a 10-second video of a corgi surfing at sunset, in exactly 9:16 aspect ratio.”
- “Make an image of a vintage motorcycle on wet cobblestones at night, then animate it into a video.”
- “Ask Muse to research the top 5 electric cars of 2026, write a comparison table as a CSV, and give me the files.”
- “Upload this photo from its URL and restore and colorize it.”
- “List my Muse chats and continue the newest one: ask for a shorter version.”
Limits and notes
- The tools use your Muse account, its weekly Muse allowance, and the same rules as the REST API, such as
maxJobsfor jobs. - Before some actions, such as reaching a website or acting in a connected app, the agent asks for permission. See GET /accounts/
email/permissions to change when it asks. - Custom connectors on claude.ai need OAuth sign-in, which this server does not support yet. Use Claude Code or another client that can send an
Authorizationheader. - A client may send up to 20 JSON-RPC requests in one batch.
- If the client sends an
MCP-Protocol-Versionheader, it must be one of the supported versions:2025-06-18,2025-03-26or2024-11-05. - Every tool call shows in your usage stats (
bot=muse) as modelmuse-mcp, with the tool name as its status, orfailed.