Sync MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SYNC_API_KEY | No | Your Sync API key (stdio transport). If omitted, interactive login is used. | |
| SYNC_BASE_URL | No | API base URL | https://api.sync.so |
| MCP_ISSUER_URL | No | OAuth issuer URL (HTTP transport only) | |
| OAUTH_REGISTRATION_SECRET | No | Shared secret for client registration (HTTP transport only) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| open-upload-widgetA | Open the Sync image/audio upload widget so a user can choose a ChatGPT file or upload a supported local image/audio file, then stage it as a durable Sync assetId. Use this by default when the user wants to upload or choose a local image/audio file and has not attached the file to ChatGPT yet. For image-to-speech requests, call this with requestedMediaType: "image" and tell the user to enter the exact requested text in the widget Script field. This widget cannot accept video or MP4 files. Never use, recommend, or describe this tool for local video requests, and never use requestedMediaType: "video". For local video or MP4, ask the user to attach the video to the ChatGPT composer, then call upload-media or create-lipsync with file params. |
| upload-mediaA | Upload a user-provided image, video, or audio file to Sync asset storage and return a durable assetId. Use this when the user uploaded media in chat and a later Sync tool call should reference it by assetId. The file field must be the uploaded ChatGPT file object. For public URLs, use assets_create or pass the URL directly to create-lipsync. This tool only stores the media; it does not create a lipsync generation. After it returns, pass the assetId to create-lipsync as imageAssetId, videoAssetId, or audioAssetId. |
| create-lipsyncA | Create a lipsync video from audio + EITHER a video or a still image (an image drives sync-3 image-to-video). Defaults to sync-3 unless the user explicitly requests another model. Generations are attached to an existing project with the requested projectName, or to "ChatGPT generations" by default; if no matching project exists, it is created first. For "make this image/video say X" requests, pass |
| assets_get-allA | List assets (video/audio/image) in your organization. Use to find an existing assetId. |
| assets_createA | Register a media URL as a reusable asset (e.g. the |
| assets_create-upload-urlA | Upload step 1: get a presigned URL for a local file. PUT the raw bytes to the returned |
| assets_getA | Get one asset by id (details + URL). |
| assets_updateC | Update an asset's name or visibility by id. |
| assets_deleteA | Delete an asset by id. |
| generate_create-generationA | Create a lipsync video. Provide a video input (or an image for sync-3) and an audio input, each by |
| generate_get-generationA | Get a generation by id. In ChatGPT, pass |
| generate_estimate-costA | Estimate the credit cost of a generation before creating it. Takes the same body as generate_create-generation. |
| generate_get-generationsA | List recent generations for your organization. Use to find generation ids or check status. |
| models_getA | List the lipsync models available to you (e.g. lipsync-2, lipsync-2-pro, sync-3, react-1). Use a returned model id as the |
| generations_estimate-costB | Estimate the credit cost of a generation before creating it. Returns estimated credits. |
| generations_get-by-idA | Get a generation by id (organization-scoped). Returns status and, when COMPLETED, |
| generations_deleteA | Delete a generation by id. Only terminal generations (COMPLETED/FAILED/REJECTED) can be deleted — deleting one that is still processing returns 409. |
| projects_get-allC | List the projects in your organization. |
| projects_createA | Create a project to group related generations and assets. Pass the returned |
| projects_attach-assetB | Attach an asset to a project |
| projects_detach-assetB | Detach an asset from a project |
| projects_getA | Get a project by id. |
| projects_updateA | Update a project's name, description, visibility, or mode. |
| projects_deleteA | Delete a project. Generations and assets attached to it are not deleted — they just stop being grouped under it. |
| tts_createA | Synthesize standalone speech audio from text. Use only when the user specifically asks for an audio file or voice preview. Do not use this for "make this image/video say X" lipsync requests — use create-lipsync with |
| voices_get-voicesA | List available voices — premade ElevenLabs voices plus voices your org has cloned. For "make this image/video say X", use a returned voice |
| voices_clone-voiceA | Clone a custom voice from an audio or video sample — pass a Sync-hosted |
| voices_get-voiceB | Get a voice by ID |
| voices_delete-voiceA | Delete a cloned voice by id, freeing a clone slot. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| sync-upload-widget-v7 | Select or upload media inside ChatGPT, stage it as a durable Sync asset, and report the assetId back into the conversation. |
| sync-upload-widget-v1 | Select or upload media inside ChatGPT, stage it as a durable Sync asset, and report the assetId back into the conversation. |
| sync-upload-widget-v2 | Select or upload media inside ChatGPT, stage it as a durable Sync asset, and report the assetId back into the conversation. |
| sync-upload-widget-v3 | Select or upload media inside ChatGPT, stage it as a durable Sync asset, and report the assetId back into the conversation. |
| sync-upload-widget-v4 | Select or upload media inside ChatGPT, stage it as a durable Sync asset, and report the assetId back into the conversation. |
| sync-upload-widget-v5 | Select or upload media inside ChatGPT, stage it as a durable Sync asset, and report the assetId back into the conversation. |
| sync-upload-widget-v6 | Select or upload media inside ChatGPT, stage it as a durable Sync asset, and report the assetId back into the conversation. |
TDQS
Scored across 29 tools
Several tools overlap in purpose: generate_get-generation and generations_get-by-id both retrieve a generation, generate_estimate-cost and generations_estimate-cost both estimate cost, and create-lipsync vs generate_create-generation have overlapping creation flows. The upload-related tools (open-upload-widget, upload-media, assets_create-upload-url) also occupy similar territory, though their descriptions try to differentiate use cases.
Tool names are highly inconsistent, mixing hyphens and underscores (create-lipsync vs generate_create-generation), using both resource-first and verb-first patterns (generate_get vs generations_get-by-id), and switching prefixes for the same resource (generate_ vs generations_). This makes the naming pattern unpredictable and confusing.
With 29 tools, the server feels heavy. Redundancy inflates the count: two cost-estimate tools and two get-generation tools do the same thing. While the domain is broad, several tools could be consolidated, making 29 unnecessarily unwieldy.
The tool set covers the main domain well: full CRUD for assets and projects, generation lifecycle (create, get, list, estimate, delete), voice cloning and management, and TTS. Minor gaps exist (no voice update, no generation cancellation), but agents can accomplish most workflows without dead ends.