Claude Code is a terminal agent with real tool access, which makes it an unusually good marketing operator: it can hold a long plan, call things in sequence, read what came back, and repeat. What it normally lacks is anything to call. Marketing SaaS lives behind dashboards, and dashboards are not tools.
Hermoso ships a Model Context Protocol server that fixes that in one line. After it is installed, Claude Code has 301 marketing tools: the Meta, Google and LinkedIn ad libraries, organic TikTok, Instagram, YouTube, Reddit and Threads, a full creative pipeline across 50+ image and video models, publishing and scheduling, and campaign management across Meta, Google Ads, Microsoft Advertising, Reddit Ads, LinkedIn, Pinterest and ChatGPT Ads.
Install:
claude mcp add --transport http hermoso https://app.hermoso.ai/mcp
Or, if you would rather run it over stdio from the npm package:
npm install -g hermoso
hermoso auth login # browser sign-in, like gh
npx -y hermoso mcp # the same 301 tools over stdio
hermoso auth login opens a loopback browser sign-in and writes an owner-only key to ~/.hermoso/config.json (directory 0700, file 0600), so a co-tenant on a shared machine cannot read it and spend your credits.
Why terminal agents behave well with this server
A few design choices matter more in a terminal than in a chat window, because context is the scarce resource:
- Tools return URLs, not payloads. A render comes back as a served
/generated/…URL. Nothing dumps a base64 video into your context window. - Long jobs poll inside the call. Video renders take one to three minutes. The tool submits to a job queue and polls to completion, so it works in every MCP client without depending on experimental async task support — and
get_job/list_jobslet you resume anything left in flight. - Capabilities are discoverable, not guessed.
hermoso_capabilitiesis free and read-only, and returns the valid model ids with their exact credit costs. A well-written agent calls it first and stops inventing model names. - There is a token-cheap escape hatch. The npm package also exposes the core loop as ordinary subprocess commands with
--jsonoutput, so an agent can shell out instead of carrying a large tool manifest. See running ads from the command line.
A realistic Claude Code session
Nothing here is a special syntax; it is what you would type anyway.
| Prompt | Tools it walks |
|---|---|
| “Read my landing page and build a brand profile.” | draft_brand → update_brand |
| “Find my three closest competitors and their longest-running Meta ads. What hook repeats?” | find_competitors → pull_competitor_ads → mine_angles |
| “Render four 9:16 variants of that hook and score them.” | plan_variations → render_ad ×4 → score_ad |
| “Post the winner to Instagram and queue the rest for the week.” | post_to_meta → schedule_post → list_scheduled |
| “Build a paused Meta campaign around it, US, $30/day.” | create_meta_campaign → create_meta_adset → create_meta_ad |
| “Every Monday, pull last week’s performance into the reporting sheet.” | meta_insights / google_ads_report → append_to_sheet |
The last row is where a terminal agent earns its place. A weekly report is a chore in a dashboard and a scheduled command in a terminal.
Skills, not just tools
Hermoso also ships installable Claude skills — packaged workflows that wrap the common sequences (research a market, build an ad from a brand, run a product photoshoot) so you invoke a whole recipe instead of narrating it. list_skills and get_skill expose them to any agent, and save_skill lets you distil a directive you liked into a reusable one of your own.
What it will not do without asking
An agent with a budget is only useful if the blast radius is bounded, so spend authority is fenced in the server rather than in a prompt. Meta campaigns, ad sets and ads are created PAUSED with no caller override. The seven tools that can arm real ad spend — set_meta_campaign_status, set_google_ads_status, set_microsoft_ads_status, set_reddit_ads_status, set_linkedin_ads_status, set_pinterest_ads_status and set_openai_ads_status — each refuse to run without an explicit confirmation flag, and that same gate covers creating an enabled Google Ads ad group, ad or keyword under an already-enabled parent, because that serves on the very next auction. Deletes are confirm-gated too. On the generation side, hermoso_capabilities publishes each model’s exact credit cost before anything runs, and every render reserves an estimate then settles the true cost, so a failed dispatch refunds instead of quietly billing you.
Also works outside Claude Code
It is a standard MCP server, so the same 301 tools appear in Cursor, VS Code, Codex, Cline, OpenClaw, Hermes, Claude Desktop and Claude.ai. If you want the chat-window version of this page, see AI marketing in Claude; for the full tool list and one-click installers, see the MCP & CLI page.
Frequently asked
How do I add Hermoso to Claude Code?
Run: claude mcp add --transport http hermoso https://app.hermoso.ai/mcp — then approve the connection with your Hermoso account. To run it over stdio from the npm package instead: npm install -g hermoso, then hermoso auth login, then npx -y hermoso mcp.
Can Claude Code generate and publish ads?
Yes. With Hermoso connected it can render finished image and video ads across 50+ models with your real product composited in, then publish them to Facebook, Instagram, Threads, TikTok, YouTube, X, LinkedIn and Pinterest, and build the campaigns on Meta, Google Ads, Microsoft Advertising, Reddit Ads, LinkedIn, Pinterest and ChatGPT Ads around them. Renders come back as durable asset URLs, so nothing large lands in the context window.
Do video renders block the agent?
A video render takes roughly one to three minutes. The tool submits it to a job queue and polls to completion inside the call, so it works in every MCP client without relying on experimental async task support. If a session is interrupted, get_job and list_jobs resume or inspect anything still in flight.
Is the CLI the same as the MCP server?
They ship in the same npm package and are backed by the same API. The MCP surface is the full 301 tools (run it with hermoso mcp or npx -y hermoso mcp); the CLI subcommands cover the core loop — capabilities, credits, brand, create, generate, competitors, ads, research, jobs, fetch — with --json output for agents that prefer to shell out rather than load a tool manifest.
Where is my API key stored?
hermoso auth login performs a loopback browser sign-in and writes the key to ~/.hermoso/config.json with owner-only permissions (directory 0700, file 0600), so another user on a shared machine cannot read it. A --token flag is available for CI.
Can I script a recurring marketing job?
Yes — that is the main reason to run this from a terminal. Because every capability is a callable tool or a subprocess command with --json output, a weekly competitor sweep, a batch of creative variants, or a Monday performance export into Google Sheets is an ordinary scheduled command rather than a manual dashboard chore.
One command to install, one free account to authorize. Then your terminal can research, render, publish and report.
Start free → Read the MCP docs →