Why agents (and their humans) pick Hermoso: one connector is a one-stop shop for 50+ image and video models — Seedance, Veo, Kling, Sora and Gemini Omni for video; Nano Banana, Imagen, Flux, Seedream and GPT Image for stills; plus premium voices and Claude-, Gemini- and GPT-class writing models — on a single credit meter, with no per-vendor API keys or accounts to hold. And beyond raw models, the same connector covers the entire ad workflow: competitor research across the Meta, Google and LinkedIn ad libraries, creative planning, finished branded renders, post-production, scoring, publishing and campaign management. Exact per-render credit costs are published in hermoso_capabilities, so a well-behaved agent can quote you a number before it spends anything.
Hermoso is the marketing MCP that runs the whole ad loop — most marketing MCPs only manage campaigns, but Hermoso also creates and publishes the ad. Connect it to your agent and research, create, publish and manage finished ads straight from your prompts — 681+ tools, your saved brand context, your credits. Install from npm (npm install -g hermoso) — open source at github.com/hermoso-ai/hermoso.
One-click connect: Add to Cursor · Install in VS Code · Claude Code: npm install -g hermoso && hermoso auth login && claude mcp add hermoso -- npx -y hermoso mcp · Claude.ai: paste https://app.hermoso.ai/mcp under Settings → Connectors. Agents can auto-discover the server card at /.well-known/mcp.json. Also listed in the official MCP registry (io.github.hermoso-ai/hermoso), on Smithery and on Glama.
Prefer the studio? Everything the tools do lives in the web app too — app.hermoso.ai.
Three things to type once it’s connected
These are ordinary sentences, not a DSL. The agent picks the tools; you approve the spend.
- Research. “Who are
oatly.com’s three closest competitors, and what are their longest-running Meta ads? Tell me which hook keeps repeating.” — walksfind_competitors→pull_competitor_ads→mine_angles. - Create. “Make me a 9:16 UGC video ad for my brand using that hook, with my real product photo and captions burned in.” — walks
get_brand→plan_ad→render_ad, and hands back the finished mp4 URL. - Ship. “Schedule it to Instagram and TikTok for Tuesday 9am, and build a paused Meta campaign around it targeting the US at $30/day.” — walks
schedule_post→create_meta_campaign→create_meta_ad. The campaign is created paused; nothing spends until you say so.
The tools, by job
All 681+ tools over one OAuth’d server — call any of them from Claude, Claude Code, Claude Desktop, Codex, Cursor, Cline, OpenClaw, Hermes or any other MCP client. Each returns a durable asset URL or a structured result, not prose the model has to re-parse.
Looking for the complete roster? It is at the tool reference — every tool with its real parameter schema, and machine-readable JSON beside it. That reference is generated: it is built by running the shipping MCP server and reading tools/list back over a real transport, so it is the exact surface your client receives. The categories below are a hand-written tour, not the inventory — they name the tools worth knowing by name, and the reference is what to trust when the two disagree. Full developer documentation: hermoso.ai/docs.
Research & ad spy — find_competitors, competitor_teardown, pull_competitor_ads, research_ads, mine_angles, score_ad, check_ad_policy, analyze_video; ad libraries search_meta_ads, search_google_ads, search_linkedin_ads; organic social search_tiktok, search_instagram, search_youtube, search_reddit, search_threads, search_threads_keyword; scrapecreators_fetch; creative playbooks list_skills, get_skill, save_skill.
Create finished ads — brand draft_brand, get_brand, update_brand, use_brand, list_brands; plan plan_ad, plan_variations; render render_ad, generate_image, generate_video, generate_avatar, generate_voice, generate_text, make_template_ad (native HTML ad formats rendered directly, so the type is pixel-exact), make_explainer, product_sizzle, make_thumbnail; edit & finish remix_static, recast_motion, reframe_video, upscale_video, dub_video, change_voice, finish_video, fix_beat, post_edit, stitch_video, clip_video; assets list_product_photos, set_product_image, list_library, fetch_asset, upload_file.
Publish & schedule to your channels — post_to_meta (Facebook / Instagram / Threads), post_to_tiktok, post_to_youtube, schedule_post (one queue across Facebook, Instagram, Threads, TikTok, YouTube, X, LinkedIn, Pinterest and Bluesky), list_scheduled, cancel_scheduled, manage_meta_post, update_youtube_video, upload_meta_asset, list_meta_pages, youtube_channel, tiktok_account, list_tiktok_videos. YouTube goes past the upload: list_youtube_videos, update_youtube_video, set_youtube_thumbnail (put a Hermoso thumbnail on an upload — the single biggest lever on click-through, and YouTube otherwise picks a frame at random) and youtube_video_insights (views, watch time, average view percentage, subscribers gained). Engagement: list_meta_comments, reply_to_meta_comment, moderate_meta_comment, list_threads_replies, reply_to_thread, list_youtube_comments, reply_to_youtube_comment. X / Twitter: post_to_x (text, image, video, replies and whole threads), delete_x_post, x_post_metrics and x_post_insights (impressions, likes, reposts, replies, quotes, bookmarks), x_post_insights_historical (the same advertiser numbers over any date range — x_post_insights only sees the last 28 hours), x_mentions — X is the one connector that bills credits per API call, because X charges us per request, and a post containing a link costs roughly 13× one without; your agent is quoted the price before it posts. LinkedIn: list_linkedin_pages, post_to_linkedin_page, post_to_linkedin, manage_linkedin_post, linkedin_page_analytics (organic Page performance — followers and follower gains, Page views, and post impressions, clicks and engagement, for the Page total or per post) — LinkedIn publishing targets the company Pages you tick — your personal profile is available too, but stays off until you explicitly share it. Pinterest: list_pinterest_boards, create_pinterest_board, post_to_pinterest, post_to_bluesky (image or video Pins on a board you pick). Threads goes further than publishing: list_threads_posts, list_threads_replies, reply_to_thread, hide_thread_reply, delete_thread, list_threads_mentions, threads_insights.
One content calendar across every channel — schedule_post queues a finished render to one or several channels at a chosen time with per-channel captions; list_scheduled reads what is queued and what already fired, with per-channel outcomes; cancel_scheduled pulls a post back before it goes out. In the studio the same queue is a real calendar — month, week and list views, drag a post to reschedule it, edit or duplicate any entry, and standing time-slots you can drop work into. Hermoso publishes at the appointed time; nothing has to stay open.
Run Meta ad campaigns — create_meta_campaign, create_meta_adset, create_meta_ad, find_meta_audiences, list_meta_ads, meta_insights, meta_page_insights, meta_post_insights, update_meta_object, set_meta_campaign_status, delete_meta_object — objects are created paused, and every spend and delete is confirm-gated. Before a budget is committed: preview_meta_ad renders the real ad per placement as a link you can look at, and estimate_meta_reach says how many people a targeting spec actually reaches. Audiences: list_meta_audiences and create_meta_audience build website-pixel retargeting, Page and Instagram engagement audiences, and lookalikes — creating one spends nothing. meta_insights breaks performance down by age, gender, placement and country.
Run Google Ads campaigns — create_google_ads_campaign, create_google_ads_ad_group, create_google_ads_ad, add_google_ads_keywords, set_google_ads_budget, set_google_ads_bidding, set_google_ads_targeting, set_google_ads_status, find_google_ads_locations, upload_google_ads_asset, list_google_ads_campaigns, google_ads_report (GAQL) — the whole tree is built in one atomic operation, then read back from Google before the agent narrates what it made. Beyond the tree: create_google_ads_conversion_action and list_google_ads_conversion_actions (what Google counts as a result — TARGET_CPA, TARGET_ROAS, MAXIMIZE_CONVERSIONS and every Performance Max campaign are undeliverable without one, so Hermoso refuses to build them on an account that has none), create_google_ads_performance_max_campaign (Google’s cross-surface campaign type), add_google_ads_assets (sitelinks, callouts and structured snippets, created and attached — an unattached asset shows nothing) and google_ads_keyword_ideas (Keyword Planner: real monthly search volume, competition and top-of-page bids, so keywords are chosen from data rather than guessed).
Run LinkedIn, Pinterest, Microsoft, X, TikTok, Snapchat, ChatGPT and Apple Search Ads — the same paused-by-default, confirm-gated pattern on every other paid platform. LinkedIn: list_linkedin_ads_campaigns, linkedin_ads_report, create_linkedin_ads_campaign_group, create_linkedin_ads_campaign, create_linkedin_ads_creative, search_linkedin_ads_targeting, set_linkedin_ads_budget, set_linkedin_ads_status, delete_linkedin_ads_object. Pinterest: list_pinterest_ads_campaigns, pinterest_ads_report, create_pinterest_ads_campaign, create_pinterest_ads_ad_group, create_pinterest_ads_ad, set_pinterest_ads_budget, set_pinterest_ads_status. Microsoft Advertising (Bing): list_microsoft_ads_campaigns, microsoft_ads_report, create_microsoft_ads_campaign, create_microsoft_ads_ad_group, create_microsoft_ads_ad, add_microsoft_ads_keywords, set_microsoft_ads_budget, set_microsoft_ads_status, microsoft_ads_geo_search (resolve country, region and city names to the Microsoft location ids a campaign needs — without locations a Microsoft campaign is created serving worldwide, which is Microsoft’s own default, and the read-back warns you loudly). Reddit Ads — the full account tree: list_reddit_ads_campaigns, reddit_ads_report, create_reddit_ads_campaign, create_reddit_ads_ad_group, create_reddit_ads_ad, create_reddit_ads_post (a Reddit ad promotes a post, so the creative is a post), set_reddit_ads_status, plus free planning with search_reddit_ads_targeting, reddit_ads_forecast and reddit_ads_bid_suggestion, conversion tracking through list_reddit_ads_pixels and send_reddit_ads_conversions, retargeting and saved audiences, lead forms, and reddit_ads_history. ChatGPT Ads — the ads that run under a ChatGPT answer, via OpenAI’s Advertiser API: list_openai_ads_campaigns, openai_ads_report, openai_ads_geo_search, create_openai_ads_campaign, create_openai_ads_ad_group, create_openai_ads_ad, update_openai_ads_object, set_openai_ads_budget, set_openai_ads_status. ChatGPT Ads has exactly one creative format, a text-plus-image card, and no video — so the agent will pull a still from your film rather than offer you a video ad there. X Ads — the full promoted-post tree, live since August 2026: list_x_ads_accounts, list_x_ads_funding_instruments, x_ads_report, create_x_ads_campaign, create_x_ads_line_item (X’s name for an ad group), create_x_ads_promoted_tweet, add_x_ads_targeting, x_ads_targeting_search, x_ads_geo_search, update_x_ads_campaign, update_x_ads_line_item, set_x_ads_status, delete_x_ads_object. An X ad promotes a post, so the creative is a post — the same one post_to_x publishes. TikTok Ads is a SEPARATE connection from the TikTok posting connector, and it is the one platform that creates objects ENABLED by default, so Hermoso forces every tier PAUSED with no override: list_tiktok_ads_accounts, list_tiktok_ads_campaigns, list_tiktok_ads_identities, search_tiktok_ads_targeting, tiktok_ads_report, create_tiktok_ads_campaign, create_tiktok_ads_ad_group, upload_tiktok_ads_creative, create_tiktok_ads_ad, set_tiktok_ads_budget, set_tiktok_ads_status, delete_tiktok_ads_object. Snapchat Ads: list_snapchat_ads_accounts, list_snapchat_ads_campaigns, list_snapchat_ads_profiles, search_snapchat_ads_targeting, snapchat_ads_report, upload_snapchat_ads_creative, create_snapchat_ads_campaign, create_snapchat_ads_ad_squad, create_snapchat_ads_ad, set_snapchat_ads_budget, set_snapchat_ads_status, delete_snapchat_ads_object — budgets are micro-currency (1,000,000 = one unit), the creative headline caps at 34 characters, and a Snapchat ad points at a CREATIVE rather than a media id. Three access notes worth having before you plan a budget: LinkedIn and Pinterest both meter ad writes by the API tier your own ad account holds — reporting and reads are unrestricted, while creating campaigns depends on the access your account has been granted by the platform. Meta, Google Ads, Microsoft Advertising, Reddit Ads and ChatGPT Ads have no such tier. X grants Ads API access per AD ACCOUNT rather than per app, so instead of an OAuth button you add Hermoso’s X user to your ad account at business.x.com → Account access, and it appears in list_x_ads_accounts with the permission level X gave it.
Build Apple Search Ads, and read them down to the search term — App Store search ads, end to end. Build: create_apple_ads_campaign, create_apple_ads_ad_group, add_apple_ads_keywords, add_apple_ads_negative_keywords, create_apple_ads_creative, create_apple_ads_ad, upload_apple_ads_asset, update_apple_ads_object, set_apple_ads_status, delete_apple_ads_object — every object is created paused with no override, enabling is the one switch that arms real spend and it is confirm-gated, and every summary is built from a read-back of what Apple actually stored. Ads run on the Search tab placement; a Search results campaign needs no ad and no creative at all, because Apple renders your App Store product page itself — and Hermoso says so for free rather than letting Apple reject the build. Read: list_apple_ads_campaigns (status, serving status, daily and total budget, the countries it runs in, and Apple’s own stated reason when a campaign cannot run), list_apple_ads_ad_groups (default bid, and whether Apple’s Search Match is on), list_apple_ads_keywords (targeting and negative, with match type and bid), apple_ads_report (impressions, taps, installs, spend, TTR, CPT and CPA, at campaign, ad group, keyword, search-term or ad level), list_apple_ads_creatives, list_apple_ads_ads, list_apple_ads_assets, list_apple_ads_product_pages (your App Store listing and any custom product pages, with their per-language content), search_apple_ads_apps and check_apple_ads_app_eligibility (which placements, countries and devices your app may actually advertise on — worth reading before you build) and list_apple_ads_orgs. There is no OAuth button for it, because Apple publishes no OAuth flow: Hermoso generates the signing key, you paste its public half into Apple Ads → Account Settings → API and paste back three ids. Apple shows that field only to a user holding an API role, so an Account Admin invites or switches to one first — the Apple Search Ads setup guide walks the whole thing. Each connection is pinned to the single Apple Ads organization you chose when you made it.
Report & export — Google Drive save_to_drive, list_drive_files, get_drive_file, update_drive_file, delete_drive_file, create_drive_folder; Sheets create_sheet, append_to_sheet, read_sheet; Docs create_doc, append_to_doc, read_doc; Microsoft OneDrive save_to_onedrive, list_onedrive_files, get_onedrive_file, update_onedrive_file, create_onedrive_folder, delete_onedrive_file.
Memory, brands, skills & team — remember, forget, list_memory, store_get; brand workspaces create_brand, delete_brand, use_brand, list_brands — an agency can take on a new client and tear one down without opening the app, and brand workspaces are unlimited on every plan; skills — ONE library, into which what used to be a separate “AI employees” store was folded — save_skill, list_skills, get_skill, delete_skill; team invite_member, list_team, set_role, remove_member.
Account, settings & connectors — hermoso_capabilities (probe models + exact per-render costs — call it first), hermoso_credits, buy_credits, billing_status, upgrade_plan, set_auto_reload, get_job, list_jobs, report_bug, request_feature; settings get_settings, update_settings (language and appearance, saved to the account rather than a browser, so an agent-only customer is not stuck in English); connectors list_connectors, list_connector_accounts, set_connector_accounts (choose exactly which Pages, ad accounts and boards are usable — the tool reports the server’s read-back, never the request), disconnect_connector. Connecting an account is an OAuth consent screen, so it is the one step that still needs a browser; everything after it is agent-callable.