figmanage
Figma workspace management from the command line. 85 commands for seats, teams, permissions, billing, onboarding, and org admin. Also works as an MCP server for AI assistants.
install
npm install -g figmanage
setup
figmanage login
Extracts your Chrome session cookie, prompts for a PAT, and stores credentials locally at ~/.config/figmanage/. One-time setup -- no env vars, no JSON config editing.
figmanage whoami # verify auth
figmanage logout # clear credentials
usage
figmanage seat-optimization # find inactive paid seats
figmanage offboard sarah@co.com # audit what a user owns
figmanage offboard sarah@co.com --execute \
--transfer-to jake@co.com # execute the offboarding
figmanage onboard alex@co.com --teams 123,456 \
--role editor --seat full --confirm # set up a new hire
figmanage quarterly-report # org-wide design ops snapshot
figmanage members --search danny # find org members
figmanage teams # list all teams
figmanage permissions file abc123 # who has access to a file
figmanage permission-audit --scope team --id 789 # audit a team's permissions
figmanage branch-cleanup 573408414 # find stale branches
All commands output JSON when piped or when --json is passed.
AI integration (MCP)
figmanage runs as an MCP server for Claude, ChatGPT, Cursor, and other AI assistants:
# Claude Code
claude mcp add figmanage -- npx -y figmanage --mcp
# Claude Desktop / Cowork
# Add to claude_desktop_config.json:
{
"mcpServers": {
"figmanage": {
"command": "npx",
"args": ["-y", "figmanage", "--mcp"]
}
}
}
Credentials are read from ~/.config/figmanage/ (set up via figmanage login). Env vars (FIGMA_PAT, FIGMA_AUTH_COOKIE, etc.) override the config file for backwards compatibility.
MCP mode exposes all 85 tools to the AI assistant. HTTP transport available via --mcp --http <port>.
toolset presets (MCP only)
Use FIGMA_TOOLSETS to expose only specific tool groups:
| Preset | Toolsets |
|---|
starter | navigate, reading, comments, export |
admin | navigate, org, permissions, analytics, teams, libraries |
readonly | navigate, reading, comments, export, components, versions |
full | everything (default) |
auth
figmanage uses two Figma API surfaces:
| Client | Auth | Capabilities |
|---|
| Internal API | Session cookie | Workspace management, search, permissions, org admin, seats, billing |
| Public API | Personal Access Token | Comments, export, file reading, components, versions, webhooks, variables |
Cookie auth unlocks all 85 tools. PAT-only gives ~30 (reading, comments, export, components). Both together is recommended.
Auth resolution: env vars > config file > prompt to run figmanage login.
commands
navigate (10)
| Command | Auth | Description |
|---|
check_auth | either | Validate PAT and cookie authentication |
list_orgs | cookie | List available Figma workspaces |
switch_org | cookie | Switch active workspace for this session |
list_teams | cookie | List teams in your org |
list_projects | either | List projects in a team |
list_files | either | List files in a project |
list_recent_files | cookie | Recently viewed/edited files |
search | cookie | Search files across the workspace |
get_file_info | either | File metadata: name, project, team, link access |
list_favorites | cookie | Favorited files (broken -- Figma BigInt bug) |
files (8)
| Command | Auth | Description |
|---|
create_file | cookie | Create design, whiteboard, slides, or sites file |
rename_file | cookie | Rename a file |
move_files | cookie | Move files between projects (batch) |
duplicate_file | cookie | Copy a file |
trash_files | cookie | Move files to trash (batch) |
restore_files | cookie | Restore files from trash (batch) |
favorite_file | cookie | Add/remove from favorites |
set_link_access | cookie | Set link sharing level |
projects (6)
| Command | Auth | Description |
|---|
create_project | cookie | Create a project in a team |
rename_project | cookie | Rename a project |
move_project | cookie | Move a project to another team |
trash_project | cookie | Move a project to trash |
restore_project | cookie | Restore a project from trash |
set_project_description | cookie | Set or update project description |
permissions (7)
| Command | Auth | Description |
|---|
get_permissions | cookie | List who has access with roles |
set_permissions | cookie | Change a user's access level |
share | cookie | Invite someone by email |
revoke_access | cookie | Remove someone's access |
list_role_requests | cookie | List pending access requests |
approve_role_request | cookie | Accept an access request |
deny_role_request | cookie | Decline an access request |
reading (2)
| Command | Auth | Description |
|---|
get_file | pat | Read file as a node tree with depth control |
get_nodes | pat | Read specific nodes by ID |
components (4)
| Command | Auth | Description |
|---|
list_file_components | pat | Components published from a file |
list_file_styles | pat | Styles in a file |
list_team_components | pat | Published components across a team |
list_team_styles | pat | Published styles across a team |
versions (2)
| Command | Auth | Description |
|---|
list_versions | pat | Version history |
create_version | cookie | Create a named version checkpoint |
branching (3)
| Command | Auth | Description |
|---|
list_branches | either | List branches of a file |
create_branch | cookie | Create a branch |
delete_branch | cookie | Archive a branch |
comments (4)
| Command | Auth | Description |
|---|
list_comments | pat | Comments with thread structure |
post_comment | pat | Post a comment |
delete_comment | pat | Delete a comment |
list_comment_reactions | pat | Emoji reactions on a comment |
export (2)
| Command | Auth | Description |
|---|
export_nodes | pat | Export as PNG, SVG, PDF, or JPG |
get_image_fills | pat | URLs for all images used as fills |
webhooks (4)
| Command | Auth | Description |
|---|
list_webhooks | pat | List webhooks for a team |
create_webhook | pat | Create a webhook subscription |
update_webhook | pat | Update a webhook |
delete_webhook | pat | Delete a webhook |
variables (3, Enterprise)
| Command | Auth | Description |
|---|
list_local_variables | pat | Local variables and collections |
list_published_variables | pat | Published variables from a library |
update_variables | pat | Bulk create, update, or delete variables |
analytics (2)
| Command | Auth | Description |
|---|
library_usage | cookie | Team-level library adoption metrics |
component_usage | cookie | Per-file component usage |
org (12)
| Command | Auth | Description |
|---|
list_admins | cookie | Org admins with permission levels |
list_org_teams | cookie | All teams with member and project counts |
seat_usage | cookie | Seat breakdown by type and activity |
list_team_members | cookie | Team members with roles and activity |
list_org_members | cookie | All org members with seats and activity |
contract_rates | cookie | Per-seat pricing |
change_seat | cookie | Change a user's seat type |
billing_overview | cookie | Invoice history and billing status |
list_invoices | cookie | Open and upcoming invoices |
org_domains | cookie | Domain config and SSO/SAML |
ai_credit_usage | cookie | AI credit usage summary |
export_members | cookie | Trigger CSV export of all members |
teams (3)
| Command | Auth | Description |
|---|
create_team | cookie | Create a team |
rename_team | cookie | Rename a team |
delete_team | cookie | Delete a team |
libraries (1)
| Command | Auth | Description |
|---|
list_org_libraries | cookie | Design system libraries with sharing info |
compound (12)
Multi-step operations that aggregate data from several API calls.
| Command | Auth | Description |
|---|
file_summary | pat | Pages, components, styles, comment counts |
workspace_overview | cookie | Org snapshot: teams, seats, billing |
open_comments | pat | Unresolved comments across a project |
cleanup_stale_files | either | Find old files, optionally trash (dry run default) |
organize_project | cookie | Batch-move files into a project |
setup_project_structure | cookie | Create multiple projects from a plan |
seat_optimization | cookie | Inactive seat detection with cost analysis |
permission_audit | cookie | Team/project access audit with oversharing flags |
branch_cleanup | either | Stale branch detection with optional archival |
offboard_user | cookie | Audit + execute user departure |
onboard_user | cookie | Batch invite to teams, share files, set seat |
quarterly_design_ops_report | cookie | Seat utilization, billing, teams, library adoption |
security
All parameters that accept Figma IDs are validated against /^[\w.:-]+$/ before use. Rate limit retries are restricted to safe HTTP methods. Mutations are never retried. Billing responses strip PII. Destructive operations default to dry-run mode. Config file is stored with 0o600 permissions.
known limitations
- list_favorites: Figma BigInt overflow bug on their server.
favorite_file works fine.
- Branch merging: Requires Figma's multiplayer protocol, no REST endpoint.
- Cookie expiry: ~30 days. Run
figmanage login --refresh to renew.
- Windows cookies: Best-effort DPAPI extraction. Falls back to PAT-only.
- Variables: Enterprise-gated scopes.
- get_file: Returns full document tree. Use
depth param or get_nodes.
development
git clone https://github.com/dannykeane/figmanage.git
cd figmanage
npm install
npm run build
npm test
license
MIT