Hermoso is an MCP server with 309 tools an agent can call, among them analyze_video, answer_google_business_question, append_to_doc. It answers at https://app.hermoso.ai/mcp?src=registry over streamable HTTP, and it listed its tools to an anonymous client, so no sign-in was needed for that. Our probes reached it 9 of 10 times since 5 September 2026; the last check, on 18 October 2026, succeeded.
Marketing on autopilot from your agent. 841 tools, usable alone. Publishing and ads cost no credits.
Description as the publisher wrote it.
| Tool | What it does |
|---|---|
analyze_video | Break a video ad down into its structure: the verbatim transcript (voiceover + on-screen text) with a beat list, plus duration and sampled frame timestamps. Use to study a reference/competitor ad before remixing its structure. Costs ~a tran Inputs: url |
answer_google_business_question | Post the business’s answer to a public question on the brand’s Google Business Profile listing, or delete the answer already there. THIS IS AN UPSERT — one answer per account, so answering again REPLACES the previous one rather than adding Inputs: questionId, text, locationId, delete, confirm |
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 with the Google file picker in the app (find its id with list_drive_files). Inputs: documentId, text |
append_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 with the Google file picker in the app (find its id with list_drive_files). rows = array of row arrays. Inputs: spreadsheetId, rows, range |
backfill_posts | Import this brand's PAST posts from a channel into the performance record, so 'which hook works' can draw on history rather than only on what was published since Hermoso started recording. Supports facebook, instagram, threads, youtube, tik Inputs: channel, confirm, limit, cursor, accountRef |
billing_status | Show this account's billing at a glance: current plan (id + label + the price it is ACTUALLY billed — quote plan.priceUsd per plan.period, not plan.monthlyUsd), credit balance, whether auto-reload is on, whether a card is on file, and wheth |
bluesky_post_metrics | Read live engagement for up to 25 of the connected account’s Bluesky posts — likes, reposts, replies, quotes and bookmarks. Address a post by its AT-URI (the `at://…` value post_to_bluesky returns), not its web URL. Bluesky publishes NO imp Inputs: uris |
buy_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 saved card and you have billing-admin rights, calling with `pack` quotes the exact charge and calling Inputs: pack, confirm, quote_token |
cancel_scheduled | Remove a queued post before it goes out. Get the id from list_scheduled. Only works while it is still queued — something already published cannot be unsent (use manage_meta_post to delete a Facebook/Instagram post after the fact). Inputs: id |
change_voice | Swap the narration of a finished video into a different voice — keeps the performance, lip-sync, and background sound. Use when the user likes the video but wants a different narrator voice; use dub_video only for language translation. Paid Inputs: video, voice |
check_ad_policy | Pre-flight ad copy against Meta's REAL, live Advertising Standards before you run it — a flat 1-credit check. Pulls Meta's actual policy pages and returns a verdict (pass / fix / block) where every flagged issue QUOTES Meta's own policy tex Inputs: copy, claims, category, imageDescription |
clear_sheet_range | Empty a range of cells in a Google Sheet, leaving the rows themselves in place. DESTRUCTIVE: call it WITHOUT confirm first and nothing is cleared — you get back the real number of filled cells in that exact range. Show the user that number, Inputs: spreadsheetId, sheetUrl, range, confirm, confirmCells |
clip_video | Cut ONE long video into several RANKED, ready-to-post short clips (podcast, webinar, interview, conference talk, long ad cut → Reels/Shorts/TikTok). Transcribes the source with timestamps, picks the strongest SELF-CONTAINED moments, then cu Inputs: video, count, aspectRatio, captions |
collect_post_metrics | Fetch fresh performance numbers for this brand's recorded posts and store them as a time-series. Metrics ACCRUE, so a post is read at ~24 hours and again at ~7 days; this collects whichever readings are due and skips the ones already taken. Inputs: includeMetered, max |
comment_on_meta_post | Leave a NEW top-level comment on one of the brand’s own Facebook Page posts, as the brand. This is the "link in the first comment" tactic — Facebook suppresses reach on a post with an outbound link in the body, so brands put the link undern Inputs: postId, message, attachmentUrl, pageId |
comment_on_tiktok_video | Write a NEW top-level comment on a TikTok post the authorized account owns. Text (≤1,200 characters, UTF-8) or an image, and TikTok requires at least one of the two. AN IMAGE HERE MUST BE UPLOADED FIRST — a raw URL is refused on a new comme Inputs: videoId, text, imageUri, imageWidth, imageHeight |
competitor_teardown | Tear a competitor's ad strategy down into an actionable playbook: their opening-hook MIX, longest-running campaign THEMES, the WHITE SPACE nobody in their set runs, 2-3 render-ready COUNTER-PLAYS, and the territories they own that you shoul Inputs: competitor, ads, language |
convert_onedrive_file | Turn a file already in the user’s OneDrive into a PDF or a JPG — Microsoft does the conversion on its own servers, so nothing is re-encoded here and nothing is lost in a screenshot. It reads about 130 source formats, which is the point: Pow Inputs: fileId, format, width, height |
create_brand | Add a NEW brand workspace (a separate brand/client on this account) and switch to it. Each workspace has its OWN brand profile, memory, swipefile, Library, avatars, skills, playbooks and connectors — nothing leaks between them. Use this for Inputs: name, activate |
create_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 the document id + URL. Needs Google Drive connected (Settings ▸ Connectors ▸ Google Drive — one conn Inputs: title, text |
create_drive_folder | Create a folder in the user’s Google Drive (optionally nested under parentId) to organize saved files. Returns the folder id + webViewLink. Use that ID as update_drive_file’s moveToFolderId or as parentId for a nested folder. NOTE: save_to_ Inputs: name, parentId |
create_meta_catalog | Create a NEW product catalog on one of the merchant’s Meta business portfolios. A catalog is the input to Advantage+ catalog ads (dynamic product ads) — build it first, then fill it from the merchant’s feed or Shopify, then point a campaign Inputs: businessId, businessName, name, vertical, allowDuplicateName |
create_onedrive_folder | Create a folder in the user’s OneDrive (optionally nested under parentId) to organize saved files. Returns the folder id + webViewLink. Use that id as update_onedrive_file’s moveToFolderId or as parentId for a nested folder. NOTE: save_to_o Inputs: name, parentId |
create_pinterest_board | Create a board on the connected Pinterest account. Needed because a Pin cannot exist without a board, and a NEW Pinterest business account has none — if list_pinterest_boards comes back empty, make one here rather than telling the user you Inputs: name, description, privacy |
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 report. Pass rows as an array of row arrays (first row = headers). Returns the spreadsheet id + URL. Nee Inputs: title, rows |
create_whatsapp_template | Submit a new WhatsApp message template for Meta’s review. This is the ONLY way a business can start a WhatsApp conversation: outside the 24-hour window that opens when a customer messages first, WhatsApp accepts approved templates and nothi Inputs: wabaId, name, language, category, components, parameterFormat |
delete_bluesky_post | PERMANENTLY delete one of the connected Bluesky account's OWN posts. IRREVERSIBLE — the AT Protocol removes the record from the account's repo, there is no trash and no undelete, and the post's likes, reposts, replies and quotes go with it. Inputs: uri, confirm, confirmText |
delete_brand | PERMANENTLY delete a brand workspace and EVERYTHING in it — brand profile, memory, swipefile, Library creations, generated assets, avatars, skills, playbooks, chats — and disconnect its connected accounts. Irreversible, and it applies to ev Inputs: brand, confirm, confirmName, confirmConnectors |
delete_creator | Remove a saved creator from this workspace’s cast by id (from list_creators). Records a cross-device delete so they don’t reappear on the user’s other devices. It only drops the roster entry — ads already rendered with that person are untou Inputs: id |
delete_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_files) + confirm:true. Irreversible when permanent — confirm with the user first. Inputs: fileId, permanent, confirm |
delete_google_business_post | Remove a Post from the brand’s Google Business Profile listing. This takes it off Google Search and Maps immediately and CANNOT be undone — confirm with the user first. Pass the full post name from list_google_business_posts. Needs Google B Inputs: postId |
delete_linkedin_comment | Remove a comment from one of your LinkedIn company Page's posts — your own Page's comment, or somebody else's on your Page. Community Management surface, same separate connection. CONFIRM-GATED: call once without `confirm` to be refused and Inputs: postUrn, commentId, organizationId, confirm |
delete_meta_catalog | PERMANENTLY delete a product catalog. Meta does not let a catalog be removed from a business portfolio and then restored, and it cannot be transferred to another portfolio — there is no archive and no undo, and its product sets go with it, Inputs: catalogId, confirm, confirmName, confirmChildren, allowDeleteWithLiveProductSet |
delete_onedrive_file | Delete a OneDrive item — it moves to the OneDrive recycle bin (recoverable there). Pass fileId (from list_onedrive_files) + confirm:true. Confirm the exact file with the user first. Inputs: fileId, confirm |
delete_pinterest_board | PERMANENTLY delete a board AND EVERY PIN ON IT. This is the heaviest thing that can be done to a Pinterest account and there is no undelete. Call it WITHOUT confirm first: nothing is deleted, and it answers with the board’s real name, how m Inputs: boardId, confirm, confirmName, confirmChildren |
delete_pinterest_pin | PERMANENTLY delete a Pin. Pinterest has no undelete and no archive for one. Call it WITHOUT confirm first: nothing is deleted, and it answers with the Pin’s real title, its lifetime saves and impressions, and whether it HAS BEEN PROMOTED in Inputs: pinId, confirm, confirmName |
delete_playbook | Delete a saved playbook by id (from list_playbooks). Records a cross-device delete so it does not come back on the next sync. Minor + re-creatable, so no confirm needed. Inputs: id |
delete_reddit_post | PERMANENTLY delete one of the connected account’s Reddit posts. Reddit has no undelete. Call it WITHOUT confirm first: nothing is deleted, and it answers with the post’s real title, subreddit, score and comment count read back from Reddit. Inputs: postId, confirm, confirmName |
delete_skill | Delete one of the workspace’s CUSTOM skills by id (from list_skills). Built-in skills/recipes can’t be deleted. Minor + re-creatable, so no confirm needed. Inputs: id |
delete_telegram_message | PERMANENTLY delete one message the bot posted to a Telegram chat. Call it WITHOUT confirm first: nothing is deleted and you get a sentence to show the user. There is deliberately NO preview of the message — the Bot API has no method that re Inputs: chatId, messageId, confirm |
delete_thread, delete_tiktok_post_ad_authorization, delete_whatsapp_template, delete_x_post, delete_youtube_report_job, delete_youtube_video, diagnose_posts, disconnect_connector, draft_brand, dub_video, duplicate_scheduled, edit_reddit_post, edit_video, edit_x_post, enable_tools, error_detail, export_swipefile_deck, extend_tiktok_post_ad_authorization, fetch_app_screens, fetch_asset, fetch_social_data, find_competitors, finish_video, fix_beat, forget, format_sheet, generate_avatar, generate_image, generate_text, generate_video, generate_voice, get_brand, get_business_location, get_drive_file, get_job, get_onedrive_file, get_post_refill, get_settings, get_skill, get_tiktok_mention, get_tiktok_post_ad_authorization, google_business_account, google_business_insights, google_business_search_keywords, hermoso_capabilities, hermoso_credits, hide_thread_reply, instagram_collaborators, instagram_insights, instagram_profile, invite_member, leave_connector, linkedin_page_analytics, list_bluesky_convos, list_bluesky_posts, list_brands, list_business_locations, list_connector_accounts, list_connectors, list_creators, list_drive_files, list_errors, list_google_business_posts, list_google_business_questions, list_google_business_reviews, list_hooks, list_inbox, list_instagram_media, list_instagram_shopping_catalogs, list_jobs, list_library, list_linkedin_comments, list_linkedin_pages, list_memory, list_meta_catalog_products, list_meta_catalogs, list_meta_comments, list_meta_conversations, list_meta_pages, list_meta_partnership_creators, list_meta_posts, list_meta_product_sets, list_meta_webhook_events, list_onedrive_files, list_pinterest_boards, list_pinterest_pins, list_playbooks, list_product_photos, list_published_posts, list_reddit_comments, list_reddit_posts, list_scheduled, list_sheet_tabs, list_shopify_products, list_skills, list_swipefile, list_team, list_telegram_chats, list_telegram_dms, list_threads_mentions, list_threads_posts, list_threads_profile_posts, list_threads_replies, list_tiktok_brand_hashtag_posts, list_tiktok_brand_hashtags, list_tiktok_comment_replies, list_tiktok_comments, list_tiktok_mention_comments, list_tiktok_mentions, list_tiktok_videos, list_watch_findings, list_whatsapp_accounts, list_whatsapp_templates, list_x_dms, list_youtube_captions, list_youtube_categories, list_youtube_comments, list_youtube_playlists, list_youtube_report_jobs, list_youtube_video_stats, list_youtube_videos, make_explainer, make_template_ad, make_thumbnail, manage_bluesky_convo, manage_instagram_product_tags, manage_linkedin_post, manage_meta_partnership_creator, manage_meta_post, manage_sheet_tabs, manage_tiktok_brand_hashtags, manage_youtube_caption, manage_youtube_channel_section, manage_youtube_playlist, manage_youtube_playlist_image, manage_youtube_playlist_items, mark_bluesky_convo_read, meta_catalog_blast_radius, meta_page_insights, meta_post_insights, meta_webhook_status, mine_angles, moderate_meta_comment, moderate_tiktok_comment, moderate_youtube_comment, pinterest_ads_async_report, pinterest_analytics, pinterest_audience_insights, pinterest_targeting_analytics, plan_ad, plan_variations, post_edit, post_performance, post_to_bluesky, post_to_google_business, post_to_linkedin, post_to_linkedin_page, post_to_meta, post_to_pinterest, post_to_reddit, post_to_telegram, post_to_tiktok, post_to_x, post_to_youtube, post_x_article, product_sizzle, publish_to_shopify_product, pull_competitor_ads, react_to_bluesky_dm, read_bluesky_dm, read_doc, read_meta_conversation, read_sheet, recast_motion, reddit_post_stats, reframe_video, remember, remix_static, remove_member, render_ad, reply_to_google_business_review, reply_to_inbox_item, reply_to_linkedin_comment, reply_to_meta_comment, reply_to_meta_message, reply_to_reddit_comment, reply_to_thread, reply_to_tiktok_comment, reply_to_youtube_comment, report_bug, repost_thread, request_feature, reschedule_post, research_ads, retry_scheduled, run_post_refill, save_creator, save_pinterest_pin, save_playbook, save_skill, save_to_drive, save_to_onedrive, save_to_swipefile, schedule_post, score_ad, search_google_ads, search_instagram, search_instagram_hashtag, search_instagram_shopping_products, search_linkedin_ads, search_meta_ads, search_pinterest_ads_targeting, search_reddit, search_threads, search_threads_keyword, search_threads_locations, search_tiktok, search_youtube, send_bluesky_dm, send_whatsapp_broadcast, send_whatsapp_message, send_x_dm, set_auto_reload, set_competitor_watch, set_connector_accounts, set_post_refill, set_product_image, set_role, set_tiktok_post_ad_authorization, set_youtube_thumbnail, set_youtube_watermark, stitch_video, store_get, subscribe_meta_webhooks, threads_insights, threads_profile, threads_publishing_limit, tiktok_account, tiktok_account_insights, tiktok_account_status, tiktok_category_benchmark, tiktok_creator_info, tiktok_mention_top_terms, unsubscribe_meta_webhooks, update_brand, update_business_location, update_doc, update_drive_file, update_meta_catalog, update_onedrive_file, update_pinterest_board, update_pinterest_pin, update_settings, update_sheet, update_youtube_channel, update_youtube_video, upgrade_plan, upload_file, upload_tiktok_comment_image, upscale_video, use_brand, x_mentions, x_post_insights, x_post_insights_historical, x_post_metrics, youtube_bulk_report, youtube_channel, youtube_channel_report, youtube_video_insights
Every block below points at https://app.hermoso.ai/mcp?src=registry. Pick your client and copy.
claude mcp add --transport http hermoso https://app.hermoso.ai/mcp?src=registry
{
"mcpServers": {
"hermoso": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://app.hermoso.ai/mcp?src=registry"]
}
}
}{
"mcpServers": {
"hermoso": {
"url": "https://app.hermoso.ai/mcp?src=registry"
}
}
}{
"servers": {
"hermoso": {
"type": "http",
"url": "https://app.hermoso.ai/mcp?src=registry"
}
}
}{
"context_servers": {
"hermoso": {
"url": "https://app.hermoso.ai/mcp?src=registry"
}
}
}{
"mcpServers": {
"hermoso": {
"serverUrl": "https://app.hermoso.ai/mcp?src=registry"
}
}
}{
"mcpServers": {
"hermoso": {
"url": "https://app.hermoso.ai/mcp?src=registry"
}
}
}name: Hermoso
version: 0.0.1
schema: v1
mcpServers:
- name: Hermoso
type: streamable-http
url: https://app.hermoso.ai/mcp?src=registry{
"mcpServers": {
"hermoso": {
"httpUrl": "https://app.hermoso.ai/mcp?src=registry"
}
}
}{
"mcpServers": {
"hermoso": {
"type": "http",
"url": "https://app.hermoso.ai/mcp?src=registry"
}
}
}{
"mcpServers": {
"hermoso": {
"url": "https://app.hermoso.ai/mcp?src=registry"
}
}
}goose://extension?url=https%3A%2F%2Fapp.hermoso.ai%2Fmcp%3Fsrc%3Dregistry&type=streamable_http&id=hermoso&name=Hermoso
It answered our last check on 18 October 2026 in 285 ms. Over 10 checks since 5 September 2026 it answered 9. Status here comes from Neuronto's own probes, not from the publisher.
309, as returned by the server's own tools/list on 31 August 2026: analyze_video, answer_google_business_question, append_to_doc, append_to_sheet, backfill_posts, billing_status, bluesky_post_metrics, buy_credits, and 301 more.
It answered our last check on 18 October 2026 in 285 ms. Over 10 checks since 5 September 2026 it answered 9.
Put the server under mcpServers in ~/.cursor/mcp.json with the URL https://app.hermoso.ai/mcp?src=registry. The exact JSON is above, with the same setup for Claude Code, Claude Desktop, VS Code, Windsurf, Zed, Gemini CLI and the rest.
It listed its tools to an anonymous client, so reading the tool list needs no key. Individual tools can still ask for credentials in their own inputs.
Publisher: io.github.hermoso-ai. Endpoint host: app.hermoso.ai. ARD identifier: urn:air:io.github.hermoso-ai:mcp:hermoso.
First indexed 31 August 2026. The tools are exactly what the server returned; nothing on this page
is inferred from its name. Ranking in Neuronto search is never for sale.