Local stdio MCP server over the Frame.io v4 API (Adobe)
Project description
frameio-mcp
A local stdio MCP server over the Frame.io v4 API,
built with FastMCP on top of the official
frameio Python SDK. It lets an MCP client
(Claude Desktop, Claude Code, etc.) browse workspaces/projects/folders, upload
footage, leave timestamped review comments, and create share links.
Most people don't need this README. To use it in Claude Code, install the plugin from the marketplace (see the repo root README) and run the
frameio-setupskill. This document covers running the server standalone (without the plugin) for development, and the full tool list. Devuvcommands below assume you're in this directory (plugins/frameio-mcp/).
How auth works
Frame.io uses Adobe IMS OAuth. This server uses an OAuth Single-Page App
(SPA) credential — a public client (no secret) with PKCE — and stores the
resulting tokens in ~/.frameio-mcp/tokens.json (mode 0600). Access tokens
auto-refresh via the refresh token granted by the offline_access scope, so you
log in rarely.
One-time setup in the Adobe Developer Console
- In your Frame.io project, add an OAuth Single Page App credential.
- Scopes:
openid, profile, email, offline_access, additional_info.roles. - Redirect URI:
https://localhost:8723/callback(must match exactly). - Copy the credential's Client ID.
Install & log in
uv sync # install deps
uv run frameio-mcp login --client-id <YOUR_SPA_CLIENT_ID>
A browser opens for Adobe sign-in. Because Adobe requires HTTPS even on localhost, the temporary callback server uses a self-signed cert — your browser will warn "connection is not private." Click Advanced → Proceed to localhost. That's expected and only happens at login.
Check state anytime:
uv run frameio-mcp status
uv run frameio-mcp logout # remove tokens
Run the server
uv run frameio-mcp serve # stdio MCP server
Claude Desktop / Claude Code config
Add to your MCP client config (e.g. Claude Desktop claude_desktop_config.json):
{
"mcpServers": {
"frame.io": {
"command": "uv",
"args": ["run", "--directory", "/absolute/path/to/frameio-mcp/plugins/frameio-mcp", "frameio-mcp", "serve"]
}
}
}
The Client ID is read from ~/.frameio-mcp/config.json (saved by login) or the
FRAMEIO_CLIENT_ID env var, so the server needs no extra arguments.
Tools
Hierarchy: account → workspace → project → folder → files. account_id is
optional when you have a single account (it's resolved automatically).
74 tools covering essentially the full SDK surface, by area:
| Area | Tools |
|---|---|
| Identity | whoami |
| Accounts / workspaces | list_accounts, list_workspaces, show_workspace, create_workspace, update_workspace, delete_workspace |
| Projects | list_projects, show_project, create_project, update_project, delete_project |
| Folders | list_folder, list_project_contents, show_folder, create_folder, rename_folder, move_folder, copy_folder, delete_folder |
| Files | list_files, show_file, get_file_status, rename_file, move_file, copy_file, delete_file |
| Transfer | upload_file, remote_upload, import_file, download_file |
| Version stacks | list_version_stacks, show_version_stack, list_versions, create_version_stack, move_version_stack, copy_version_stack |
| Comments | list_comments, show_comment, create_comment (timecode/frame), update_comment (edit/resolve), delete_comment, add_comment_attachment, delete_comment_attachment |
| Shares | list_shares, show_share, create_share, update_share, delete_share, add_share_asset, remove_share_asset, list_share_reviewers, add_share_reviewers, remove_share_reviewers |
| Metadata | list_metadata_fields, create_metadata_field, update_metadata_field, delete_metadata_field, get_file_metadata, set_file_metadata |
| Discovery | search (lexical or nlp) |
| Webhooks | list_webhooks, show_webhook, create_webhook, update_webhook, delete_webhook |
| Permissions | list_account_users, list_workspace_users, set_workspace_user_role, remove_workspace_user, list_project_users, set_project_user_role, remove_project_user |
| Audit | list_audit_logs |
Tools are organized into tools_core, tools_assets, tools_review, tools_metadata, tools_search, and tools_admin modules, all registered on one server.
Notes
- Uploads use Frame.io's chunked presigned-URL flow; large videos are split
automatically. After upload, Frame.io may still be transcoding — poll
get_file_statusfor processed renditions. - Downloads default to the
originalrendition; passrenditionforhigh_quality,efficient,thumbnail, etc. - Custom metadata has two layers: account-level field definitions
(
create_metadata_field, polymorphic — text/number/select/date/rating/etc.) and per-file values (set_file_metadata, bulk across many files). Forselect/select_multi, the value is a list of the option UUIDs (fromlist_metadata_fields), not the display names. - Version stacks group revisions of a clip (v1, v2, …) via
create_version_stackfrom existing file IDs. - Deletes (
delete_file,delete_folder,delete_project, etc.) are permanent. list_audit_logsdepends on the account plan — Frame.io may return a server error if audit logging isn't enabled for the account.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file frameio_mcp-0.1.0.tar.gz.
File metadata
- Download URL: frameio_mcp-0.1.0.tar.gz
- Upload date:
- Size: 78.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f92599a6cedfe1ab2ee6ae4af134eee319b57442891629dbce29ea0c2175f5e
|
|
| MD5 |
10a9c35d4845f10aea008f6203e113da
|
|
| BLAKE2b-256 |
71d85a0d33daef54ccf7fee989bdc4d6d58fd32d856232037dbaafde761bc116
|
File details
Details for the file frameio_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: frameio_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 29.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7721c1220e1182458f3e36cfdf8424b429179684d201baf5d3e0e10973b29c52
|
|
| MD5 |
da77cc3f6e4fd5fa0c77c02e6eca3420
|
|
| BLAKE2b-256 |
e4b875eb267a3ee9a392adea15a18120e8afcd18d265f4bd96ada30526c01e88
|