Adobe Firefly MCP Server & CLI
A free, open source Adobe Firefly MCP server and CLI that lets Claude Code, Codex, Cursor and other AI agents generate and edit images, make video and composite products.
0.0(0 ratings)- 1
Add it with a single command in a terminal.
Put your own client ID and secret in place of the examples.
claude mcp add firefly \
-e FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID \
-e FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET \
-- npx -y @thenavidm/firefly-mcp-cli@latest - 2
In Claude Code, type /mcp. Adobe Firefly should show as connected.
/mcp
- 1
Add it with a single command in a terminal.
Put your own client ID and secret in place of the examples.
claude mcp add firefly -e FIREFLY_CLIENT_ID="YOUR_FIREFLY_SERVICES_CLIENT_ID" -e FIREFLY_CLIENT_SECRET="YOUR_FIREFLY_SERVICES_CLIENT_SECRET" -- npx -y @thenavidm/firefly-mcp-cli@latest - 2
In Claude Code, type /mcp. Adobe Firefly should show as connected.
/mcp
- 1
Add it with a single command in a terminal.
Put your own client ID and secret in place of the examples.
claude mcp add firefly \
-e FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID \
-e FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET \
-- npx -y @thenavidm/firefly-mcp-cli@latest - 2
In Claude Code, type /mcp. Adobe Firefly should show as connected.
/mcp
- 1Download the extension
Download the Claude Desktop extension.
- 2
Double-click it, and Claude Desktop installs it.
- 1
Add it with a single command in a terminal.
Put your own client ID and secret in place of the examples.
codex mcp add firefly \
--env FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID \
--env FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET \
-- npx -y @thenavidm/firefly-mcp-cli@latest - 2
Check that Codex lists it.
codex mcp list
- 1
Add it with a single command in a terminal.
Put your own client ID and secret in place of the examples.
codex mcp add firefly --env FIREFLY_CLIENT_ID="YOUR_FIREFLY_SERVICES_CLIENT_ID" --env FIREFLY_CLIENT_SECRET="YOUR_FIREFLY_SERVICES_CLIENT_SECRET" -- npx -y @thenavidm/firefly-mcp-cli@latest - 2
Check that Codex lists it.
codex mcp list
- 1
Add it with a single command in a terminal.
Put your own client ID and secret in place of the examples.
codex mcp add firefly \
--env FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID \
--env FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET \
-- npx -y @thenavidm/firefly-mcp-cli@latest - 2
Check that Codex lists it.
codex mcp list
- 1
Open Cursor's settings, go to the MCP tab, and click Add new global MCP server.
- 2
Add the server.
Put your own client ID and secret in place of the examples.
{
"mcpServers": {
"firefly": {
"command": "npx",
"args": ["-y", "@thenavidm/firefly-mcp-cli@latest"],
"env": {
"FIREFLY_CLIENT_ID": "YOUR_FIREFLY_SERVICES_CLIENT_ID",
"FIREFLY_CLIENT_SECRET": "YOUR_FIREFLY_SERVICES_CLIENT_SECRET"
}
}
}
} - 3
Open the MCP tab again. It should show 14 tools.
- 1
Open the Command Palette and run MCP: Open User Configuration.
- 2
Add the server to that mcp.json.
If the file already has servers, add only this one inside servers. Put your own client ID and secret in place of the examples.
{
"servers": {
"firefly": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@thenavidm/firefly-mcp-cli@latest"],
"env": {
"FIREFLY_CLIENT_ID": "YOUR_FIREFLY_SERVICES_CLIENT_ID",
"FIREFLY_CLIENT_SECRET": "YOUR_FIREFLY_SERVICES_CLIENT_SECRET"
}
}
}
}
- 1
Add it with a single command in a terminal.
Put your own client ID and secret in place of the examples.
copilot mcp add firefly \
--env FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID \
--env FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET \
-- npx -y @thenavidm/firefly-mcp-cli@latest - 2
Check that Copilot CLI has it.
copilot mcp get firefly
- 1
Add it with a single command in a terminal.
Put your own client ID and secret in place of the examples.
copilot mcp add firefly --env FIREFLY_CLIENT_ID="YOUR_FIREFLY_SERVICES_CLIENT_ID" --env FIREFLY_CLIENT_SECRET="YOUR_FIREFLY_SERVICES_CLIENT_SECRET" -- npx -y @thenavidm/firefly-mcp-cli@latest - 2
Check that Copilot CLI has it.
copilot mcp get firefly
- 1
Add it with a single command in a terminal.
Put your own client ID and secret in place of the examples.
copilot mcp add firefly \
--env FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID \
--env FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET \
-- npx -y @thenavidm/firefly-mcp-cli@latest - 2
Check that Copilot CLI has it.
copilot mcp get firefly
- 1
Open your Gemini CLI settings.
~/.gemini/settings.json - 2
Add the server to settings.json.
If the file already has servers, add only this one inside mcpServers. Put your own client ID and secret in place of the examples.
{
"mcpServers": {
"firefly": {
"command": "npx",
"args": ["-y", "@thenavidm/firefly-mcp-cli@latest"],
"env": {
"FIREFLY_CLIENT_ID": "YOUR_FIREFLY_SERVICES_CLIENT_ID",
"FIREFLY_CLIENT_SECRET": "YOUR_FIREFLY_SERVICES_CLIENT_SECRET"
}
}
}
} - 3
Restart Gemini CLI and type /mcp to check it.
/mcp
- 1
Open your Gemini CLI settings.
%USERPROFILE%\.gemini\settings.json - 2
Add the server to settings.json.
If the file already has servers, add only this one inside mcpServers. Put your own client ID and secret in place of the examples.
{
"mcpServers": {
"firefly": {
"command": "npx",
"args": ["-y", "@thenavidm/firefly-mcp-cli@latest"],
"env": {
"FIREFLY_CLIENT_ID": "YOUR_FIREFLY_SERVICES_CLIENT_ID",
"FIREFLY_CLIENT_SECRET": "YOUR_FIREFLY_SERVICES_CLIENT_SECRET"
}
}
}
} - 3
Restart Gemini CLI and type /mcp to check it.
/mcp
- 1
Open your Gemini CLI settings.
~/.gemini/settings.json - 2
Add the server to settings.json.
If the file already has servers, add only this one inside mcpServers. Put your own client ID and secret in place of the examples.
{
"mcpServers": {
"firefly": {
"command": "npx",
"args": ["-y", "@thenavidm/firefly-mcp-cli@latest"],
"env": {
"FIREFLY_CLIENT_ID": "YOUR_FIREFLY_SERVICES_CLIENT_ID",
"FIREFLY_CLIENT_SECRET": "YOUR_FIREFLY_SERVICES_CLIENT_SECRET"
}
}
}
} - 3
Restart Gemini CLI and type /mcp to check it.
/mcp
- 1
Open your OpenCode config.
~/.config/opencode/opencode.json - 2
Add the server under mcp.
If the file already has servers, add only this one inside mcp. Put your own client ID and secret in place of the examples.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"firefly": {
"type": "local",
"command": ["npx", "-y", "@thenavidm/firefly-mcp-cli@latest"],
"enabled": true,
"environment": {
"FIREFLY_CLIENT_ID": "YOUR_FIREFLY_SERVICES_CLIENT_ID",
"FIREFLY_CLIENT_SECRET": "YOUR_FIREFLY_SERVICES_CLIENT_SECRET"
}
}
}
} - 3
Restart OpenCode.
- 1
Open your OpenCode config.
%USERPROFILE%\.config\opencode\opencode.json - 2
Add the server under mcp.
If the file already has servers, add only this one inside mcp. Put your own client ID and secret in place of the examples.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"firefly": {
"type": "local",
"command": ["npx", "-y", "@thenavidm/firefly-mcp-cli@latest"],
"enabled": true,
"environment": {
"FIREFLY_CLIENT_ID": "YOUR_FIREFLY_SERVICES_CLIENT_ID",
"FIREFLY_CLIENT_SECRET": "YOUR_FIREFLY_SERVICES_CLIENT_SECRET"
}
}
}
} - 3
Restart OpenCode.
- 1
Open your OpenCode config.
~/.config/opencode/opencode.json - 2
Add the server under mcp.
If the file already has servers, add only this one inside mcp. Put your own client ID and secret in place of the examples.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"firefly": {
"type": "local",
"command": ["npx", "-y", "@thenavidm/firefly-mcp-cli@latest"],
"enabled": true,
"environment": {
"FIREFLY_CLIENT_ID": "YOUR_FIREFLY_SERVICES_CLIENT_ID",
"FIREFLY_CLIENT_SECRET": "YOUR_FIREFLY_SERVICES_CLIENT_SECRET"
}
}
}
} - 3
Restart OpenCode.
- 1
Add it with a single command in a terminal.
Put your own client ID and secret in place of the examples.
openclaw mcp add firefly \
--command npx \
--arg -y \
--arg @thenavidm/firefly-mcp-cli@latest \
--env FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID \
--env FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET - 2
Check that it starts and lists its tools.
openclaw mcp doctor firefly --probe
- 1
Add it with a single command in a terminal.
Put your own client ID and secret in place of the examples.
openclaw mcp add firefly --command npx --arg -y --arg @thenavidm/firefly-mcp-cli@latest --env FIREFLY_CLIENT_ID="YOUR_FIREFLY_SERVICES_CLIENT_ID" --env FIREFLY_CLIENT_SECRET="YOUR_FIREFLY_SERVICES_CLIENT_SECRET" - 2
Check that it starts and lists its tools.
openclaw mcp doctor firefly --probe
- 1
Add it with a single command in a terminal.
Put your own client ID and secret in place of the examples.
openclaw mcp add firefly \
--command npx \
--arg -y \
--arg @thenavidm/firefly-mcp-cli@latest \
--env FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID \
--env FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET - 2
Check that it starts and lists its tools.
openclaw mcp doctor firefly --probe
- 1
In the agent panel, click the … menu, then MCP Servers, Manage MCP Servers and View raw config.
- 2
Add the server to mcp_config.json.
If the file already has servers, add only this one inside mcpServers. Put your own client ID and secret in place of the examples.
{
"mcpServers": {
"firefly": {
"command": "npx",
"args": ["-y", "@thenavidm/firefly-mcp-cli@latest"],
"env": {
"FIREFLY_CLIENT_ID": "YOUR_FIREFLY_SERVICES_CLIENT_ID",
"FIREFLY_CLIENT_SECRET": "YOUR_FIREFLY_SERVICES_CLIENT_SECRET"
}
}
}
}
- 1
Open your Hermes config.
~/.hermes/config.yaml - 2
Add the server under mcp_servers.
If the file already has mcp_servers, add only this one under it. Put your own client ID and secret in place of the examples.
mcp_servers:
firefly:
command: "npx"
args: ["-y", "@thenavidm/firefly-mcp-cli@latest"]
env:
FIREFLY_CLIENT_ID: "YOUR_FIREFLY_SERVICES_CLIENT_ID"
FIREFLY_CLIENT_SECRET: "YOUR_FIREFLY_SERVICES_CLIENT_SECRET"
- 1
Open your Hermes config.
%USERPROFILE%\.hermes\config.yaml - 2
Add the server under mcp_servers.
If the file already has mcp_servers, add only this one under it. Put your own client ID and secret in place of the examples.
mcp_servers:
firefly:
command: "npx"
args: ["-y", "@thenavidm/firefly-mcp-cli@latest"]
env:
FIREFLY_CLIENT_ID: "YOUR_FIREFLY_SERVICES_CLIENT_ID"
FIREFLY_CLIENT_SECRET: "YOUR_FIREFLY_SERVICES_CLIENT_SECRET"
- 1
Open your Hermes config.
~/.hermes/config.yaml - 2
Add the server under mcp_servers.
If the file already has mcp_servers, add only this one under it. Put your own client ID and secret in place of the examples.
mcp_servers:
firefly:
command: "npx"
args: ["-y", "@thenavidm/firefly-mcp-cli@latest"]
env:
FIREFLY_CLIENT_ID: "YOUR_FIREFLY_SERVICES_CLIENT_ID"
FIREFLY_CLIENT_SECRET: "YOUR_FIREFLY_SERVICES_CLIENT_SECRET"
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Give Claude Code the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Claude Code what each command does and which ones ask first.
mkdir -p ~/.claude/skills/firefly
cp "$(npm root -g)/@thenavidm/firefly-mcp-cli/SKILL.md" ~/.claude/skills/firefly/ - 3
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.zshrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 5
Ask Claude Code to use firefly-cli.
Running firefly-cli on its own lists every command, so Claude Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Give Claude Code the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Claude Code what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.claude\skills\firefly" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\firefly-mcp-cli\SKILL.md" "$HOME\.claude\skills\firefly\" - 3
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
setx FIREFLY_CLIENT_ID "YOUR_FIREFLY_SERVICES_CLIENT_ID"
setx FIREFLY_CLIENT_SECRET "YOUR_FIREFLY_SERVICES_CLIENT_SECRET" - 4
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 5
Ask Claude Code to use firefly-cli.
Running firefly-cli on its own lists every command, so Claude Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Give Claude Code the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Claude Code what each command does and which ones ask first.
mkdir -p ~/.claude/skills/firefly
cp "$(npm root -g)/@thenavidm/firefly-mcp-cli/SKILL.md" ~/.claude/skills/firefly/ - 3
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.bashrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 5
Ask Claude Code to use firefly-cli.
Running firefly-cli on its own lists every command, so Claude Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Give Codex the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Codex what each command does and which ones ask first.
mkdir -p ~/.agents/skills/firefly
cp "$(npm root -g)/@thenavidm/firefly-mcp-cli/SKILL.md" ~/.agents/skills/firefly/ - 3
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.zshrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 5
Ask Codex to use firefly-cli.
Running firefly-cli on its own lists every command, so Codex finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Give Codex the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Codex what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.agents\skills\firefly" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\firefly-mcp-cli\SKILL.md" "$HOME\.agents\skills\firefly\" - 3
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
setx FIREFLY_CLIENT_ID "YOUR_FIREFLY_SERVICES_CLIENT_ID"
setx FIREFLY_CLIENT_SECRET "YOUR_FIREFLY_SERVICES_CLIENT_SECRET" - 4
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 5
Ask Codex to use firefly-cli.
Running firefly-cli on its own lists every command, so Codex finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Give Codex the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Codex what each command does and which ones ask first.
mkdir -p ~/.agents/skills/firefly
cp "$(npm root -g)/@thenavidm/firefly-mcp-cli/SKILL.md" ~/.agents/skills/firefly/ - 3
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.bashrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 5
Ask Codex to use firefly-cli.
Running firefly-cli on its own lists every command, so Codex finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.zshrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 4
Ask Cursor to use firefly-cli.
Running firefly-cli on its own lists every command, so Cursor finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
setx FIREFLY_CLIENT_ID "YOUR_FIREFLY_SERVICES_CLIENT_ID"
setx FIREFLY_CLIENT_SECRET "YOUR_FIREFLY_SERVICES_CLIENT_SECRET" - 3
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 4
Ask Cursor to use firefly-cli.
Running firefly-cli on its own lists every command, so Cursor finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.bashrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 4
Ask Cursor to use firefly-cli.
Running firefly-cli on its own lists every command, so Cursor finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.zshrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 4
Ask VS Code to use firefly-cli.
Running firefly-cli on its own lists every command, so VS Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
setx FIREFLY_CLIENT_ID "YOUR_FIREFLY_SERVICES_CLIENT_ID"
setx FIREFLY_CLIENT_SECRET "YOUR_FIREFLY_SERVICES_CLIENT_SECRET" - 3
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 4
Ask VS Code to use firefly-cli.
Running firefly-cli on its own lists every command, so VS Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.bashrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 4
Ask VS Code to use firefly-cli.
Running firefly-cli on its own lists every command, so VS Code finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Give Copilot CLI the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Copilot CLI what each command does and which ones ask first.
mkdir -p ~/.copilot/skills/firefly
cp "$(npm root -g)/@thenavidm/firefly-mcp-cli/SKILL.md" ~/.copilot/skills/firefly/ - 3
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.zshrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 5
Ask Copilot CLI to use firefly-cli.
Running firefly-cli on its own lists every command, so Copilot CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Give Copilot CLI the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Copilot CLI what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.copilot\skills\firefly" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\firefly-mcp-cli\SKILL.md" "$HOME\.copilot\skills\firefly\" - 3
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
setx FIREFLY_CLIENT_ID "YOUR_FIREFLY_SERVICES_CLIENT_ID"
setx FIREFLY_CLIENT_SECRET "YOUR_FIREFLY_SERVICES_CLIENT_SECRET" - 4
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 5
Ask Copilot CLI to use firefly-cli.
Running firefly-cli on its own lists every command, so Copilot CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Give Copilot CLI the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells Copilot CLI what each command does and which ones ask first.
mkdir -p ~/.copilot/skills/firefly
cp "$(npm root -g)/@thenavidm/firefly-mcp-cli/SKILL.md" ~/.copilot/skills/firefly/ - 3
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.bashrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 5
Ask Copilot CLI to use firefly-cli.
Running firefly-cli on its own lists every command, so Copilot CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.zshrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 4
Ask Gemini CLI to use firefly-cli.
Running firefly-cli on its own lists every command, so Gemini CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
setx FIREFLY_CLIENT_ID "YOUR_FIREFLY_SERVICES_CLIENT_ID"
setx FIREFLY_CLIENT_SECRET "YOUR_FIREFLY_SERVICES_CLIENT_SECRET" - 3
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 4
Ask Gemini CLI to use firefly-cli.
Running firefly-cli on its own lists every command, so Gemini CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.bashrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 4
Ask Gemini CLI to use firefly-cli.
Running firefly-cli on its own lists every command, so Gemini CLI finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Give OpenCode the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenCode what each command does and which ones ask first.
mkdir -p ~/.config/opencode/skills/firefly
cp "$(npm root -g)/@thenavidm/firefly-mcp-cli/SKILL.md" ~/.config/opencode/skills/firefly/ - 3
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.zshrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 5
Ask OpenCode to use firefly-cli.
Running firefly-cli on its own lists every command, so OpenCode finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Give OpenCode the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenCode what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.config\opencode\skills\firefly" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\firefly-mcp-cli\SKILL.md" "$HOME\.config\opencode\skills\firefly\" - 3
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
setx FIREFLY_CLIENT_ID "YOUR_FIREFLY_SERVICES_CLIENT_ID"
setx FIREFLY_CLIENT_SECRET "YOUR_FIREFLY_SERVICES_CLIENT_SECRET" - 4
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 5
Ask OpenCode to use firefly-cli.
Running firefly-cli on its own lists every command, so OpenCode finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Give OpenCode the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenCode what each command does and which ones ask first.
mkdir -p ~/.config/opencode/skills/firefly
cp "$(npm root -g)/@thenavidm/firefly-mcp-cli/SKILL.md" ~/.config/opencode/skills/firefly/ - 3
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.bashrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 5
Ask OpenCode to use firefly-cli.
Running firefly-cli on its own lists every command, so OpenCode finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Give OpenClaw the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenClaw what each command does and which ones ask first.
mkdir -p ~/.openclaw/skills/firefly
cp "$(npm root -g)/@thenavidm/firefly-mcp-cli/SKILL.md" ~/.openclaw/skills/firefly/ - 3
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.zshrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.zshrc - 4
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 5
Ask OpenClaw to use firefly-cli.
Running firefly-cli on its own lists every command, so OpenClaw finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Give OpenClaw the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenClaw what each command does and which ones ask first.
New-Item -ItemType Directory -Force "$HOME\.openclaw\skills\firefly" | Out-Null
Copy-Item "$(npm root -g)\@thenavidm\firefly-mcp-cli\SKILL.md" "$HOME\.openclaw\skills\firefly\" - 3
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
setx FIREFLY_CLIENT_ID "YOUR_FIREFLY_SERVICES_CLIENT_ID"
setx FIREFLY_CLIENT_SECRET "YOUR_FIREFLY_SERVICES_CLIENT_SECRET" - 4
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 5
Ask OpenClaw to use firefly-cli.
Running firefly-cli on its own lists every command, so OpenClaw finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Give OpenClaw the skill, so it knows every command.
The skill is the SKILL.md in the package. It tells OpenClaw what each command does and which ones ask first.
mkdir -p ~/.openclaw/skills/firefly
cp "$(npm root -g)/@thenavidm/firefly-mcp-cli/SKILL.md" ~/.openclaw/skills/firefly/ - 3
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.bashrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.bashrc - 4
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 5
Ask OpenClaw to use firefly-cli.
Running firefly-cli on its own lists every command, so OpenClaw finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.zshrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 4
Ask Antigravity to use firefly-cli.
Running firefly-cli on its own lists every command, so Antigravity finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
setx FIREFLY_CLIENT_ID "YOUR_FIREFLY_SERVICES_CLIENT_ID"
setx FIREFLY_CLIENT_SECRET "YOUR_FIREFLY_SERVICES_CLIENT_SECRET" - 3
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 4
Ask Antigravity to use firefly-cli.
Running firefly-cli on its own lists every command, so Antigravity finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.bashrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 4
Ask Antigravity to use firefly-cli.
Running firefly-cli on its own lists every command, so Antigravity finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.zshrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 4
Ask Hermes to use firefly-cli.
Running firefly-cli on its own lists every command, so Hermes finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
setx FIREFLY_CLIENT_ID "YOUR_FIREFLY_SERVICES_CLIENT_ID"
setx FIREFLY_CLIENT_SECRET "YOUR_FIREFLY_SERVICES_CLIENT_SECRET" - 3
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 4
Ask Hermes to use firefly-cli.
Running firefly-cli on its own lists every command, so Hermes finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.bashrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 4
Ask Hermes to use firefly-cli.
Running firefly-cli on its own lists every command, so Hermes finds the one it needs.
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.zshrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.zshrc - 3
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 4
List every command, then try one.
firefly-cli
firefly-cli verify-credentials
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
setx FIREFLY_CLIENT_ID "YOUR_FIREFLY_SERVICES_CLIENT_ID"
setx FIREFLY_CLIENT_SECRET "YOUR_FIREFLY_SERVICES_CLIENT_SECRET" - 3
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 4
List every command, then try one.
firefly-cli
firefly-cli verify-credentials
- 1
Install the CLI. It needs Node 22 or newer.
npm install -g @thenavidm/firefly-mcp-cli@latest - 2
Save your Adobe Firefly details, so every new session has them.
Put your own client ID and secret in place of the examples.
echo 'export FIREFLY_CLIENT_ID=YOUR_FIREFLY_SERVICES_CLIENT_ID' >> ~/.bashrc
echo 'export FIREFLY_CLIENT_SECRET=YOUR_FIREFLY_SERVICES_CLIENT_SECRET' >> ~/.bashrc - 3
Check your setup.
It names anything that's wrong and the fix.
firefly-cli doctor - 4
List every command, then try one.
firefly-cli
firefly-cli verify-credentials
Needs Node 22 or newer and an Adobe Firefly Services project. Set it up.
It's free and open source. If it saves you time, star it on GitHub, so more people find it.
This free Adobe Firefly MCP server and CLI gives your AI real access to Adobe Firefly Services: image generation, Image Model 5 edits, video, fills, expansions, composites and upscaling. It generates and edits images, makes short videos, fills and expands images, and composites products into scenes.
It's one install with two ways in. Claude, Codex, Cursor or any other MCP app calls its 14 tools for you, and the same tools work as a CLI that agents like Claude Code, Codex and OpenCode run, or that you type yourself.
In this guide, I'll show you:
- What the Adobe Firefly MCP server & CLI is, and what you can ask it
- How to install it and check that it works
- When to use the MCP server, and when the CLI
- Every tool, and how to keep your account safe
Every tool on this page comes from the server itself, and every cost was measured in Claude Code.
Key takeaways
What is the Adobe Firefly MCP server & CLI?
The Adobe Firefly MCP server & CLI is a free, open source program that lets AI agents generate and edit images and video with Adobe Firefly for you, in two ways. The MCP server is what an AI app like Claude, Codex or Cursor connects to, through MCP (Model Context Protocol), the open standard AI apps use to call outside tools.
You ask in plain language. Your AI picks the right tool, and the server makes the call to Adobe's Firefly Services API.
The CLI is the same program as commands. firefly-cli list-custom-models runs the same code your AI runs when you ask which custom models your project can use, whether an agent like Claude Code runs it or you do.
In an AI OS, the layer that connects your AI to your context, your data and your tools, a server like this is how your AI reaches Adobe Firefly. I explain how the parts fit together in how to build an AI operating system, and here's how I use AI myself.
What can you ask it?
Once it's set up, you ask the way you'd ask an assistant. These are real prompts it handles:
Try askingGenerate a square product photo of a ceramic cup in warm morning light, with Image 5.
Use this reference and change its background to a soft blue studio wall.
Fill the masked area of this photo with a small green plant.
Expand this image into a wide hero banner.
Make a five-second video of a slow camera move through a sunlit forest.
Which custom models can my Adobe project use?
The second one shows why this is useful. Your AI uploads the reference, writes the edit and runs it, and you only approve the part that spends credits.
It works well next to my Midjourney MCP server and Bannerbear MCP server, so your AI can generate images in Midjourney and fill your Bannerbear templates in the same chat. Every server I've made is on my MCP servers page.
For your prompts, my free AI image prompt generator and image to prompt generator help too.
How to install the Adobe Firefly MCP server
Pick your app in the box at the top of this page. Each one is a single command or a pasted block, and they all run through npx, so there's nothing to install first.
Windsurf, Zed and Cline take the same server, though they don't have a tab in the box yet. Follow the box's Cursor tab, and put its block here instead:
| App | Where the block goes |
|---|---|
| Windsurf | In the Cascade panel, open the Actions menu (…) and choose Open MCP config file, then paste the block. |
| Cline | Click the MCP Servers icon in the Cline panel, open the Configure tab, click Configure MCP Servers, and paste the block. |
| Zed | Go to Settings, then AI, then MCP Servers, and choose Add Server, then Add Local Server. Enter the block's command, arguments and variables, and Zed saves them under context_servers. |
Watch out: Firefly Services is Adobe's API for businesses, separate from a Firefly subscription in the app. If your organization doesn't have it, ask your Adobe admin or representative first.
Set up your Adobe access
The server signs in with a server-to-server credential from your Firefly Services project.
FIREFLY_CLIENT_ID and FIREFLY_CLIENT_SECRET in the command for your app.If your project uses scopes other than Adobe's defaults, set them in FIREFLY_SCOPES. To rotate the secret, make a new one in Developer Console and update your app's config.
Check that it works
Run the doctor with --network. It checks your settings, then signs in to Adobe to prove the credential works, without generating anything.
npx -y @thenavidm/firefly-mcp-cli doctor --networkWhen every line has a check mark, restart your app and ask which custom models your project can use. A working sign-in doesn't prove your organization pays for every model, so try one small image first.
In Claude Code, /mcp also shows whether the Adobe Firefly server is connected. It's one of the Claude Code commands worth knowing.
Use the Adobe Firefly CLI
The CLI is the same 14 tools as commands. AI agents that run commands, like Claude Code, Codex and OpenCode, use it on their own, and you can type the same commands in a terminal or a script.
Every tool name becomes a command with dashes, so generate_image5 runs as firefly-cli generate-image5.
npm install -g @thenavidm/firefly-mcp-cli
firefly-cli
firefly-cli list-custom-models
firefly-cli verify-credentialsThe bare firefly-cli lists every command, firefly-cli which <words> finds the command for a task, and firefly-cli <command> --help shows what a command takes. Anything that spends Adobe credits needs --confirm, the terminal's version of your approval.
firefly-cli install <app> adds the server to Claude Code, Codex, Claude Desktop, Cursor, VS Code or Gemini CLI, in each app's own format.
These are the flags you'll use most:
| Flag | What it does |
|---|---|
--json | Prints JSON |
--compact | Prints the JSON on one line |
--select a,b.c | Keeps only those fields, and a dotted path goes deeper |
--agent | Machine mode: compact JSON, no prompts, and it never confirms anything |
--confirm | Lets a write that asks first go ahead |
--dry-run | Shows what a write would do, without doing it |
A script can branch on the exit code:
| Exit code | What it means |
|---|---|
| 0 | It worked |
| 1 | Something unexpected went wrong |
| 2 | The command was typed wrong, or a write needed --confirm |
| 3 | It wasn't found |
| 4 | Adobe Firefly rejected the credentials |
| 5 | Adobe Firefly failed or couldn't be reached |
| 7 | You hit a rate limit, so wait and try again |
| 10 | Nothing is set up yet |
MCP server or CLI: which one?
Both are the same program with the same 14 tools. The difference is when your AI pays for them, in the tokens it reads.
- MCP server
- 16,800 tokens
- CLI
- Nothing
- MCP server
- 370 tokens
- CLI
- Nothing
- MCP server
- Nothing more, or in Claude Code the tools it picks
- CLI
- 2,300 tokens, once
- MCP server
- 336,000 tokens
- CLI
- 2,300 tokens
- MCP server
- Yes
- CLI
- No, there's no terminal there
- MCP server
- No
- CLI
- Yes
An app that loads every tool up front sends the full list with every message, whether you mention Adobe Firefly or not. Claude Code doesn't by default: its tool search sends only the tool names and the server's instructions, and loads a tool's full definition when your AI reaches for it.
The CLI costs nothing until Adobe Firefly comes up. Then your agent reads its skill file once and runs the commands it needs. With the skill added, Claude Code also lists its one-line description with every message, about 100 tokens.
When the whole conversation is about Adobe Firefly, the gap closes. Then the MCP server is the better experience, because you ask in plain language and your AI never has to look up a command.
How to spend less
In Claude Code, leave tool search on, which it is unless you've set ENABLE_TOOL_SEARCH=false.
Turn the server off when you aren't making images. In Claude Code that's the /mcp panel, and every AI app has its own switch. FIREFLY_READ_ONLY=1 cuts it to the three reading tools.
Or install the CLI and connect the server later, on the days it earns its place. Every tool stays in reach, and the standing cost drops to nothing.
Every number here was measured on October 5, 2026 in Claude Code 2.1.286 with Claude Opus 5.5. It's the same one-line prompt with and without the server connected, once with tool search off so every tool loads, and once with Claude Code's default. The skill was measured the same way, and other apps and models count tokens a little differently.
Image Model 5, references and jobs
Image Model 5 has its own tool, generate_image5. Ask for Image 5 and your AI uses it. To edit your own picture, it uploads the file first with upload_image, which spends nothing, then refers to it in the edit.
Video takes a while, so generate_video hands back a job right away. Your AI checks on it with get_job_status, and checking first stops it from paying for the same video twice.
Files are saved only when you ask for them, to FIREFLY_OUTPUT_DIR, which is ~/outputs/images unless you change it.
Every Adobe Firefly tool
The tables below list all 14 tools, grouped the way the repo groups them. Of these, three only read, and 11 change something or spend Adobe credits.
Images
generate_image- What it does
- Generate images.
- Kind
- Asks first
generate_image5- What it does
- Generate images with Image5.
- Kind
- Asks first
generate_similar- What it does
- Generate similar images.
- Kind
- Asks first
generative_expand- What it does
- Expand image.
- Kind
- Asks first
generative_fill- What it does
- Fill image.
- Kind
- Asks first
upscale_image- What it does
- Upscale image.
- Kind
- Asks first
Composites
generate_object_composite- What it does
- Generate object composite.
- Kind
- Asks first
precise_composite- What it does
- Generate precise composite.
- Kind
- Asks first
adaptive_composite- What it does
- Generate adaptive composite.
- Kind
- Asks first
Video
generate_video- What it does
- Generate video.
- Kind
- Asks first
References
upload_image- What it does
- Upload a local JPEG, PNG, WebP, TIFF or JXL image, up to 15 MB.
- Kind
- Writes
Jobs
get_job_status- What it does
- Read an existing Adobe async job by jobId.
- Kind
- Reads
Your account
verify_credentials- What it does
- Verify OAuth credentials or a supplied access token without generating media.
- Kind
- Reads
list_custom_models- What it does
- Read custom models available to the Adobe project.
- Kind
- Reads
Is the Adobe Firefly MCP server safe?
Every generation spends Adobe credits, and none come back. So 10 tools ask first: everything that makes or edits an image or a video. They're the ones marked "Asks first" in the tool tables above.
Uploading a reference doesn't ask, because it spends nothing, and reading jobs and models never changes anything.
When your AI calls one of them, the call needs a yes first. Where you use it decides who gives it:
- Claude Code (2.1.246 and later) asks you before every call, in every one of its permission modes.
- An app that can show forms asks you in a form.
- Any other app takes your AI's
confirm: trueas the yes, so tell your AI to check with you first. - An agent with no person to ask needs
FIREFLY_CONFIRM=model, so itsconfirm: truecounts in every app. - In a terminal, you add
--confirmto the command.
If the answer is no, nothing reaches Adobe Firefly.
Make it read-only
Set FIREFLY_READ_ONLY=1 and every write disappears from the tool list, leaving three reading tools. FIREFLY_ALLOW_DESTRUCTIVE=0 is the middle setting: uploads and reads still work, and nothing that spends credits does.
Keep a log of every write
Set FIREFLY_AUDIT_LOG to a file path. The server writes one line per attempted write, allowed or blocked, with what it was about to do and who approved it.
Watch out: Prompts and job details are data, not orders. A note in a job can't tell your AI to make another image, and FIREFLY_READ_ONLY=1 is the safe setting for an agent working on its own.
Your data
Your requests go straight to Adobe, with no server of ours in between and no tracking. Your client ID and secret stay in your app's config or your shell, and they're never part of a tool call.
The audit log, when you turn it on, leaves out your prompts, file paths and media links. Files you ask for stay on your computer.
Adobe Firefly MCP server settings
Every setting is an environment variable, in your app's config or your shell.
FIREFLY_CLIENT_ID- Default
- none
- What it does
- Holds your Firefly Services client ID
FIREFLY_CLIENT_SECRET- Default
- none
- What it does
- Holds that credential's client secret
FIREFLY_ACCESS_TOKEN- Default
- none
- What it does
- Holds an access token you already have, instead of the secret
FIREFLY_SCOPES- Default
- Adobe's defaults
- What it does
- Sets the scopes, if your project's differ
FIREFLY_OUTPUT_DIR- Default
~/outputs/images- What it does
- Picks the folder for files you ask to save
FIREFLY_READ_ONLY- Default
- off
- What it does
1hides every write
FIREFLY_ALLOW_DESTRUCTIVE- Default
- on
- What it does
0refuses everything that spends credits
FIREFLY_ALLOW_SPENDING- Default
- on
- What it does
- The 2.x name for
FIREFLY_ALLOW_DESTRUCTIVE, still read when that one isn't set
FIREFLY_AUDIT_LOG- Default
- none
- What it does
- Names a file that gets one line per attempted write
FIREFLY_SERVICES_CLIENT_ID- Default
- none
- What it does
- Adobe's tutorial name for FIREFLY_CLIENT_ID
FIREFLY_SERVICES_CLIENT_SECRET- Default
- none
- What it does
- Adobe's tutorial name for FIREFLY_CLIENT_SECRET
FIREFLY_SERVICES_ACCESS_TOKEN- Default
- none
- What it does
- Adobe's tutorial name for FIREFLY_ACCESS_TOKEN
FIREFLY_USER_TOKEN- Default
- none
- What it does
- Optional user-level token for custom models
FIREFLY_REQUEST_TIMEOUT_MS- Default
30000- What it does
- Each request's deadline
FIREFLY_POLL_TIMEOUT_MS- Default
300000- What it does
- How long to wait for a generation job
FIREFLY_POLL_INTERVAL_MS- Default
2000- What it does
- Time between job checks
FIREFLY_SURFACE- Default
full- What it does
searchlists three tools that find, describe and run the rest
FIREFLY_TOOL_TIMEOUT_MS- Default
- none
- What it does
- Gives up on any tool after this many milliseconds
FIREFLY_CONFIRM- Default
human- What it does
modellets your AI'sconfirm: trueapprove on its own, for an agent with no person to ask
FIREFLY_HTTP_PORT- Default
8787- What it does
- Sets the port for
--http
FIREFLY_HTTP_HOST- Default
127.0.0.1- What it does
- Sets the address for
--http, and any other needs a token
FIREFLY_HTTP_TOKEN- Default
- none
- What it does
- Sets the bearer token every
--httprequest needs
FIREFLY_HTTP_ALLOWED_ORIGINS- Default
- none
- What it does
- Lists other websites allowed to call
--http, comma separated
FIREFLY_DEBUG- Default
- off
- What it does
1prints debug lines
Troubleshooting
Run the doctor first. It names the step that failed and the fix.
| What you see | What to do |
|---|---|
| The sign-in fails | The client ID or secret is wrong, or the credential isn't OAuth Server-to-Server. Copy both again from Developer Console |
| A model or a feature is refused | Your organization's Firefly Services plan doesn't include it. Ask your Adobe admin |
| A video seems lost | It's still running. Ask your AI to check the job before making another one |
| "…so it will not run without confirm: true" | That's the safety check working. Approve it when your app asks |
If the server doesn't show up in your app at all, run the command your app runs, in a terminal, and read the error.
More free tools for visual content
Turn a post into an image to share, or make a 3D model from a picture.
Free tools
FAQs about the Adobe Firefly MCP server & CLI
Here are the questions people ask most about the Adobe Firefly MCP server and CLI.
The Adobe Firefly MCP server & CLI is a free, open source program that lets an AI app like Claude, Codex or Cursor generate and edit images and video with Adobe Firefly.
It has 14 tools for images, Image Model 5 edits, video, composites, upscaling, uploads and jobs, and the same tools run as a CLI that agents like Claude Code and Codex use, or that you type yourself.
An MCP server is a standard way to give an AI app real access to a tool, so it can act instead of guessing.
MCP stands for Model Context Protocol, and Claude, Codex, Cursor and many other AI apps speak it.
Every server I've made is on my MCP servers page.
The Adobe Firefly CLI is the same program as the Adobe Firefly MCP server, run as commands.
AI agents like Claude Code, Codex and OpenCode run them for you, and you can type them in a terminal or a script.
One npm package installs both.
Use the Adobe Firefly MCP server in an AI app with no terminal, like Claude Desktop's chat, and the CLI in a terminal, a script or a cron job.
In an AI app that can run commands, like Claude Code, Codex or Cursor, the CLI is the lighter choice, because it costs nothing until it runs.
Yes, the Adobe Firefly MCP server is free and open source under the AGPL-3.0-or-later license.
Generating spends the Adobe credits on your own Firefly Services plan, and the server adds no cost of its own.
You need Firefly Services, Adobe's API for businesses, which your Adobe organization provides.
A Firefly subscription in the Adobe apps doesn't include API access.
Yes, every image and video spends credits from your own Firefly Services plan, and none come back.
That's why each one waits for your approval first.
Yes, your AI uploads the photo, which costs nothing, then runs the edit you ask for.
Fills, expansions, Image 5 edits and composites all work on an uploaded picture.
To disconnect the Adobe Firefly MCP server, revoke or rotate the credential in Adobe Developer Console, which cuts access right away.
Then remove the server from your AI app's config.
The Adobe Firefly MCP server works with any app that speaks MCP.
That includes Claude Code, Claude Desktop, Codex, Cursor, VS Code, Windsurf, Zed, Cline, GitHub Copilot CLI, Gemini CLI, OpenCode, OpenClaw, Antigravity and Hermes.
I did.
I'm Navid Moazzez, and I made the Adobe Firefly MCP server & CLI as one of my free tools on navid.me.
You can read more about me.
The code is on GitHub under the AGPL-3.0-or-later license, and the package is on npm.
More MCP servers & CLIs
Related free tools
Navid.me is reader-supported. When you buy through links on this site, I may earn an affiliate commission. Read the affiliate disclaimer.
On this page
The most actionable AI newsletter for founders
Every week, get proven AI strategies, curated tools, and step-by-step systems to grow your audience, create better content, and build a profitable creator business.
No fluff, no filler, no BS. Just five minutes each week that might level up your online business and life.
P.S. Sign up now to get free access to my ultimate AI tools guide for creators.
