Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.faces.app/llms.txt

Use this file to discover all available pages before exploring further.

The Faces MCP (Model Context Protocol) server lets AI assistants like Claude build interactive, explorable decks slide by slide. Your assistant writes each slide’s code directly, without using any credits.

What is MCP?

MCP is an open protocol that lets AI assistants connect to external tools. When you connect Claude to the Faces MCP server, Claude can:
  • Create a blank project to start a new presentation (in your personal team or any team you belong to)
  • List the teams you belong to so the assistant can pick the right one
  • List and browse your existing projects (including team-shared projects)
  • Read and edit individual slides: inspect slide source files and write new ones — works for any project where you are the owner, a team member (on team-shared projects), or an invited editor
There is no server-side “generate a full presentation” tool exposed through MCP. The assistant itself authors every slide. To build a new deck, it creates a blank project and then fills in slides one at a time.

Available tools

Teams

ToolDescription
list_teamsList the teams you belong to. Returns id, slug, name, role, and isPersonal. Use the team id when calling create_project.

Projects

ToolDescription
create_projectCreate a new blank project. Returns the projectSlug and editorUrl. Accepts an optional teamId — omit it to use your personal team, or pass an id from list_teams to create the project under a specific team.
list_projectsList projects you can access (owned, team-shared, or shared with you) with pagination (cursor, limit, published).
get_projectGet project details and URLs for a given slug.
rename_projectRename a project. The slug and URLs stay the same.
duplicate_projectCreate a full copy of a project, including all slides. Returns a new projectSlug and editorUrl.

Publishing and domains

ToolDescription
publish_projectPublish a project’s latest version, making it publicly accessible. Returns the publishedUrl.
unpublish_projectTake a published project offline. The project and its slides are kept.
get_project_urlGet a project’s current live URL (subdomain or custom domain plus path) and the subdomains and domains available to switch to.
update_project_urlChange a project’s path, switch subdomains, or point it at a custom domain. Requires a paid plan.
create_custom_subdomainCreate a custom subdomain a project can be hosted on, then connect it with update_project_url.
create_custom_domainConnect a custom domain and return the DNS records to configure. Connect it with update_project_url once DNS is set up.

Slides

ToolDescription
list_slidesList all slides in a project. Returns slide IDs and names.
get_slideRead a slide’s source files (face.tsx, face.content.json, face.controls.json).
create_slideCreate a new empty slide. Returns the new slideId. Pass editing: true to show the loading gradient immediately.
update_slideUpdate a slide’s source files. Validates and compiles before saving; returns errors if the code doesn’t compile.
start_slide_editingShow the loading gradient in the editor before making edits.
finish_slide_editingClear the loading gradient after editing (always call, even on failure).
get_slide_guideGet the full slide authoring reference (file formats, block types, controls, typography, examples). Call before writing slide code for the first time.

Building a new presentation

  1. get_slide_guide: read the authoring reference (first time only)
  2. (Optional) list_teams: if the user might want the project in a specific team, list them and ask. Otherwise skip and the personal team will be used.
  3. create_project({ name, teamId? }): returns projectSlug and editorUrl
  4. For each slide:
    1. create_slide({ projectSlug, name, editing: true }): returns slideId
    2. update_slide({ projectSlug, slideId, files }): writes face.tsx, face.content.json, face.controls.json
    3. finish_slide_editing({ projectSlug, slideId }): clears the loading gradient
  5. Share the editorUrl with the user.

Editing an existing slide

  1. get_slide_guide: if you haven’t read it yet
  2. start_slide_editing(slideId)
  3. get_slide(slideId): read current files
  4. update_slide(slideId, files)
  5. finish_slide_editing(slideId)

Authentication

The MCP server uses OAuth for authentication. When you first connect, you’ll be prompted to sign in to your Faces account through your browser. No API key management needed — the OAuth flow handles everything automatically. Because MCP is authenticated per-account (not per-team), new projects default to your personal team unless the assistant passes an explicit teamId from list_teams. This differs from the REST API and CLI, which authenticate with team-scoped API keys and always create projects under the key’s team. (For the CLI, the team is chosen at faces login --team <slug-or-id>; for REST API keys, at Settings > Developers in the dashboard.)

Access control

The MCP tools respect the same permission model as the rest of Faces:
  • Project owner — full read/write access.
  • Team-shared projects — any member of the owning team can read and edit.
  • Invited collaborators — can read; only collaborators with edit permission can update slides.
If the signed-in user does not have access to a project, the MCP tools return “Project not found or you don’t have access”.