MCP
Faceless ships a Model Context Protocol (MCP) server so agent runtimes (Claude, Claude Code, Claude Desktop, Cursor and any other MCP client) can call the API as tools. There are two ways to connect: the remote server over streamable HTTP, or a local stdio server. The remote server accepts OAuth (sign in with your Faceless account, no key handling) or an API key from your team settings at https://faceless.so/team; the local server needs an API key.
Connect Claude (claude.ai and the Claude apps)
The fastest path for Claude users is a custom connector. No install, no API key: you sign in with your Faceless account and approve exactly the permissions you want. The same steps, with a copy button and a live "Connected" status, are in the app under Team settings > Claude & API (https://faceless.so/team?section=api).
- In Claude, open Customize > Connectors and click Add custom connector.
- Name it Faceless, enter
https://faceless.so/api/v1/mcpand click Add. If Claude asks how to sign in, choose Sign in now and Register automatically. - Click Connect. Claude opens the Faceless consent screen: sign in, pick the team to connect, untick any permissions you do not want to grant, and click Authorize.
- In a chat, click + > Connectors and turn on Faceless. Try: "Check my Faceless credits" or "Make a faceless video about deep sea creatures and post it to my YouTube".
Works on every Claude plan (the Free plan allows one custom connector). On Team and Enterprise plans an Owner adds the connector first in Organization settings > Connectors, then each member clicks Connect. Videos made from Claude use your team's credits, the same as in the app; when they run out, the tool error links to https://faceless.so/billing?tab=credits. Disconnect anytime from Team settings > Claude & API.
Faceless in the Claude directory
The Faceless connector listed in Claude's connector directory uses https://faceless.so/api/v1/mcp/claude. It signs in the same way (OAuth, you pick the team and permissions) and carries the tools for managing, rendering and publishing the videos you already have in Faceless:
faceless_get_me: the connected team, plan and credit balancefaceless_list_videos,faceless_get_video,faceless_get_video_status: your videos and where each one standsfaceless_update_video,faceless_select_video_thumbnail: per-platform titles, captions and descriptions, and which thumbnail a video usesfaceless_render_video,faceless_get_render: render a finished video to MP4 and follow the renderfaceless_list_accounts,faceless_publish_post,faceless_schedule_post,faceless_post_now,faceless_cancel_post,faceless_get_calendar: post now, schedule, bring a scheduled post forward, cancel and see what is queuedfaceless_list_series,faceless_get_series,faceless_list_series_episodes: your automated series and their episodesfaceless_get_analytics: views, likes, comments and posting volume across platforms
Making new videos and buying credits are not part of this connector; do those in the Faceless app at https://faceless.so.
Try: "List my Faceless videos from this week", "Schedule my latest Faceless video to YouTube and TikTok for 6pm tomorrow" or "How did my Faceless posts do on TikTok over the last 30 days?".
Troubleshooting: a forbidden_scope error means the permission was unticked at sign-in, so disconnect and reconnect the connector and keep it ticked. A schedule_post rejection usually means the platform's post metadata is missing; set it with faceless_update_video first. Publishing needs the platform connected in Faceless (check with faceless_list_accounts). Anything else: [email protected].
Remote server (nothing to install)
The remote server lives at https://faceless.so/api/v1/mcp and speaks the streamable HTTP transport. Authenticate with the same Authorization header as the REST API.
Claude Code:
claude mcp add --transport http faceless https://faceless.so/api/v1/mcp \
--header "Authorization: Bearer fl_live_..."
Any MCP client that supports streamable HTTP works the same way: point it at the URL and send Authorization: Bearer fl_live_... with every request.
Local server (stdio)
For clients that only speak stdio, run the server locally. Two equivalent ways: npx -y faceless-mcp, or faceless mcp if the CLI is installed. Both read the key from the FACELESS_API_KEY environment variable.
Claude Code:
claude mcp add faceless --env FACELESS_API_KEY=fl_live_... -- npx -y faceless-mcp
Claude Desktop (Settings > Developer > Edit Config, claude_desktop_config.json):
{
"mcpServers": {
"faceless": {
"command": "npx",
"args": ["-y", "faceless-mcp"],
"env": { "FACELESS_API_KEY": "fl_live_..." }
}
}
}
Cursor (.cursor/mcp.json in your project, or the global ~/.cursor/mcp.json):
{
"mcpServers": {
"faceless": {
"command": "npx",
"args": ["-y", "faceless-mcp"],
"env": { "FACELESS_API_KEY": "fl_live_..." }
}
}
}
Use the remote server when you want zero install and always-current tools; use the local one when your client only speaks stdio or your network policy prefers a locally spawned process.
Tools
All 32 API operations with an MCP tool are exposed as tools named faceless_*, and each respects the key's scopes (a missing scope surfaces as a forbidden_scope error). The core ones an agent reaches for:
faceless_get_me,faceless_get_credits: identity, scopes and budgetfaceless_list_voices,faceless_list_options: catalogs to choose voices, styles and modelsfaceless_create_video,faceless_get_video_status,faceless_render_video,faceless_get_render: the create, poll, render, poll lifecyclefaceless_create_caption_video: caption existing footagefaceless_update_video,faceless_publish_post,faceless_schedule_post,faceless_post_now,faceless_cancel_post,faceless_get_calendar: publishing and schedulingfaceless_create_series,faceless_list_series,faceless_get_series,faceless_update_series,faceless_delete_series,faceless_generate_series_episode,faceless_list_series_episodes: automated seriesfaceless_list_fast_track,faceless_buy_fast_track_video: Fast Track, the quickest way to a video (pick a type, a category and a script; 10 credits)faceless_list_videos,faceless_get_video,faceless_delete_video,faceless_list_accounts,faceless_create_asset,faceless_get_analytics: the rest of the surface
Mutating tools accept an optional idempotencyKey argument with the same semantics as the REST Idempotency-Key header: retries with the same key and arguments replay the stored result instead of re-running (and re-charging). Pass one when a tool call might be retried.
Tool results use the same envelope and error types as the REST API; see errors and rate limits. Rate limits also apply per key, so a busy agent should back off on rate_limited.
Related
- Prefer commands over tools? The CLI covers the same surface.
- Claude Code plugin (skill + MCP server in one install):
/plugin marketplace add Side-Products/faceless-claude-pluginthen/plugin install faceless@faceless. - A packaged Claude Skill with ready-made workflows:
npx skills add Side-Products/faceless-skill(https://github.com/Side-Products/faceless-skill). - The machine-readable surface: https://faceless.so/llms.txt and https://faceless.so/api/v1/openapi.json.