Is the Hermoso Ai Hermoso MCP server down?

mcp-registry/io.github.hermoso-ai/hermoso · v0.1.446

Also listed as awesome/hermoso-ai/hermoso, glama/hermoso-ai/hermoso

unknown
Last checked 2026-10-26 15:37 UTC · handshake 293ms

As of 2026-10-26 15:37 UTC, the Hermoso Ai Hermoso MCP server is unknown with a Glimind reliability score of 88/100 (grade B). Over the last 30 days it answered 99.8% of Glimind's liveness checks. It had 22 outages in 90 days, with a median recovery of 6 minutes.

uptime (30d checks)
99.8%
checks observed
4,962
outages (90d)
22
tools
194

AI ad studio: ad research, image + video ads, publishing, campaigns. Each usable alone. 427 tools.

Point your MCP client at this streamable-http endpoint: https://app.hermoso.ai/mcp

Agent-readiness: D (61/100)

D (61/100): 2 error(s), 4 warning(s) across 194 tool(s); ~98,181 tokens of tool definitions.
Scores higher than 0% of 15,780 MCP servers Glimind has audited.
Its tool list costs an agent ~98,181 tokens per session — more than 99% of servers.
70 → 71 since 2026-10-17
no tool-poisoning patterns
Schemas89
Descriptions81
Safety hints100
Token cost0
Client compatibility70
Protocol100
Reliability0
Stability20

What to fix (8)

Loading this server's tool list costs an agent ~98,181 tokens before any work — more than 99% of MCP servers.

Split rarely-used tools into a separate server or a toolset the client can enable, or expose one "search tools" entry point. Many agents load every connected server's tools into every request. How to fix →

The endpoint did not complete an MCP handshake.

Check the URL, TLS certificate and that the server answers a JSON-RPC "initialize" POST. How to fix →

16 tool definition(s) exceed ~1,200 tokens each (largest: schedule_post, ~8,450).

Move long reference material out of descriptions (link a doc or expose a resource), drop repeated examples, and collapse large enums. Trimming these to ~600 tokens saves ~32,845 tokens every session. How to fix →

Tools: schedule_post, post_to_meta, reschedule_post, generate_video, render_ad and 11 more · saves ~32,845 tokens/session

194 tools on one server. Tool-selection accuracy drops as the menu grows, and some clients (e.g. Cursor) cap the number of active tools.

Group tools by task into smaller servers or toolsets, and merge near-duplicates behind one tool with a mode parameter. How to fix →

60 parameter(s) across 26 tool(s) have no description.

Add a "description" to each parameter with its format and an example ("ISO 8601 date, e.g. 2026-10-17"). This is the commonest cause of wrong arguments on the first call. How to fix →

Tools: add_subtitles, append_to_notion_page, clear_sheet_range, delete_linkedin_lead_subscription, duplicate_scheduled and 21 more

3 tool(s) have parameters with no type (no type/enum/anyOf/$ref).

Give every parameter a "type" (or "enum"/"anyOf"). Untyped parameters make models guess — strings for numbers, objects for arrays. How to fix →

Tools: analyze_video, hook_variants, make_series

No tool declares an outputSchema.

Declare outputSchema and return structuredContent (MCP 2025-06-18+). Agents can then parse results without guessing, and chain tools reliably. How to fix →

In the last 30 days: 0 tool(s) removed and 181 schema change(s).

Add new tools or optional parameters instead of renaming or removing; deprecate first (say so in the description) and remove later. Agents cache tool contracts. How to fix →

Auto-fix: 3 corrected tool definitions

Paste-ready definitions with the problems above fixed. Changes marked verify need a human look. 26 tool(s) still need parameter descriptions written by someone who knows the API. All of them as JSON: /v1/readiness/mcp-registry%2Fio.github.hermoso-ai%2Fhermoso/fixes

analyze_video 1 change
{
  "name": "analyze_video",
  "description": "A video ad's structure: verbatim transcript (voiceover + on-screen text), beat list, duration and sampled frame times; study a reference before remixing it. ~A transcription call.",
  "inputSchema": {
    "type": "object",
    "$schema": "http://json-schema.org/draft-07/schema#",
    "required": [
      "url"
    ],
    "properties": {
      "url": {
        "type": "string",
        "description": "the video URL (a served /generated/ path or a public http(s) video)"
      },
      "words": {
        "description": "true | 'only': each spoken word's start/end",
        "type": "string"
      },
      "frames": {
        "type": "boolean",
        "description": "also return the frames as images"
      },
      "anchors": {
        "type": "array",
        "items": {},
        "description": "{afterWord|beforeWord|atWord, occurrence?, offset?} -> s"
      }
    }
  },
  "annotations": {
    "title": "Analyze video",
    "readOnlyHint": false,
    "openWorldHint": true,
    "idempotentHint": false,
    "destructiveHint": false
  },
  "title": "Analyze video"
}
hook_variants 1 change
{
  "name": "hook_variants",
  "description": "HOOK MULTIPLIER: give ONE finished video ad N NEW OPENING HOOKS, N complete versions to A/B test. A planned hook replaces the first ~1.5-4 s (ends at the source's first cut there, else 3 s; hookSeconds overrides) with a new silent shot on a DIFFERENT named mechanic (list_hooks); the rest of the footage and the WHOLE original soundtrack stay, so every version keeps the source's length, and nobody in the hook talks or shows text. hooks[] adds your own openings: {url} a FOUND viral hook (post link ",
  "inputSchema": {
    "type": "object",
    "$schema": "http://json-schema.org/draft-07/schema#",
    "required": [
      "video"
    ],
    "properties": {
      "plan": {
        "description": "the `plan` object a previous dryRun returned, to render exactly those hooks without planning again",
        "type": "string"
      },
      "count": {
        "type": "number",
        "description": "how many hook versions, 1-5 (default 3)"
      },
      "hooks": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "url": {
              "type": "string"
            },
            "cutAt": {
              "type": "number",
              "description": "url: override the found payoff cut"
            },
            "start": {
              "type": "number",
              "description": "url: skip the video’s own first seconds"
            },
            "prompt": {
              "type": "string"
            },
            "mechanic": {
              "type": "string"
            }
          }
        },
        "description": "your own openings, one version each"
      },
      "notes": {
        "type": "string",
        "description": "anything the hooks must respect, e.g. \"keep it calm\", \"show the product in every hook\""
      },
      "video": {
        "type": "string",
        "description": "the finished video to give new hooks: its served file URL"
      },
      "dryRun": {
        "type": "boolean",
        "description": "true = return the plan and the quote, render nothing"
      },
      "useBrand": {
        "type": "boolean",
        "description": "false = send no brand name or product photo (for a video that is not this workspace brand’s)"
      },
      "resolution": {
        "enum": [
          "480p",
          "720p",
          "1080p"
        ],
        "type": "string",
        "description": "render tier for the new opening. Defaults to the source’s OWN tier so the hook matches the rest of the ad; a lower tier costs a lot less and is scaled into the source’s canvas (visibly softer for the first seconds). dryRun quotes whichever you pick."
      },
      "hookSeconds": {
        "type": "number",
        "description": "where the CURRENT hook ends, in seconds (1.5-4). Omit to use the first shot cut."
      },
      "productImage": {
        "type": "string",
        "description": "product photo URL used as a reference in hooks that show the product (defaults to the workspace brand’s first product photo)"
      }
    }
  },
  "annotations": {
    "title": "New opening hooks for a video",
    "readOnlyHint": false,
    "openWorldHint": true,
    "idempotentHint": false,
    "destructiveHint": false
  },
  "title": "New opening hooks for a video"
}
make_series 1 change
{
  "name": "make_series",
  "description": "CONTENT FACTORY: turn ONE topic into a SERIES of faceless short videos (narration over pictures, no presenter), optionally in the STYLE of a trending reference video. Give `topic` (\"make a video about…\"), `episodes` (1-10, default 1) or your own `episodeTitles`, `durationSeconds` (20-120 per episode, default 30) and optionally `reference` (a TikTok / Reel / YouTube Short / Facebook / X link or a video file URL whose look, pacing, opening hook and caption style every episode copies; never its wor",
  "inputSchema": {
    "type": "object",
    "$schema": "http://json-schema.org/draft-07/schema#",
    "properties": {
      "plan": {
        "description": "the `plan` a planOnly call returned, to run it without planning again",
        "type": "string"
      },
      "style": {
        "type": "string",
        "description": "override the look in words (e.g. \"flat 2D cartoon\") instead of the reference's"
      },
      "topic": {
        "type": "string",
        "description": "what the series is about, in the user's words"
      },
      "voice": {
        "enum": [
          "female",
          "male"
        ],
        "type": "string",
        "description": "narrator; default follows the reference"
      },
      "format": {
        "enum": [
          "explainer",
          "faceless_channel"
        ],
        "type": "string",
        "description": "renderer lane: 'explainer' (default; exact length) or 'faceless_channel' (2K, whole 10s blocks)"
      },
      "jobIds": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "SCHEDULE MODE: the episode job ids to schedule (finished ones are booked)"
      },
      "confirm": {
        "type": "boolean",
        "description": "REQUIRED true to start rendering (real spend). Without it you get a free quote"
      },
      "captions": {
        "type": "boolean",
        "description": "burn subtitles of every spoken word. Default: on only when the reference itself burns its spoken words as subtitles, otherwise off; nothing else is ever put on screen (no app screens, URLs, cards or stickers) unless the user asks"
      },
      "episodes": {
        "type": "number",
        "description": "how many episodes, 1-10 (default 1)"
      },
      "planOnly": {
        "type": "boolean",
        "description": "write the episode plan and style card, render nothing (a small planning charge)"
      },
      "schedule": {
        "type": "object",
        "required": [
          "channels",
          "at"
        ],
        "properties": {
          "at": {
            "type": "string"
          },
          "channels": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "timezone": {
            "type": "string"
          },
          "everyHours": {
            "type": "number"
          }
        },
        "description": "SCHEDULE MODE: where and when the first episode posts; the rest follow every `everyHours` (default 24)"
      },
      "reference": {
        "type": "string",
        "description": "a video link whose style every episode copies"
      },
      "aspectRatio": {
        "enum": [
          "9:16",
          "16:9",
          "1:1"
        ],
        "type": "string",
        "description": "default: the reference's shape, else 9:16"
      },
      "postCaptions": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "SCHEDULE MODE: one post caption per episode, in order (default: the episode title)"
      },
      "episodeTitles": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "your own episode titles, in order (sets the episode count)"
      },
      "durationSeconds": {
        "type": "number",
        "description": "length of EACH episode, 20-120 seconds (default 30)"
      }
    }
  },
  "annotations": {
    "title": "Make a series of faceless short videos (Content Factory)",
    "readOnlyHint": false,
    "openWorldHint": true,
    "idempotentHint": false,
    "destructiveHint": false
  },
  "title": "Make a series of faceless short videos (Content Factory)"
}

Get alerted

Get an email or webhook when this server's readiness drops by 10+ points, tool-poisoning text appears, or a tool breaks:

curl -X POST https://glimind.com/v1/subscriptions -H 'content-type: application/json' -d '{"tools":["mcp-registry/io.github.hermoso-ai/hermoso"],"email":"[email protected]"}'

Agents: watch_tool({"toolId": "mcp-registry/io.github.hermoso-ai/hermoso"}) over MCP.

Passed

Largest tool definitions

Static checks of the advertised tools/list (schema, descriptions, annotations, tool-poisoning patterns, names, size) plus observed protocol, uptime, latency and contract changes. Read-only: no tool is ever called. Weights: schema 15, docs 20, safety 15, efficiency 15, compatibility 15, protocol 5, reliability 10, stability 5. Token counts are estimates (~3.6 characters per token).

Operator? Fix these, then re-check live. Embed the readiness badge:

Markdown
[![MCP agent-readiness](https://glimind.com/v1/readiness/badge/mcp-registry%2Fio.github.hermoso-ai%2Fhermoso.svg)](https://glimind.com/server/mcp-registry%2Fio.github.hermoso-ai%2Fhermoso?ref=badge)
HTML
<a href="https://glimind.com/server/mcp-registry%2Fio.github.hermoso-ai%2Fhermoso?ref=badge"><img src="https://glimind.com/v1/readiness/badge/mcp-registry%2Fio.github.hermoso-ai%2Fhermoso.svg" alt="MCP agent-readiness"></a>
reStructuredText
.. image:: https://glimind.com/v1/readiness/badge/mcp-registry%2Fio.github.hermoso-ai%2Fhermoso.svg
   :target: https://glimind.com/server/mcp-registry%2Fio.github.hermoso-ai%2Fhermoso?ref=badge
   :alt: MCP agent-readiness

Tool-definition log

Glimind records every version of this server's tool definitions in a signed, append-only transparency log. Current manifest sha256:388d79e49c8232a0…, first seen 2026-10-26, included at leaf 73714 of 76,134. Version history · verify what your client received.

Tools (194)

Compare: most reliable media servers · most reliable productivity servers · most reliable knowledge servers · most reliable billing servers · most reliable other servers

Know before your agent calls it

Glimind tells agents whether a server is up right now and how to call it, then fails over to a live alternative when it isn't.

Add Glimind — free, no signup:

Add to Cursor Add to VS Code

Claude Code

claude mcp add --transport http glimind https://glimind.com/mcp

Claude Desktop · Windsurf · Cline (mcpServers JSON)

{
  "mcpServers": {
    "glimind": {
      "type": "http",
      "url": "https://glimind.com/mcp"
    }
  }
}

FAQ

Is the Hermoso Ai Hermoso MCP server down right now?

As of 2026-10-26 15:37 UTC, the Hermoso Ai Hermoso MCP server is unknown with a Glimind reliability score of 88/100 (grade B). Over the last 30 days it answered 99.8% of Glimind's liveness checks. It had 22 outages in 90 days, with a median recovery of 6 minutes.

How many tools does Hermoso Ai Hermoso MCP server provide?

Hermoso Ai Hermoso MCP server advertises 194 tools, including add_subtitles, analyze_video, append_to_doc, append_to_notion_page, append_to_sheet.

How do I install Hermoso Ai Hermoso MCP server?

Point your MCP client at this streamable-http endpoint: https://app.hermoso.ai/mcp

Is the Hermoso Ai Hermoso MCP server safe to connect to an AI agent?

Glimind scanned all 194 tool definitions for tool-poisoning patterns — hidden or invisible characters, instructions that override the model, concealment from the user, requests to read credential or MCP config files, conversation exfiltration and cross-tool shadowing — and found none. This checks what the server tells the model, not what its code does; review the source before granting access to sensitive data.

Operator of Hermoso Ai Hermoso MCP server?

Status page: 90-day uptime, every outage and how long it lasted.

Claim this listing to get the Verified operator marker, a remediation checklist and owner analytics, or embed the live badge from any of the tool pages above. Maintainers: alerts, deploy attestation and monthly reports.

Status is an automated estimate from Glimind's liveness checks (handshake and tool listing only; no tool is ever called) and may lag or differ from your network. Glimind is not affiliated with this server or its operator. Operator? Request a correction or opt out at https://glimind.com/opt-out.

Feedback
Help us improve