Emero
Server Details
Your AI assistant's creative studio. Make images, video, music and speech with Kling 4.0, Seedance 2.5, Nano Banana Pro, GPT Image 2.5 and more, billed at real model cost. A second brain learns from every generation and 100+ tested workflows, so results get better the more you make
- Status
- Healthy
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- EmeroAI/emero-mcp
- GitHub Stars
- 0
TDQS
Scored across 18 tools
Most tools are clearly distinct, and the descriptions proactively disambiguate the risky pairs (view vs inspect, ingest_url vs request_upload, generate vs combine_videos, save_to_emero_brain vs manage_emero_brain, list_project_creations vs search_creations). Still, check_generation and inspect both return visible asset copies, and the brain tools form a three-way cluster, so an agent must read carefully to select correctly.
Uniform snake_case with a predictable verb_noun shape across nearly all tools (get_settings, set_settings, search_creations, publish_workflow, combine_videos). The few single-verb tools (generate, inspect, view) are high-frequency, unambiguous primitives rather than inconsistencies.
18 tools covers a broad platform (generation, brain memory, skills, library search, workflow publishing), and each earns a place. It is on the heavier side for an agent to hold in context, especially given the very long descriptions.
Strong lifecycle coverage: generate -> check_generation, settings read/write, price list, ingest/upload/search/review assets, brain get/save/manage, skills, and workflow publish/unpublish. Gaps remain around asset library management (no delete/organize of creations), no generation cancel, and no way to browse or list published workflows.
Available Tools
18 toolscheck_generationCheck generationAInspect
Fetch the result of a generate / combine_videos job — pass the id it returned. Long-polls ~30s and, the moment it's ready, SHOWS the result to the user AND returns a copy you can see (one image, or a video poster frame) — so you never need a second call to view it. While rendering it reports elapsed vs typical time and whether to keep polling (short jobs) or STOP and hand off for a long render — for a long render, tell the user the wait and call this once when they return, don't poll in a loop. The progress % is coarse (not an ETA).
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| project_id | No | Opaque per-chat project id: "p-" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the long-poll duration, the user-visible side effect of displaying the result, the two-part return (shown result + copy for the agent), progress reporting versus typical time, and that the percentage is coarse rather than an ETA. It does not cover what is returned or how to react when a job fails or is cancelled, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the 'no second call needed' payoff, and every sentence adds an operational fact rather than filler. It is dense and clause-heavy with caps emphasis, which slightly hurts scannability, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-param polling tool with no annotations and no output schema, the description supplies the essential return shape (one image or a video poster frame) and full polling policy. The one missing piece is failure/cancellation behavior, which an agent would likely encounter while polling a render job.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%; job_id has no schema description, but the description compensates by explaining it is 'the id it returned' from generate/combine_videos, which gives the agent its provenance. project_id is already fully documented in the schema, so no duplication is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('fetch the result of a generate / combine_videos job') and identifies the sibling tools that produce the id. It also distinguishes itself from a plain lookup by noting the result is both shown to the user and returned, so no separate view call is needed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit branching guidance: keep polling for short jobs, but for a long render 'STOP and hand off' and call once when the user returns, with an explicit 'don't poll in a loop' prohibition. It also explains the polling window (~30s) and which id to pass, so the agent knows exactly when and how to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
combine_videosCombine videosAInspect
Join existing video clips into ONE continuous video, in the order given — assemble a multi-shot sequence from clips already in the library (NOT to generate new footage). Pass 1–10 artifact ids (job:#0 handles, in play order). Clips are normalized (resolution/fps) and concatenated, removing the jump between mismatched clips. TRIM: to cut a clip before joining, pass an object { id, start, end } (or { id, start, duration }) in SECONDS instead of a bare id; or set max_clip_seconds to keep the first N seconds of EVERY clip (models often return a longer clip than asked — e.g. ~4s for a 3s request). One clip + a trim is a valid single-clip trim. Ranges auto-clamp to the real clip length. AUDIO: pass audio_id (a voiceover from generate kind "speech") and/or music_id (a bed from generate kind "music") to lay over the result. audio_mode:"replace" (default) makes the overlay(s) the ONLY soundtrack (clips' own audio muted); audio_mode:"mix" lays them OVER the clips' audio — set clip_volume (0–2, e.g. 0.2) to quiet the clips' own sound effects under a voiceover. Each overlay has its own gain (audio_volume / music_volume, 0–2; e.g. VO 1.0, music 0.15) and optional fades (audio_fade_in/out, music_fade_in/out, seconds). ducking:true auto-lowers the clips' audio + music WHILE the voiceover speaks and lets them recover in the gaps (sidechaincompress) — the cleanest way to keep a VO on top. Per clip: a video_ids object can carry its own volume (e.g. {id, volume:0.3}) to set that one clip's audio level. Single clip + audio_id = swap one video's audio. Output is free (no model runs). Unsure which ids or their order? call search_creations or read the Recent list in get_settings first. If you have not loaded it this session, call load_skill("combining-videos").
| Name | Required | Description | Default |
|---|---|---|---|
| ducking | No | ||
| audio_id | No | ||
| music_id | No | ||
| video_ids | Yes | ||
| audio_mode | No | ||
| project_id | No | Opaque per-chat project id: "p-" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list. | |
| clip_volume | No | ||
| audio_volume | No | ||
| music_volume | No | ||
| project_name | No | Short human title for the project (2-5 words from the user request, e.g. "Perfume ad campaign"). Pass it on your first generate/ingest_url so the project is not left "Untitled". You may also rename at will later — pass an updated project_name (on a generate/ingest_url, or on set_settings with no other change) whenever the user asks, e.g. "call this project cats". | |
| audio_fade_in | No | ||
| music_fade_in | No | ||
| audio_fade_out | No | ||
| music_fade_out | No | ||
| max_clip_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so richly: normalization to a common resolution/fps, concatenation, clamping of ranges, audio replacement vs. mixing, ducking via sidechain compression, per-clip volume, and the fact that output is free. It explains the effects of each mode rather than merely naming them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and usage, then organizes detail under TRIM and AUDIO headings. It is dense and long, but for a 15-parameter tool with low schema coverage almost every sentence adds needed semantics; a small amount of tightening is possible but not much.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with no output schema and low schema coverage, the description fills every gap an agent needs: id formats, ordering, trimming, per-clip audio, overlay mixing, ducking, and the no-cost output. Nothing essential for correct invocation appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 13%, so the description must compensate, and it does: it explains the video_ids string vs. trim-object shape, seconds units for start/end/duration, max_clip_seconds behavior, audio_id/music_id sources, audio_mode semantics, clip/audio/music volume ranges, fade units, and ducking. The remaining project_id/project_name params already carry thorough schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Join existing video clips into ONE continuous video') and explicitly excludes the sibling generate path ('NOT to generate new footage'). The scope and ordering constraint are clear enough to distinguish it from every sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing: call search_creations or get_settings when ids or order are unknown, and load_skill('combining-videos') when the skill isn't loaded. Also clarifies the generate alternative is wrong for this task, so when/when-not is fully covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generateGenerateAInspect
Make an image, video clip, instrumental track, voiceover or upscale on emero, billed at cost to the user's emero balance.
Follow the generate skill, step by step: load_skill("generate") first and pass its tag as skill. In short: read the brain (get_emero_brain) → decide kind and scope → art direction for projects → video mode → call with confirm:false to get the plan and cost → show it → bind inputs → compose the prompt from the kind's craft skill → call again with confirm:true → check_generation → deliver. Every call carries brain_note: what the user decided since the last generation, or "".
Rules that always hold: the model is the user's choice, never switched for price or balance. One generation per request. Ids only for inputs, never URLs. Video needs video_mode: text, reference (reference_image_ids / reference_video_ids) or frames (start_frame_id / end_frame_id); references and frames never mix. Joining clips is combine_videos, not this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | upscale: 30 (default) or 60 (2x the price; only when asked). | |
| kind | Yes | What to make. upscale = a sharper / bigger version of an existing clip. | |
| text | No | speech: the exact words to speak. | |
| model | No | Optional: the user's chosen model (exact id from get_settings). Saved to the project. | |
| skill | Yes | The tag from the loaded generate skill, e.g. "generate@140". | |
| sound | No | video, on models that generate audio. Saved to the project. | |
| voice | No | speech voice name. Saved to the project. | |
| prompt | No | image, video, music. Built from the kind's craft skill (Step 7). | |
| confirm | Yes | false: return the plan and cost, spend nothing (generate Step 5). true: run it. | |
| quality | No | image. Saved to the project. | |
| duration | No | video, seconds. Saved to the project. | |
| source_id | No | upscale: the clip to upscale. | |
| brain_note | Yes | Step 11: what the user decided since the last generation, as one short preference (e.g. "Avoid dark, moody lighting"), or "" if nothing. Saved to this project's Second Brain on confirm:true. | |
| project_id | No | Opaque per-chat project id: "p-" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list. | |
| resolution | No | video. Saved to the project. | |
| video_mode | No | video only, required. Decided in Step 4 MODE. | |
| brain_quote | No | With a brain_note: the user's exact words it comes from. | |
| aspect_ratio | No | image, video. Saved to the project. | |
| end_frame_id | No | video frames mode: the last frame. | |
| project_name | No | Short human title for the project (2-5 words from the user request, e.g. "Perfume ad campaign"). Pass it on your first generate/ingest_url so the project is not left "Untitled". You may also rename at will later — pass an updated project_name (on a generate/ingest_url, or on set_settings with no other change) whenever the user asks, e.g. "call this project cats". | |
| prompt_source | No | Who wrote the prompt. "authored" (default): you wrote it — it must follow the skill's Mandatory Prompt Shape. "user_verbatim": the user gave you this exact text — sent as-is. "template": you filled a skill's prompt template (e.g. product-sheet-prompts). | |
| start_frame_id | No | video frames mode: the first frame. | |
| upscale_resolution | No | upscale: target resolution. | |
| reference_image_ids | No | image (up to 8) or video reference mode. Ids, never URLs. | |
| reference_video_ids | No | video reference mode: clips to borrow motion or camera from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only flag it as a non-idempotent write with open-world effects; the description adds the real behavioral load: billing at cost to the user's balance, the confirm:false/true two-phase commit that spends nothing until confirmed, and the side effect that brain_note is persisted to the project's Second Brain on confirm. It also encodes a hard constraint the annotations cannot express — the model is never switched for price or balance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The capability and cost statement is front-loaded, then the workflow, then the invariants — a sensible ordering for a 25-parameter orchestration tool. It is long and the arrow-chain middle paragraph is dense, but for this parameter count almost every sentence carries a rule an agent would otherwise get wrong.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 25-parameter, non-idempotent generation tool with no output schema, it covers triggering, sequencing, cost gating, input binding and post-call verification. It stops short of describing failure handling, refunds on failed generations, or latency/polling expectations beyond naming check_generation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents every field; the description goes beyond it by adding cross-parameter rules that no single field carries, notably that references and frames never mix and that video_mode is mandatory whenever kind=video. It restates some schema content (ids never URLs, brain_note format), which keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb (make) and enumerates the exact outputs (image, video clip, instrumental track, voiceover, upscale) plus the billing model. It explicitly separates itself from combine_videos for joining clips, so an agent can route correctly without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides an explicit ordered workflow with named sibling calls (load_skill → get_emero_brain → generate → check_generation), and states the when-nots: one generation per request, clips get joined with combine_videos, references and frames never mix. Alternatives and exclusions are both spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_emero_brainGet emero brainAInspect
Read this brand's emero brain in full: the look-lock sheet, style and model leanings, defaults, graded rules (require/forbid/prefer), locked subjects (Characters/Products, each with an anchor id to pass as reference_image_ids) and decisions — brand-wide plus this project's, each with its id, and the brand's other projects. Call it before the first generation for a brand: generations reuse its anchors and look-lock to stay consistent, and it is the same brain across every chat, device and teammate. get_settings shows a short version. Empty = no brain yet; it grows with save_to_emero_brain. load_skill("emero-brain") for the shape.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | Opaque per-chat project id: "p-" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list. | |
| project_name | No | Short human title for the project (2-5 words from the user request, e.g. "Perfume ad campaign"). Pass it on your first generate/ingest_url so the project is not left "Untitled". You may also rename at will later — pass an updated project_name (on a generate/ingest_url, or on set_settings with no other change) whenever the user asks, e.g. "call this project cats". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that the brain is shared across chats, devices and teammates, that an empty result means no brain exists yet, and that anchor ids are meant to be passed as reference_image_ids. It does not address permissions, error behavior, or size/response characteristics for very large brains, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the read action and its contents, then the when-to-call, then the disambiguation cues. The long em-dash inventory of brain contents is dense but each element maps to a distinct part of the return value; it could be trimmed slightly but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe the return shape — and it does, enumerating look-lock, rules, locked subjects with anchor ids, and per-project plus brand-wide decisions with ids. Combined with the call-timing guidance and the empty-state note, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters carry detailed guidance (minting the p- id, reusing it, renaming via project_name), so the schema already does the heavy lifting. The description adds nothing about project_id semantics beyond referring to "this project's" decisions and "the brand's other projects," so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resource ("Read this brand's emero brain in full") followed by an explicit inventory of what the brain contains: look-lock sheet, style/model leanings, defaults, graded rules, locked subjects with anchor ids, and decisions. It separates itself from siblings by naming get_settings ("short version"), save_to_emero_brain (growth), and load_skill (shape).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger — "Call it before the first generation for a brand" — plus the rationale (anchors and look-lock reused for consistency). It also routes the agent to alternatives for adjacent needs: get_settings for the short version, save_to_emero_brain for writing, load_skill for the data shape.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pricelistModel price listARead-onlyInspect
Read-only. Every emero model and its per-generation cost in USD, from the live at-cost rate card (zero markup). Optional filters: kind (image/video/music/speech/edit) and model (exact id). Each model lists its price tiers (quality / resolution / duration / sound) with the unit basis — per image, per second of output, per generation, or per 1,000 characters. Use it when the user asks what something costs or wants the full price list. Changes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| model | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so 'Read-only' and 'Changes nothing' are largely restatements. The description does add real value beyond them: the data is the live at-cost rate card with zero markup, and it discloses the shape of each model entry (price tiers by quality/resolution/duration/sound plus unit basis).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Densely packed but front-loaded – the read-only guarantee and the resource come first, then filters, then return shape, then the usage trigger. Every sentence contributes; the only mild redundancy is 'Changes nothing' echoing 'Read-only'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must convey the return shape, and it does: per-model price tiers with unit basis. Nothing is said about result size or pagination for the unfiltered full list, which is the one gap for a zero-required-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden and does so: it enumerates the allowed kind values (image/video/music/speech/edit) and tells the agent that model expects an exact id. What it omits is whether model accepts partial matches or is case-sensitive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource – read every emero model's per-generation cost in USD – with the scope (live at-cost rate card, zero markup) made explicit. No sibling tool does anything similar, so no disambiguation is required.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear trigger: 'Use it when the user asks what something costs or wants the full price list.' It also explains that filters are optional and how to narrow results. It stops short of naming an alternative or a when-not condition, but none of the listed siblings compete with it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_settingsGet generation settingsAInspect
Read the current generation settings (model, aspect ratio, quality, duration, resolution, sound, voice, speed), the estimated per-generation cost for image + video, the user's balance, this project's spend, and a short data view of the brand's emero brain (look-lock, rules, subject anchors). Call it before each image or video: show the user the model and cost first — the model is the user's choice. Pass compact:true for a cheap balance / spend / current-model check (skips the catalog and the brain).
| Name | Required | Description | Default |
|---|---|---|---|
| compact | No | ||
| project_id | No | Opaque per-chat project id: "p-" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and discloses that this is a read operation ('Read'), what data is returned, and that compact:true is a 'cheap' check that skips the catalog and brain. It does not mention permissions, rate limits, or error behavior, but for a read-only tool it provides solid behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with what the tool reads and follows with usage guidance. It is a bit dense but every sentence contributes useful information; it could be slightly more scannable, but it is appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema and only two parameters, the description is complete enough: it enumerates the main return values and explains the compact mode. It does not describe the response format or error cases, but those are minor gaps for a read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%: project_id is fully documented in the schema, but compact has no schema description. The description compensates by explaining that compact:true skips the catalog and brain for a cheap balance/spend/current-model check, adding meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read') and resource ('current generation settings') and enumerates the returned data (model, aspect ratio, quality, duration, resolution, sound, voice, speed, cost, balance, spend, brain view). It clearly distinguishes itself from set_settings (write) and from more specialized siblings like get_pricelist or get_emero_brain by being a combined read.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage: 'Call it before each image or video' and 'show the user the model and cost first.' It also explains when to use the compact flag. It does not mention when to avoid this tool in favor of alternatives, but the primary context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ingest_urlStore a reference imageAInspect
Store an image INTO emero's library so it can anchor a generation — the user's own subject / product / character / scene, or an external reference you've already chosen. Returns a job:<uuid>#0 id; pass it into generate as reference_image_ids (images: up to 8) or as a video's start_frame_id / end_frame_id. No UI. NEVER base64 a file into your reply.
url: a public https image URL.file: only works when your client provides a publicly reachabledownload_urlwith the attachment. A local or sandbox path will fail — use request_upload instead. To just LOOK at an image (web research, a candidate reference) without storing it, useinspect, not this. Only ingest_url the images you've decided to keep and reuse.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| file | No | ||
| project_id | No | Opaque per-chat project id: "p-" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list. | |
| project_name | No | Short human title for the project (2-5 words from the user request, e.g. "Perfume ad campaign"). Pass it on your first generate/ingest_url so the project is not left "Untitled". You may also rename at will later — pass an updated project_name (on a generate/ingest_url, or on set_settings with no other change) whenever the user asks, e.g. "call this project cats". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry the full load and largely does: it discloses the return identifier format (`job:<uuid>#0`), the ≤8 image cardinality when passed to `generate`, the requirement that `url` be public https and that `file` needs a publicly reachable `download_url`, and the hard constraint never to base64 a file into the reply. The only untouched operator concerns are auth and rate limits, which are minor for this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the capability and the returned id before the bullet list, and every bullet adds a real constraint. Minor deduction: the fragment "No UI" is cryptic on its own, and the base64 warning sits awkwardly mid-paragraph rather than with the other `file` guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter nested-object tool with no output schema and no annotations, the description covers what an agent needs to call it correctly: inputs accepted, preconditions, the return value's shape, and exactly which sibling fields consume it. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Coverage is split cleanly: the description supplies the semantics for `url` (public https image URL) and `file` (requires a reachable `download_url`, local paths fail), while the schema's own descriptions cover `project_id` and `project_name` in depth. Together every parameter is explained with more than type information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ("Store an image INTO emero's library") and immediately states the downstream purpose — anchoring a generation with a subject/product/character/scene. It explicitly differentiates from siblings by naming `inspect` for look-only and `request_upload` for local paths.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-not-to-use rules: "To just LOOK at an image ... use `inspect`, not this," and "a local or sandbox path will fail — use request_upload instead." It also frames the selection criterion ("Only ingest_url the images you've decided to keep and reuse"), so the agent can decide without opening any schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspectInspect assets (for you only)AInspect
Look at assets yourself — never shown to the user. Pass artifact_ids: emero ids or external https image URLs.
images (default true): returns a copy YOU can see (downscaled ~1024px, up to 8). For a video, its labeled contact sheet — use it to review MOTION. Each asset comes to you AT MOST ONCE per project; pass force:true ONLY after your context was compacted.
include_details (default false): per emero generation, the EXACT prompt it ran with, model, settings (duration, resolution, aspect…), its inputs as artifact ids with their role (start/end frame, reference), and its project — on every call, for any project of the brand. Use it to rebuild a past prompt, or to debug repeated fixes. images:false + include_details:true just reads them. Call it in its own step — after check_generation's result has arrived, not alongside it.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| images | No | ||
| project_id | Yes | Opaque per-chat project id: "p-" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list. | |
| artifact_ids | Yes | ||
| include_details | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does a lot: it discloses that images are downscaled ~1024px, capped at 8, delivered at most once per project, that videos come as labeled contact sheets, and that include_details surfaces prompt/model/settings/inputs across any project of the brand. Gaps remain around error behavior and what happens if caps are exceeded.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, then bullets map cleanly to parameters, ending with the sequencing constraint. Dense but nearly every clause carries operational information; a couple of phrasings ('AT MOST ONCE per project') are terse enough to risk misreading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param tool with no output schema and thin schema documentation, the description explains what comes back (visible image copies, motion contact sheets, generation metadata) and how to behave. Missing only edge-case behavior such as exceeding the 8-image / 20-id caps or failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 20% (only project_id is documented), yet the description fully compensates: it defines artifact_ids as emero ids OR external https image URLs, gives defaults and semantics for images (downscaled copy, up to 8, once per project), include_details (exact prompt, model, settings, roles, project), and force (only after compaction). This is meaning well beyond the bare boolean/array schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Look at assets yourself') plus a crucial scope distinction ('never shown to the user') that separates it from a user-facing view tool. It doesn't name the sibling `view` explicitly, so the agent must infer the contrast, which keeps it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit conditions and sequencing: 'Call it in its own step — after check_generation's result has arrived, not alongside it', 'pass force:true ONLY after your context was compacted', and two concrete purposes (review MOTION, rebuild a past prompt / debug repeated fixes). The when-not condition on `force` is exactly the kind of exclusion that prevents misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_project_creationsList project creationsAInspect
Widget-only (the inline creation widget calls it; the assistant never does). Returns the 12 newest creations in this chat's project with their status, embedded thumbnails and links, so the widget can render and live-refresh its tiles. Read-only. To find past work by description across every project, use search_creations instead.
| Name | Required | Description | Default |
|---|---|---|---|
| have | No | Creation ids the widget already shows thumbnails for. Their thumbnails and links are skipped in the reply to keep refreshes light. Omit on the first load. | |
| project_id | No | Opaque per-chat project id: "p-" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does state read-only, the 12-item cap, the returned fields (status, embedded thumbnails, links), and that refreshes are live/lightweight. It does not cover failure modes or how skipping works beyond what the schema says, keeping it just short of 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the caller constraint that determines whether an agent should use it at all, followed by return contents and the alternative. Nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description says exactly what comes back (status, thumbnails, links, 12 newest) so an agent need not guess. Combined with fully documented parameters, nothing required to call or interpret it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: both 'have' and 'project_id' are fully documented in the schema, including the skipping behavior and project-id minting rules. The description only hints at refresh behavior ('live-refresh its tiles'), so the schema does the heavy lifting and a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus precise scope: the 12 newest creations in this chat's project, with status, thumbnails and links. It also declares the caller boundary (widget-only, the assistant never calls it), which distinguishes it cleanly from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says who calls it (the inline creation widget) and who does not (the assistant), and names the alternative for the other job: use search_creations to find past work by description across every project. When-to-use and when-not-to-use are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_skillLoad skillAInspect
Load emero's guidance for a task before your first use of it (skill v140). Skills are cached per version: if the steps of a skill you loaded earlier are no longer visible in this chat (e.g. only a summary of it remains), load it again. Start every generation with load_skill("generate") (the step-by-step procedure and the tag generate requires); craft skills for its Step 7: make-image, make-video, make-music, make-speech, upscale-video. Also: art-direction, combining-videos, organizing-generations. Call load_skill("index") to list every available skill + workflow. (Name is a free string so new skills/workflows can appear without reconnecting.)
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and discloses important traits: skills are cached per version, re-loading is required when a prior skill's steps disappear, and the name is a free string so new skills can appear without reconnecting. It stops short of describing the return format or confirming read-only behavior, but the essential operational behavior is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main action and first-use guidance are front-loaded, and most sentences earn their place by explaining caching, re-loading, and index lookup. The long inline list of skill names and the version parenthetical add some bulk that could be tightened, but overall the paragraph is appropriately dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema and no annotations, the description provides enough context to invoke it correctly: when to load, how caching affects re-use, valid name examples, and how to discover the full set. It could be slightly more complete by describing the shape of the returned guidance, but nothing critical to invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so by explaining that 'name' is a free string, listing concrete values (generate, index, make-image, make-video, make-music, make-speech, upscale-video, art-direction, combining-videos, organizing-generations), and pointing to load_skill("index") for the complete list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Load') and resource ('emero's guidance for a task') and scopes it to 'before your first use of it.' It also distinguishes itself from sibling 'generate' by instructing that every generation should start with load_skill("generate").
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to call it (before first use), when to call it again (if prior steps are no longer visible), and which name to use for generation and for listing all skills via load_skill("index"). This leaves little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_emero_brainManage emero brainAInspect
Change existing emero brain entries — ONLY when the user's latest message asked for it or reversed a decision, never on your own judgment. Pass the user's own words as user_request_quote. Actions: "supersede" (old_id → new_id: retire an entry in favour of one you just saved; the old one moves to History, linked to its replacement), "delete" (id, reason: soft-delete, the user can restore it), "update" (id, fields: edit title/summary/detail in place), "rescope" (id, scope: move between brand-wide and this project), "find_conflicts" (candidate: list active entries a planned entry may clash with; no quote needed). Ids come from get_emero_brain or a save result. A [locked] entry changes only when the user's words name it. Every change is logged and the user can undo it in the emero brain tab. load_skill("emero-brain") first if you haven't.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | delete / update / rescope: the entry | |
| scope | No | rescope: where it should apply | |
| action | Yes | ||
| fields | No | update: only the fields to change | |
| new_id | No | supersede: the already-saved replacement | |
| old_id | No | supersede: the entry being replaced | |
| reason | No | ||
| candidate | No | find_conflicts: the entry you plan to save | |
| project_id | No | Opaque per-chat project id: "p-" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list. | |
| user_request_quote | No | REQUIRED for every action except find_conflicts: the user's OWN words from their latest message asking for this change, verbatim. For a [locked] entry, their words must name it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden, and it does: supersede moves the old entry to History linked to its replacement, delete is a restorable soft-delete, update edits in place, rescope moves scope, every change is logged and user-undoable, and locked entries have an extra guard. These are exactly the safety and side-effect facts an agent needs before mutating state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical constraint is front-loaded and every clause is substantive. The long run-on sentences with nested parentheticals make it less scannable than a bulleted action list would be, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter mutation tool with nested objects, no annotations, and no output schema, the description still covers action semantics, safety/undo behavior, id provenance, prerequisite skill loading, and the user-consent gate. An agent can call it correctly without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 80% schema coverage the baseline is 3, but the description adds cross-parameter meaning the schema cannot: it maps each action to its required ids/fields ('supersede old_id → new_id', 'delete id, reason', 'update id, fields', 'rescope id, scope'), says where ids come from, and reinforces the user_request_quote requirement. It stops short of restating every field's constraints, which is fine.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Change existing emero brain entries') and then enumerates five named actions with their precise semantics. It implicitly contrasts with save_to_emero_brain (create) and get_emero_brain (read), and the action list lets an agent distinguish this tool from all siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when NOT to use it ('ONLY when the user's latest message asked for it or reversed a decision, never on your own judgment'), names the prerequisite (load_skill first), gives a per-action exception (find_conflicts needs no quote), and a locked-entry override. That is the full when/when-not/alternatives triad.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_workflowPublish workflowAIdempotentInspect
Publish a tested workflow from this chat to the public library at emero.studio/workflows and add it to today's email digest draft. Live immediately. Calling again with the same slug replaces that post.
You write the words; the server fills every fact. Never write a model name, a cost, or a prompt in the body: each {{gen:...}} token becomes the media plus its model, real cost and exact prompt.
slug: [use-case]-[model], lowercase-hyphens, e.g. "jewelry-video-ad-seedance". Never change it after publishing.
title: models first, then the use case. Comparing models: "Seedance 2.5 vs MiniMax H3 - jewelry ad from two photos". One model: "GPT Image 2.5 - photo to ink illustration in five styles". Use the model names the generations show.
seo_title: max 60 chars. Lead with the model people search for, then the outcome, e.g. "Seedance 2.5 Jewelry Video Ad from 2 Photos: Prompts + Cost", "Kling 3.0 Fashion Ad: Ostrich Hands Over a Bag".
summary: max 100 chars, one plain sentence on what the workflow does. No terminal period.
Brands: never put a real brand or its trademarks in the slug, title, seo_title, summary or teaser: no house names (Gucci, Prada, Louis Vuitton) and no product marks (Damier, Intrecciato, GG, Kelly). Describe the look instead: "orange monogram bucket hat", "woven leather bag". In the body, name a brand only where the workflow needs it, never as if the post were their ad. Every post shows a no-affiliation disclaimer.
teaser: a short noun phrase with its article for the email, e.g. "a 10 second jewelry ad from two photos".
body: markdown only (## headings, paragraphs, lists, bold, links), no HTML. Open with why the approach works, then "## 1. " per step, each step a short paragraph followed by its token. Place outputs with {{gen:}} using the id generation returned, e.g. {{gen:job:3e6bb619-7a5d-47e8-bec4-6d841e941634#0}}. End with "## Why it works".
alts: alt text per token, keyed by the same artifact id: what the output shows, e.g. "Emerald ring and necklace on black velvet". The model name is appended automatically.
cover (optional): the artifact id of the generation that represents the post in share previews, the library card and the top of the post. Pick the strongest single frame, e.g. the delivery shot of a fashion spot, not the empty background plate. Must be one of the body's {{gen}} ids. A video works, a still is taken from it. Omitted = the first generation in the body. To change the cover later, publish again with the same slug and the new cover.
replaces (optional): when you publish a post under a NEW slug to rename an existing one, pass the old slug here. The old post is taken down and its URL redirects to the new one, keeping its date. Never publish a renamed post without it, or the library shows the post twice.
Voice: concise, first person, plain words, no em dashes. Show the user the full post and get their go before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| alts | Yes | ||
| body | Yes | ||
| slug | Yes | ||
| cover | No | ||
| title | Yes | ||
| teaser | Yes | ||
| summary | Yes | ||
| replaces | No | ||
| seo_title | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotentHint=true and openWorldHint=true; the description adds the mechanism (slug-keyed replacement), the visibility consequence (live immediately, public library, share previews, email digest), and the server-side rewrite of {{gen:...}} tokens with real model, cost and prompt. It also discloses the brand/trademark policy and the auto-appended no-affiliation disclaimer, none of which are expressible in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and replacement semantics, then a tight per-field bullet list — efficient given seven required fields and no schema descriptions. It is long, and some bullets stack multiple illustrative examples where one would establish the rule, but essentially every sentence conveys a constraint an agent would otherwise get wrong.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-parameter, seven-required mutation with zero schema documentation and no output schema, the description covers input format, idempotency, the token/alt/cover relationship, the rename path and the human-approval gate. An agent could execute this correctly without further context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the whole burden and does: every one of the nine parameters is defined with format, length caps, examples and edge cases (slug pattern with a sample, seo_title max 60 chars, summary max 100 chars and no terminal period, alts keyed by artifact id, cover must be a body {{gen}} id, replaces takes the old slug). This is substantially more than the bare typed schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Publish a tested workflow from this chat to the public library at emero.studio/workflows') plus the concrete side effects: it goes live immediately and lands in today's email digest draft. The re-publish semantics ('Calling again with the same slug replaces that post') clearly separate it from unpublish_workflow and from the generation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit triggers and exclusions: use replaces when renaming to a new slug, 'Never publish a renamed post without it, or the library shows the post twice', and to change a cover 'publish again with the same slug'. It also imposes a pre-call protocol: show the full post and get the user's go-ahead first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_uploadAsk the user to upload a fileAInspect
Show the user an upload card so they can add their OWN image or video (use this only for a genuine human upload — e.g. their client couldn't hand a file to ingest_url). Returns an upload:<id>. Ask them to upload and click Done, then WAIT for their reply — don't poll. When they're done, pass upload: STRAIGHT into generate (reference_image_ids / start_frame_id / end_frame_id) or into view to see it — emero resolves it to the full-resolution file(s). Do NOT call request_upload again for the same file (a second call re-shows the card).
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | Opaque per-chat project id: "p-" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list. | |
| project_name | No | Short human title for the project (2-5 words from the user request, e.g. "Perfume ad campaign"). Pass it on your first generate/ingest_url so the project is not left "Untitled". You may also rename at will later — pass an updated project_name (on a generate/ingest_url, or on set_settings with no other change) whenever the user asks, e.g. "call this project cats". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so well: it discloses the upload-card interaction, the returned upload:<id>, the need to wait for the user, the lack of polling, and the fact that a second call re-shows the card. It also explains that emero resolves the token to full-resolution files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single tight paragraph that front-loads the purpose and then flows into usage, waiting behavior, downstream token handling, and the no-repeat warning. Every sentence adds operational value with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description states the return value ('upload:<id>') and explains how to use it in generate or view. Despite the absence of annotations, it covers the key interactive and idempotency behavior an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both project_id and project_name are already fully documented in the schema. The description adds no parameter-specific semantics beyond the schema, which is acceptable at this coverage level but does not exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (show an upload card) and resource (the user's own image or video), and explicitly distinguishes this from ingest_url by limiting it to genuine human uploads. An agent can tell it apart from sibling tools such as generate, view, and ingest_url without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance ('only for a genuine human upload — e.g. their client couldn't hand a file to ingest_url'), instructs the agent to wait rather than poll, says where to pass the resulting upload:<id>, and warns against calling it again for the same file.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_to_emero_brainSave to emero brainAInspect
Save ONE real decision the user made into this brand's emero brain. Call it when the user makes a brand decision — a rule, a look, a subject to reuse, a definition, or "remember this" about their brand or work: it shows in their emero brain tab, where they can review or edit it, and later generations in any chat reuse it. kind="rule" for a must/never/prefer standard (e.g. "always leave headroom at the top"), "preference" for a leaning (a look, a go-to model), "subject" for a Character or Product to reuse across shots (set asset_kind + image_job_ids = the generation/upload ids of its reference image(s)), "decision" for a creative call (a definition, a direction), "look" for the whole look-lock sheet the user approved (summary = one line, detail = the full sheet: palette roles, light recipe, lens family, casting, wardrobe, materials, grain). scope: "project" when the user ties it to this project/campaign ("in this project", "for this campaign"), "brand" when it's how the brand always works ("always", "for the brand") — required for rule/preference/decision; subjects and looks default to brand. emero grades it but NEVER replaces an earlier entry on its own: if the save reports possible conflicts, the old entries are still active — supersede only if the user's message replaces them, else ask. Save ONLY what the user actually said or did; never invent rules. load_skill("emero-brain") for when to use each kind.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| scope | No | ||
| title | Yes | ||
| detail | No | ||
| summary | Yes | ||
| asset_kind | No | ||
| project_id | No | Opaque per-chat project id: "p-" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list. | |
| project_name | No | Short human title for the project (2-5 words from the user request, e.g. "Perfume ad campaign"). Pass it on your first generate/ingest_url so the project is not left "Untitled". You may also rename at will later — pass an updated project_name (on a generate/ingest_url, or on set_settings with no other change) whenever the user asks, e.g. "call this project cats". | |
| image_job_ids | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it discloses persistence and cross-chat reuse, user editability, that grading never auto-replaces prior entries, and that a save can report possible conflicts requiring a follow-up question. It also adds a strong anti-invention constraint ('Save ONLY what the user actually said or did').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core instruction and the trigger are front-loaded, and nearly every clause carries operational content. However, it is one dense, unbroken paragraph with semicolon-chained clauses, making it hard to scan; some of the supersede/conflict guidance overlaps with the 'save only what the user said' constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter mutation tool with no annotations and no output schema, the description is thorough on when to call, which kind, which scope, and conflict handling. Gaps remain on what a successful save returns, how title/summary should be shaped for non-'look' kinds, and any auth or failure behavior beyond the conflict report.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 22%, but the description compensates heavily: every 'kind' enum value is defined with examples, 'scope' is explained including defaults per kind, and asset_kind/image_job_ids semantics are spelled out as reference-image ids. It also gives shape guidance for summary and detail on the 'look' kind.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Save ONE real decision ... into this brand's emero brain') and enumerates exactly what counts as a saveable decision. The sibling separation is implied rather than named — it alludes to the brain tab where entries 'can review or edit' but never references get_emero_brain or manage_emero_brain by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('Call it when the user makes a brand decision'), then per-value guidance for each kind, scope selection rules with example phrases, and a conflict rule ('supersede only if the user's message replaces them, else ask'). It also names the escalation path — load_skill("emero-brain") — for the remaining ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_creationsSearch creationsAInspect
Find the user's past emero generations (across every project of the brand) by natural-language description. Returns artifact ids with a short description of the output, its age, model, project and a prompt_preview (first ~200 chars, no URLs). For the FULL prompt + settings a generation used (e.g. "make it like that earlier one"), call inspect with include_details:true. Load the organizing-generations skill first if you haven't.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| modality | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does most of it well: it enumerates the returned fields (artifact ids, short description, age, model, project) and the exact shape of prompt_preview (~200 chars, no URLs), which substitutes for the absent output schema. It does not state read-only/non-destructive behavior, result ordering, or any cost/latency characteristics, so a small gap remains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the primary purpose front-loaded, then the return shape, then the escalation path to inspect and the skill prerequisite. No restatement of the title and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description covers purpose, returned fields, and the follow-up tool, which is what an agent needs to act. The missing pieces are the semantics of the modality and limit parameters and confirmation that this is a safe read operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and only partially does: it explains that 'query' is a natural-language description of the desired generation. The 'modality' filter and the tightly bounded 'limit' (3-8) get no mention at all, leaving two of three parameters undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Find the user's past emero generations') plus a scope qualifier ('across every project of the brand') and the matching mechanism ('natural-language description'). This is clearly distinguishable from list_project_creations and inspect, which it names as the detailed-lookup alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use this for natural-language discovery, then call inspect with include_details:true when the full prompt/settings are needed, illustrated with a concrete example ('make it like that earlier one'). It also states a prerequisite ('Load the organizing-generations skill first if you haven't'), so nothing about when to invoke it is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_settingsChange generation settings or rename the projectAInspect
Change generation settings AFTER the user confirms — never pick a model or format for them unprompted. Pass only the keys to change; the rest stay. Values are validated + clamped to what the chosen model supports (an unknown model is rejected). The change persists as the base for future generations. Aspect: 9:16 = social/portrait, 16:9 = youtube/landscape, 1:1 = square. Also renames the project: pass project_name with this chat's project_id whenever the user says e.g. 'call this project cats'. Rename only the project this chat is working in; for another project, tell the user to ask in that project's chat. The app sends users here to rename projects, so the Second Brain stays in sync. Returns the updated settings + cost.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | Opaque per-chat project id: "p-" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list. | |
| voice_name | No | ||
| image_model | No | ||
| music_model | No | ||
| video_model | No | ||
| video_sound | No | ||
| voice_model | No | ||
| project_name | No | Short human title for the project (2-5 words from the user request, e.g. "Perfume ad campaign"). Pass it on your first generate/ingest_url so the project is not left "Untitled". You may also rename at will later — pass an updated project_name (on a generate/ingest_url, or on set_settings with no other change) whenever the user asks, e.g. "call this project cats". | |
| speech_speed | No | ||
| image_quality | No | ||
| video_duration | No | ||
| video_resolution | No | ||
| image_aspect_ratio | No | ||
| video_aspect_ratio | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that values are validated and clamped to the chosen model's capabilities, that an unknown model is rejected, that the change persists as the base for future generations, and that the response includes updated settings plus cost. It does not say what happens with an empty call or whether any auth scope is required, which are the remaining gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the confirmation precondition and partial-update rule lead, and each subsequent sentence adds distinct information (validation, persistence, aspect-ratio map, rename scoping, return value). The mid-paragraph aspect-ratio aside slightly interrupts the flow between the settings and rename aspects.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter mutation tool with no annotations and no output schema, the description is unusually complete on behavior, guardrails and return values. The residual gap is parameter-level documentation for the model/quality/duration fields, which neither the schema nor the description supplies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 14% across 14 parameters, so the description must compensate, and it only partly does: it explains the aspect-ratio vocabulary (9:16 social/portrait, 16:9 YouTube, 1:1 square) and the rename semantics of project_name. The model names, speech_speed, video_duration, video_resolution, image_quality and video_sound still have no value guidance anywhere, so twelve parameters remain semantically thin.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (change settings) plus a second explicit action (rename the project via project_name), which lets an agent separate it from read-side siblings like get_settings. It does not explicitly name get_settings as the read counterpart, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use rules ('AFTER the user confirms — never pick a model or format for them unprompted'), an exclusion for renaming another project ('tell the user to ask in that project's chat'), and an alternative path (project_name on generate/ingest_url). It also states the partial-update rule ('pass only the keys to change'), leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unpublish_workflowUnpublish workflowADestructiveIdempotentInspect
Take a published workflow off the public library by its slug. The post is kept and can be republished with publish_workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false and openWorldHint=true, so the safety profile is covered structurally. The description adds genuinely useful context beyond that: the underlying post survives and can be restored via publish_workflow, which tells an agent this is a reversible visibility change rather than data loss. It omits permission/ownership requirements and any effect on existing links to the published page.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler; the action and scope come first, and the reversibility fact follows as the one piece of context that changes agent behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with rich annotations and no output schema, the description covers what happens, what is preserved, and how to undo it. Only the response behavior and ownership requirements are left unstated, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single slug parameter, so the description must compensate. It confirms the identifier is a slug and that it refers to a published workflow, but gives no format, source, or example, leaving the agent to infer where the slug comes from.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (take off) and resource (a published workflow on the public library) with the keying identifier (slug). It also implicitly distinguishes itself from deletion by noting the post is kept, and names publish_workflow as the inverse operation, so an agent can place it precisely among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear condition for use (removing an item from the public library) and names the counterpart publish_workflow for the reverse action. It stops short of stating prerequisites such as ownership or auth requirements needed to unpublish, or explicit when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
viewShow assets to the userAInspect
Show the user assets inline — pass artifact_ids (one or many): emero ids ("job:#" / "upload:") or external https image URLs. This NEVER sends them to you: to look at an asset yourself, or read its exact prompt + settings, use inspect.
NEVER stores — to KEEP an external image for reuse, use ingest_url after you've chosen it. Do NOT call view on a generation you just made: check_generation already showed it to the user.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| show_user | No | ||
| project_id | Yes | Opaque per-chat project id: "p-" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list. | |
| artifact_ids | Yes | ||
| return_image | No | ||
| include_details | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does it well: it discloses the two critical behaviors — this NEVER returns the asset to the caller and NEVER stores anything — plus the required id formats. What it omits is the side-effect semantics of `force` and `show_user`, i.e. whether the display is suppressed or override-able.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and id formats come first, then each subsequent sentence is a single-purpose directive (don't inspect via view, don't store via view, don't re-show a fresh generation). Dense but zero filler, and the capitalized NEVER / Do NOT markers make the constraints scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Naming, routing, and the no-return/no-store contract are fully covered, and no output schema exists to explain. However, for a 6-parameter tool with 17% schema coverage, the meaning and effect of `force`, `show_user`, `return_image`, and `include_details` is absent, which an agent cannot infer safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 17%, so the description must compensate. It covers `artifact_ids` thoroughly with concrete id formats ('job:<uuid>#<index>', 'upload:<id>', https URLs), but the four booleans — `force`, `show_user`, `return_image`, `include_details` — are completely undocumented in both schema and description, leaving half the surface unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (show assets inline to the user) and enumerates the accepted id formats. It actively distinguishes itself from three siblings by name — `inspect`, `ingest_url`, and `check_generation` — so the agent can route correctly without opening another schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use (show assets inline), when-not-to-use (do NOT call on a generation you just made, since check_generation already showed it), and the exact alternative for each adjacent need: `inspect` to view it yourself, `ingest_url` to persist an external image. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
13 tool updates
- Changed
check_generation1 field changed- changed
Input schema / properties / project_id / descriptionPrevious value: -"Opaque per-chat project id. Mint one on your first emero action, pass that SAME id every call. One project per chat: NEVER mint a second for a new topic/campaign/subject/vibe — all stay in the one project; a new id is only for a new chat (server folds a stray id back in). A new chat the user says continues an earlier project reuses that project's id (from get_emero_brain's project list)."New value: +"Opaque per-chat project id: \"p-\" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list."
- Changed
combine_videos1 field changed- changed
Input schema / properties / project_id / descriptionPrevious value: -"Opaque per-chat project id. Mint one on your first emero action, pass that SAME id every call. One project per chat: NEVER mint a second for a new topic/campaign/subject/vibe — all stay in the one project; a new id is only for a new chat (server folds a stray id back in). A new chat the user says continues an earlier project reuses that project's id (from get_emero_brain's project list)."New value: +"Opaque per-chat project id: \"p-\" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list."
- Changed
generate1 field changed- changed
Input schema / properties / project_id / descriptionPrevious value: -"Opaque per-chat project id. Mint one on your first emero action, pass that SAME id every call. One project per chat: NEVER mint a second for a new topic/campaign/subject/vibe — all stay in the one project; a new id is only for a new chat (server folds a stray id back in). A new chat the user says continues an earlier project reuses that project's id (from get_emero_brain's project list)."New value: +"Opaque per-chat project id: \"p-\" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list."
- Changed
get_emero_brain1 field changed- changed
Input schema / properties / project_id / descriptionPrevious value: -"Opaque per-chat project id. Mint one on your first emero action, pass that SAME id every call. One project per chat: NEVER mint a second for a new topic/campaign/subject/vibe — all stay in the one project; a new id is only for a new chat (server folds a stray id back in). A new chat the user says continues an earlier project reuses that project's id (from get_emero_brain's project list)."New value: +"Opaque per-chat project id: \"p-\" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list."
- Changed
get_settings1 field changed- changed
Input schema / properties / project_id / descriptionPrevious value: -"Opaque per-chat project id. Mint one on your first emero action, pass that SAME id every call. One project per chat: NEVER mint a second for a new topic/campaign/subject/vibe — all stay in the one project; a new id is only for a new chat (server folds a stray id back in). A new chat the user says continues an earlier project reuses that project's id (from get_emero_brain's project list)."New value: +"Opaque per-chat project id: \"p-\" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list."
- Changed
ingest_url1 field changed- changed
Input schema / properties / project_id / descriptionPrevious value: -"Opaque per-chat project id. Mint one on your first emero action, pass that SAME id every call. One project per chat: NEVER mint a second for a new topic/campaign/subject/vibe — all stay in the one project; a new id is only for a new chat (server folds a stray id back in). A new chat the user says continues an earlier project reuses that project's id (from get_emero_brain's project list)."New value: +"Opaque per-chat project id: \"p-\" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list."
- Changed
inspect1 field changed- changed
Input schema / properties / project_id / descriptionPrevious value: -"Opaque per-chat project id. Mint one on your first emero action, pass that SAME id every call. One project per chat: NEVER mint a second for a new topic/campaign/subject/vibe — all stay in the one project; a new id is only for a new chat (server folds a stray id back in). A new chat the user says continues an earlier project reuses that project's id (from get_emero_brain's project list)."New value: +"Opaque per-chat project id: \"p-\" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list."
- Changed
list_project_creations2 fields changed- added
Input schema / properties / have / descriptionAdded value: +"Creation ids the widget already shows thumbnails for. Their thumbnails and links are skipped in the reply to keep refreshes light. Omit on the first load." - changed
Input schema / properties / project_id / descriptionPrevious value: -"Opaque per-chat project id. Mint one on your first emero action, pass that SAME id every call. One project per chat: NEVER mint a second for a new topic/campaign/subject/vibe — all stay in the one project; a new id is only for a new chat (server folds a stray id back in). A new chat the user says continues an earlier project reuses that project's id (from get_emero_brain's project list)."New value: +"Opaque per-chat project id: \"p-\" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list."
- Changed
manage_emero_brain1 field changed- changed
Input schema / properties / project_id / descriptionPrevious value: -"Opaque per-chat project id. Mint one on your first emero action, pass that SAME id every call. One project per chat: NEVER mint a second for a new topic/campaign/subject/vibe — all stay in the one project; a new id is only for a new chat (server folds a stray id back in). A new chat the user says continues an earlier project reuses that project's id (from get_emero_brain's project list)."New value: +"Opaque per-chat project id: \"p-\" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list."
- Changed
request_upload1 field changed- changed
Input schema / properties / project_id / descriptionPrevious value: -"Opaque per-chat project id. Mint one on your first emero action, pass that SAME id every call. One project per chat: NEVER mint a second for a new topic/campaign/subject/vibe — all stay in the one project; a new id is only for a new chat (server folds a stray id back in). A new chat the user says continues an earlier project reuses that project's id (from get_emero_brain's project list)."New value: +"Opaque per-chat project id: \"p-\" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list."
- Changed
save_to_emero_brain1 field changed- changed
Input schema / properties / project_id / descriptionPrevious value: -"Opaque per-chat project id. Mint one on your first emero action, pass that SAME id every call. One project per chat: NEVER mint a second for a new topic/campaign/subject/vibe — all stay in the one project; a new id is only for a new chat (server folds a stray id back in). A new chat the user says continues an earlier project reuses that project's id (from get_emero_brain's project list)."New value: +"Opaque per-chat project id: \"p-\" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list."
- Changed
set_settings1 field changed- changed
Input schema / properties / project_id / descriptionPrevious value: -"Opaque per-chat project id. Mint one on your first emero action, pass that SAME id every call. One project per chat: NEVER mint a second for a new topic/campaign/subject/vibe — all stay in the one project; a new id is only for a new chat (server folds a stray id back in). A new chat the user says continues an earlier project reuses that project's id (from get_emero_brain's project list)."New value: +"Opaque per-chat project id: \"p-\" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list."
- Changed
view1 field changed- changed
Input schema / properties / project_id / descriptionPrevious value: -"Opaque per-chat project id. Mint one on your first emero action, pass that SAME id every call. One project per chat: NEVER mint a second for a new topic/campaign/subject/vibe — all stay in the one project; a new id is only for a new chat (server folds a stray id back in). A new chat the user says continues an earlier project reuses that project's id (from get_emero_brain's project list)."New value: +"Opaque per-chat project id: \"p-\" plus 6 random letters and digits. Every chat is a new project. Mint one on your first emero call and pass that SAME id on every call in this chat. Never mint a second one in the same chat, even for a new topic, campaign or subject. Only when the user asks to continue an earlier project, reuse its id from get_emero_brain's project list."
18 tool updates
- First observed
check_generation - First observed
combine_videos - First observed
generate - First observed
get_emero_brain - First observed
get_pricelist - First observed
get_settings - First observed
ingest_url - First observed
inspect - First observed
list_project_creations - First observed
load_skill - First observed
manage_emero_brain - First observed
publish_workflow - First observed
request_upload - First observed
save_to_emero_brain - First observed
search_creations - First observed
set_settings - First observed
unpublish_workflow - First observed
view
Publisher details
- Operator
- Emero
- Operator website
- https://www.emero.studio
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://github.com/EmeroAI/emero-mcp
- Trust center
- Not applicable
- Restrictions
- Needs an Emero account. Flat $10/month plus generations at model cost; new accounts get $2 of generations free · Publisher source
Related MCP Connectors
- KubflowOAuthai.kubflow
Create AI images, videos and audio with Veo, Kling, Seedance, Nano Banana, Suno and more.
AI video, images, music & SFX: Seedance 2.5, Veo 3.1, Kling 3.0, Nano Banana Pro, 20+ models.
Generate images, videos, music & lip sync with 200+ AI models (Flux, Veo 3, Kling, Suno)
Make AI video, images, voice and product ads with Seedance, Kling, Veo, Nano Banana and GPT Image.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables AI assistants to generate video, images, music, speech and sound effects, transcribe audio, edit and extend clips, and upscale media across 100+ models using a single API key. Also provides task tracking, model discovery, cost estimation and balance checks.14MIT
- AlicenseNot gradedqualityAmaintenanceGenerates images, videos, and speech via Google Nano Banana, Veo, Omni, and Gemini TTS models with pay-as-you-go crypto payments, no subscription required.2Apache 2.0
- AlicenseNot gradedqualityCmaintenanceGenerate and refine AI images/audio/video through natural conversation.411Apache 2.0
- AlicenseNot gradedqualityBmaintenanceAccess 400+ generative AI models directly from your AI assistant — generate images (FLUX, Midjourney, GPT-4o), create videos (Veo3, Kling), make music (Suno), and enhance photos, all via a single MCP server.12MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.