Categories › Media & Design › Image generation & editing
AI ad generator: make image and video ads for your brand and research the ads competitors run.
Remote server: your requests and data go to app.hermoso.ai. Claude Code: claude mcp add --transport http hermoso-ai-ad-generator https://app.hermoso.ai/mcp?tools=app-create&src=registry · Claude app: Settings → Connectors → Add custom connector.
The tools this server listed when we connected to it, in its own words.
enable_tools — LIST a group of tools that is not in this session's roster. IT IS NOT HOW YOU REACH A TOOL — call_tool runs any Hermoso tool whether or not get_instructions — Return the FULL instructions for a Hermoso tool whose description ends "Full rules: get_instructions(…)", or for any tool by name, or topic find_tools — Search EVERY Hermoso tool — your starting list is deliberately short, and everything else in the product is here — by name, task or group. Ecall_tool — Run ANY Hermoso tool by name — including the paid-campaign, analytics and channel-admin tools that are not in this session's starting list —hermoso_capabilities — Probe what this Hermoso account can do RIGHT NOW: available image/video model ids + their credit costs (estimates: a render is charged its ahermoso_credits — Return the credit balance, recent priced calls with their credits, and costModel (the one-sentence rule of what costs credits). THE RULE: onbuy_credits — Out of credits? Top up with a credit PACK. Call with no argument to list the available packs (id · credits · price). If the account has a sareport_bug — Report a bug in Hermoso to the team. Use this when something in Hermoso genuinely misbehaves — a tool errors unexpectedly, returns a wrong orequest_feature — Ask the Hermoso team for a capability that doesn't exist yet. Use this when you need something Hermoso genuinely can't do — an unsupported pbilling_status — Show this account's billing at a glance: current plan (quote plan.priceUsd per plan.period), credit balance, whether auto-reload is on, whetupgrade_plan — Change the SUBSCRIPTION plan (admin only). No argument lists the monthly plans. Basic ($19.99) is the posting plan: unlimited posting and Auset_auto_reload — Turn automatic credit reloads on or off (admin only): when the balance drops below a threshold, the card on file is charged for a top-up paclist_brands — List every profile on this account (id + name; a profile is a brand, a creator or a personal workspace) and which one this connection acts ouse_brand — Pin which profile this connection acts on. Pass the profile id or exact name from list_brands. Works for your own profiles AND one another acreate_brand — Add a NEW profile (a brand, client, creator or personal workspace) and switch to it. Each has its OWN brand details, memory, swipefile, Librdelete_brand — PERMANENTLY delete a profile and EVERYTHING in it — brand details, memory, swipefile, Library creations, generated assets, avatars, skills, upload_file — Persist an ARBITRARY user file (image, video, audio, PDF or document, up to 150MB) into Hermoso and get back a durable public URL that EVERYsave_to_drive — Save a Hermoso render — or ANY file — into the user’s connected Google Drive. Pass a Hermoso render URL as url (or urls[] for several); for import_from_cloud — Pull the files in a Google Drive or OneDrive FOLDER into this profile's Library, so they can be used like anything rendered here — publishedlist_drive_files — List the Google Drive files & folders Hermoso can reach: the ones it created plus any the user picked with the Google file picker in the appget_drive_file — Fetch one Drive file’s metadata — name, type, size, modified time, a webViewLink to open it and a webContentLink to download it. Pass fileIdupdate_drive_file — Update a Drive file: rename (name), move it into a folder (moveToFolderId, optionally removeFromFolderId to move OUT of the old one), or tradelete_drive_file — Delete a Drive file. By default it goes to Trash (recoverable); pass permanent:true to delete it forever. Pass fileId (from list_drive_filescreate_drive_folder — Create a folder in the user’s Google Drive (optionally nested under parentId) to organize saved files. Returns the folder id + webViewLink. create_sheet — Create a new Google Spreadsheet in the user’s Drive and optionally fill it with rows — e.g. export a swipefile, ad list, or performance repoappend_to_sheet — Append rows to a Google Sheet Hermoso can reach — one it created (pass the spreadsheetId from create_sheet) or one the user handed over withread_sheet — Read cells from a Google Sheet Hermoso can reach — one it created, or one the user handed over with the Google file picker in the app (that export_swipefile_deck — Turn a SWIPEFILE COLLECTION into a real Google Slides deck — one slide per saved ad, carrying the creative, the brand, the ad copy, the run list_notion_pages — Find the Notion pages and databases the user shared with Hermoso, by title, newest edited first. Gives the page id that save_to_notion, appesave_to_notion — Save to the user's Notion as a NEW page: a research report, competitor teardown or campaign report as `content` (markdown: headings, lists, append_to_notion_page — Add to the END of an existing Notion page (pageId or its link, from list_notion_pages): markdown content, a swipefileCollection, or includeSread_notion_page — Read a Notion page the user shared with Hermoso, as markdown (pageId or a Notion link). A database id answers with its data sources instead.export_schedule_to_notion — Export the posting schedule to a Notion database, one row per post: date, channels, caption, media link and status. Creates a new database (query_notion_database — Read the ROWS of a Notion database the user shared with Hermoso — e.g. the team's content calendar: each row's title, id, link and every proupdate_notion_row — Change properties on ONE row of a Notion database (pageId from query_notion_database) — e.g. mark a calendar row Status "Posted" and put thecreate_doc — Create a new Google Doc in the user’s Drive with a title + optional body text — e.g. export ad copy, a creative brief, or a report. Returns append_to_doc — Append text to the end of a Google Doc Hermoso can reach — one it created (pass the documentId from create_doc) or one the user handed over read_doc — Read the text of a Google Doc Hermoso can reach — one it created, or one the user handed over with the Google file picker in the app (that ilist_sheet_tabs — The tabs in a Google Spreadsheet, each with its name, numeric sheetId, row/column count and position. Call this BEFORE naming a tab in updatupdate_sheet — CORRECT cells in a Google Sheet — write values to an exact range, overwriting whatever is there. This is the fix append_to_sheet cannot makeNot tested by KitScout yet. When our harness runs it, pros, cons and the tasks we tried appear here, with the date and evidence.