HiggsHole
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@HiggsHolegenerate an image of a cat wearing a top hat"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
HiggsHole
A self-hosted AI image and video generation console with a browsable media library, backed by the OpenRouter API and exposed to local AI agents over MCP.
Status: implemented. Web UI, REST API, MCP server and systemd unit are in place and covered by an offline test suite. See the design specification.
What it does
Text-to-image, text-to-video, image-to-image and image-to-video generation through a single OpenRouter API key
Model picker built from OpenRouter's live capability catalogue — no hardcoded model list, so new models appear without a code change
Generated media stored on local disk with metadata embedded in the files themselves, browsable and playable in the web UI
Any result can be fed back in as a reference for an edit or improvement pass, with the lineage recorded
An MCP server (stdio) exposing the same functionality to locally running AI agents
Spend controls: provider-enforced key limits, a local ledger of actual costs, and a daily cap
Related MCP server: mcp-media-engine
What it deliberately does not do
No prompt rewriting — prompts are passed to the provider verbatim
No authentication — intended for a trusted LAN
No multi-user support
No batch generation —
nis fixed at 1 so every generation has its own cost record
Quick start
uv sync
uv run pytest -q # the whole suite, offline and free
uv run higgshole # serves http://127.0.0.1:8077The suite makes no network requests and costs nothing: a socket-blocking
fixture enforces that rather than trusting convention. The single billable test
is opt-in behind HIGGSHOLE_LIVE_TESTS and skipped by default.
MCP tools
Eleven tools, each a thin translation of one REST call — see docs/mcp.md for client registration:
Tool | Behaviour |
| Image and video models with capability constraints |
| Synchronous; returns the finished asset |
| Returns a job ID immediately — does not block |
| Status, with optional bounded long-polling |
| Ingests a local file, returning a reusable asset ID |
| Browse with filters |
| Full metadata for one item, including lineage |
| Removes a generation, its files and its thumbnails |
| Enumerate projects |
| Create a project |
| Provider-authoritative credit plus local cap status |
Every asset-returning tool provides both the local filesystem path and the HTTP
URL, since agents run on the same host. Costs are strings or null — never 0
to represent an unknown cost.
Design notes
The specification records several verified corrections to OpenRouter's published documentation, including the true job-status enumeration, the unreliability of client-side video cost estimation, and the ephemerality of result URLs. These were established against the live API and its OpenAPI specification rather than the prose docs, which contradict it in places.
Requirements
Python 3.12+
ffmpeg/ffprobeAn OpenRouter API key
Runs anywhere Python and ffmpeg run. A systemd unit is provided for boot-time startup on Linux — see docs/deployment.md — but nothing in the architecture depends on it.
Configuration
Everything is configured through environment variables, readable from a .env
file — see .env.example for the full list with defaults. By
default the app writes under ${XDG_DATA_HOME:-~/.local/share}/higgshole and
${XDG_STATE_HOME:-~/.local/state}/higgshole and binds to 127.0.0.1, so a
fresh clone runs unprivileged with no setup.
Exposing it to your local network is a deliberate act: change
HIGGSHOLE_BIND_HOST. There is no authentication, by design.
If you set a daily spend cap, also set a credit limit on the OpenRouter key itself. That limit is enforced provider-side and is the only guard that cannot be defeated by a bug in this application.
Licence
MIT
Available Tools
11 toolscreate_projectC
Create a project and return its slug.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only says 'Create a project', which implies mutation, but lacks details on side effects, authorization needs, or error scenarios (e.g., duplicate names). No annotations are provided, so the description carries full burden but does not add sufficient 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 a single concise sentence with no redundant information, but it could benefit from more structure or additional context without sacrificing brevity.
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 the simple tool (one parameter, no output schema), the description covers the basic purpose and output, but lacks details on return value format, error handling, and relationship to sibling tools like list_projects.
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?
The sole parameter 'name' is required but the description does not explain its meaning, format, or constraints beyond the schema's type 'string'. With 0% schema description coverage, the description fails to compensate.
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 clearly states the action ('Create a project') and the return value ('return its slug'), distinguishing it from the sibling tool list_projects which is a read operation.
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?
No guidance on when to use this tool versus alternatives, no prerequisites, and no context on expected input like project uniqueness or naming constraints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_mediaB
Delete a generation together with its files and thumbnails.
| Name | Required | Description | Default |
|---|---|---|---|
| generation_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that deletion is cascading (removes files and thumbnails), which is key behavioral context. However, without annotations, it omits details like permission requirements, reversibility, or rate limits. The transparency is adequate but not thorough.
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 concise sentence with no waste. It efficiently conveys the core action and scope. A slightly more structured format (e.g., listing affected resources) could improve scannability but is not essential.
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 the tool's simplicity (one parameter, no output schema), the description covers the basic function. However, it lacks context about what a 'generation' is, potential side effects, and whether the operation is reversible. It is minimally complete.
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 0% schema description coverage, the parameter 'generation_id' is entirely undocumented in both schema and description. The description fails to explain what a generation ID is or how to obtain it, adding no value beyond the field name.
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 clearly states the action ('Delete') and the resource ('a generation together with its files and thumbnails'), making the purpose specific and unambiguous. No sibling tool has a similar verb, so differentiation is inherent.
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?
No guidance is provided on when to use this tool versus alternatives (e.g., using get_media to inspect before deletion) or when not to use it. The description lacks any context about prerequisites or contraindications.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_imageA
Generate one image synchronously and return the finished asset with both its local filesystem path and its HTTP URL. Blocks until the image exists. Batch generation is not supported.
| Name | Required | Description | Default |
|---|---|---|---|
| n | No | Fixed at 1; batch generation is not supported. | |
| seed | No | ||
| size | No | Explicit pixel dimensions, e.g. '1920x1080'. Authoritative: a conflicting resolution or aspect_ratio is rejected. | |
| model | Yes | Model ID from list_models. | |
| prompt | Yes | Passed to the provider verbatim. | |
| project | No | Project slug. Defaults to 'unsorted', which always exists. | unsorted |
| quality | No | ||
| resolution | No | ||
| aspect_ratio | No | ||
| output_format | No | ||
| input_reference_asset_ids | No | Asset IDs previously returned by upload_asset, get_media or a generation tool, used as image references. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses synchronous behavior and no batch support, but lacks details on side effects, auth requirements, rate limits, or failure behavior. Adequate given no 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?
Two sentences, no wasted words, front-loaded with key info.
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?
Covers essential behavioral traits and output hints (path+URL), but missing explicit return format and error handling. Good for a tool with no output schema and 11 parameters.
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 55% (moderate), description adds overall context (synchronous, path+URL) but minimal per-parameter detail beyond schema. Adequate but does not compensate fully.
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?
Description clearly states the verb 'generate', resource 'image', and key constraints: synchronous, single image, returns filesystem path and HTTP URL. Distinguishes from siblings like generate_video.
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?
Implicitly clarifies usage: use for synchronous single image generation when immediate output needed. No explicit alternatives or when-not-to-use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_videoA
Submit a video generation job and return its ID immediately. Does NOT wait for the render; poll with get_job.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | ||
| model | Yes | Model ID from list_models. | |
| prompt | Yes | Passed to the provider verbatim. | |
| project | No | Project slug. Defaults to 'unsorted', which always exists. | unsorted |
| duration | No | Seconds; must be a supported value. | |
| resolution | No | ||
| aspect_ratio | No | ||
| generate_audio | No | ||
| last_frame_asset_id | No | ||
| first_frame_asset_id | No | ||
| input_reference_asset_ids | No | Asset IDs previously returned by upload_asset, get_media or a generation tool, used as image references. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description discloses async job submission and ID return, but lacks details on side effects, auth requirements, rate limits, or success/failure conditions.
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 two concise sentences, efficient and front-loaded with key behavioral information.
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 11 parameters, no output schema, and no annotations, the description covers the core async pattern but omits details on many parameters and return value specifics beyond the ID.
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 45% (5/11 parameters have descriptions). The description does not add meaning for undocumented parameters like seed, resolution, aspect_ratio, generate_audio, etc., and does not compensate for the low coverage.
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 clearly states the tool submits a video generation job, returns its ID immediately, and does not wait for the render. It also directs to poll with get_job, distinguishing from synchronous 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 explains async behavior and directs polling, but does not explicitly compare with generate_image or list prerequisites like model selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_budgetA
Provider-authoritative remaining credit plus local daily-cap status. Amounts are strings or null; null means the cost is unknown, never zero.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavioral traits. It clarifies that amounts can be null and that null means unknown, not zero, which is useful. However, it does not disclose any side effects, authentication requirements, or rate limits.
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 most critical information (what it returns and null semantics) is front-loaded.
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 parameterless tool with no output schema, the description adequately explains the return values and their meaning. No additional context seems necessary.
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?
No parameters exist (schema is empty with 100% coverage), so the description naturally adds no parameter detail. Baseline score of 4 is appropriate as there is nothing to clarify.
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?
Description states it returns 'remaining credit' and 'local daily-cap status', specifying the resource and type of information. It is distinct from sibling tools which are about models, projects, images, etc.
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?
No guidance on when to use this tool versus alternatives. The description does not mention context or conditions for use, leaving the agent to infer from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_jobA
Fetch a generation's current state, optionally long-polling for up to wait_seconds. Returns the finished asset once the state is COMPLETE.
| Name | Required | Description | Default |
|---|---|---|---|
| wait_seconds | No | Long-poll for up to this many seconds. 0 returns the current state immediately. | |
| generation_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description must disclose behavioral traits. It does so by explaining the long-polling mechanism, the return of finished asset only when COMPLETE, and the immediate return of current state when wait_seconds=0. This adds useful context beyond a simple 'fetch state'. However, it does not mention permission requirements, rate limits, or error handling, which would be valuable.
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 two sentences, highly efficient, and front-loaded. Every word adds value: it names the action, the resource, the optional polling, and the result condition. No extraneous information.
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?
The tool is simple (2 parameters, no output schema, no annotations). The description covers the core polling behavior adequately, but lacks details about the structure of the returned state, possible statuses besides COMPLETE, and error scenarios. For a straightforward fetch tool, it is minimally complete but leaves some information for the agent to infer.
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?
The input schema has 50% description coverage (wait_seconds is described in schema, generation_id is not). The tool description repeats the wait_seconds behavior but adds nothing new about generation_id, which remains undocumented. With moderate coverage, the description does not fully compensate, so a score of 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?
The description clearly states 'Fetch a generation's current state' with a specific verb and resource. It distinguishes from sibling tools like generate_image, generate_video, and get_media by focusing on polling job status rather than creation or media fetching. However, it could be more explicit about differentiation from similar get_media or list_media 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?
The description explains the optional long-polling and the default behavior when wait_seconds=0, but does not provide guidance on when to use this tool vs alternatives like get_media (for finished assets) or list_media (for browsing). No when-not-to-use or alternative tool references are given, though the context of polling generation state is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mediaB
Full metadata for one generation, including its input lineage.
| Name | Required | Description | Default |
|---|---|---|---|
| generation_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must indicate behavioral traits. The term 'metadata' implies a read-only operation, but it does not explicitly state that it does not modify data, nor does it mention error handling or permissions. It provides minimal transparency.
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 concise sentence of 8 words, front-loaded with the key action 'Full metadata.' It is efficient with no extraneous information.
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?
The tool is simple with one parameter and no output schema. The description covers the basic purpose but lacks usage context and behavioral details. It is minimally complete but could be improved with additional guidance.
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?
The parameter 'generation_id' is not described in the schema (0% coverage). The description implicitly ties it to 'one generation,' but does not elaborate on its format or any constraints. The context is somewhat clear from the tool name, but the description could add more value.
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 clearly states it returns 'full metadata for one generation, including its input lineage,' which specifies the resource and scope. It is distinct from sibling tools like list_media and get_job, though it doesn't explicitly differentiate usage.
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?
No guidance on when to use this tool versus alternatives such as list_media or get_job. There is no mention of prerequisites or scenarios where this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mediaB
Browse the library with optional project, kind, model and date filters.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| limit | No | ||
| model | No | ||
| offset | No | ||
| project | No | ||
| created_after | No | ISO-8601 UTC, inclusive. | |
| created_before | No | ISO-8601 UTC, exclusive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions optional filters but omits pagination behavior (limit, offset), ordering, and that it is a read-only operation. The agent lacks critical 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 a single sentence that front-loads the action and key filters. It is efficient but could be slightly more structured to list parameters explicitly.
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 and 7 parameters (many undocumented), the description is too brief. It lacks details on return format, pagination details, and default behavior, making it incomplete for an AI agent to reliably invoke.
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 29% (only created_after and created_before have descriptions). The description adds meaning by listing four filter types (project, kind, model, date) but does not explain limit, offset, or exact date formats. Partial compensation for low coverage.
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 clearly specifies the verb 'browse' and the resource 'the library', implying media items. It lists optional filters (project, kind, model, date) and distinguishes from sibling tools like list_models and list_projects which list different entities.
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?
No explicit guidance on when to use this tool versus alternatives (e.g., get_media for single item, delete_media for deletion). The description only implies browsing with filters but does not state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsA
List available image and video models with their capability constraints. Read this before generating: supported resolutions, durations, aspect ratios and reference-image slots differ per model.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Restrict the listing to one media kind. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool returns capability constraints (resolutions, durations, etc.) and that these differ per model. For a read-only listing tool, this is sufficient transparency; no contradictions.
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 sentences with no waste. The first sentence states the purpose, and the second provides critical usage context. Front-loaded and efficient.
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 sibling tools (generate_image, generate_video) and no output schema, the description is nearly complete. It tells the agent to use this before generating and hints at the output. Could explicitly mention return type, but sufficient for this 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 100% for the single optional parameter 'kind'. The schema already describes its role. The description adds context about what the tool returns (capability constraints) but doesn't add new details about the parameter itself. 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?
The description clearly states the tool's purpose: 'List available image and video models with their capability constraints.' It uses a specific verb (list) and resource (models), and distinguishes itself from sibling tools like generate_image and generate_video by indicating it's a preliminary step.
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 advises 'Read this before generating,' implying use before generate_image or generate_video. It explains that constraints differ per model, giving context for when to use. However, it doesn't explicitly state when not to use or mention alternatives beyond the implied workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsB
List projects. 'unsorted' always exists.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose all behavioral traits. It only mentions that 'unsorted' always exists, which is a specific but unexplained behavior. It does not disclose return format, pagination, or other common list tool behaviors.
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 extremely concise with only two sentences. The first sentence is directly functional; the second adds a useful behavioral note without unnecessary verbosity. Every word earns its place.
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 the simplicity of the tool (no parameters, no output schema), the description covers the basic purpose. However, the 'unsorted' remark is cryptic and may require further clarification. Without annotations, the description is minimally adequate but not complete for an agent to fully understand the tool's behavior.
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?
There are zero parameters, and the schema coverage is 100%. With no parameters, the description does not need to add parameter information. Baseline of 4 is appropriate as per guidelines.
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 clearly states 'List projects', which identifies the verb and resource. The additional note about 'unsorted' existing adds some context, but it's not fully explained. It effectively distinguishes from sibling tools like list_models or create_project.
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?
No guidance on when to use this tool versus alternatives. The description does not mention when to use list_projects instead of other project-related tools like create_project or get_budget. Usage context is entirely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_assetA
Ingest a local file into a project's uploads directory and return an asset ID usable as an image reference or a video frame.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute or user-relative path to a local file on this host. | |
| project | No | Project slug. Defaults to 'unsorted', which always exists. | unsorted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description mentions the return value (asset ID) but does not disclose behavior on overwrite, file size limits, or permissions needed. Adequate but could be more transparent.
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?
Single sentence that is clear and to the point. No unnecessary words or redundancy. Perfectly concise.
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 simple params and no output schema, the description covers the main action and return value. Could mention error cases or file handling details, but sufficient for a straightforward 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 100% with descriptions for both parameters. The tool description adds minimal extra value, only restating that path is absolute or relative and project defaults to 'unsorted'. 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?
Clearly states the action (ingest), resource (local file to project uploads), and output (asset ID for image/video). Distinct from sibling tools like generate_image which create rather than upload.
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?
No explicit guidance on when to use this tool vs alternatives like generate_image or list_media. The purpose is clear but lacks context on when to prefer upload_asset over sibling tools.
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.
11 tool updates
v0.1.0- First observed
create_project - First observed
delete_media - First observed
generate_image - First observed
generate_video - First observed
get_budget - First observed
get_job - First observed
get_media - First observed
list_media - First observed
list_models - First observed
list_projects - First observed
upload_asset
TDQS
Scored across 11 tools
Each tool targets a distinct resource and action: models, projects, image/video generation, job polling, asset upload, media browsing, and budget. No overlapping purposes.
All tool names follow the verb_noun pattern in snake_case, e.g., list_models, generate_image, get_job. Consistent and predictable.
11 tools cover the core domain of media generation, project management, asset handling, and budget info without unnecessary bloat or omissions.
Core generation workflows are fully covered, but missing delete_project, list/delete uploaded assets, and get_project are minor gaps that agents can work around.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Generate AI images and videos from any compatible MCP client.
MCP server for OpenAI Sora AI video generation
MCP server for Grok Imagine AI video generation
MCP server for Qwen Image 3 AI image generation
Related MCP Servers
- AlicenseAqualityCmaintenanceAn MCP server for AI-powered media generation using Google Gemini, enabling creation of images, videos, music, and speech directly from AI agents.4MIT
- AlicenseAqualityBmaintenanceMCP server for AI-powered image, audio, and video generation, enabling media creation directly from Claude, Cursor, and other MCP clients.1164MIT
- AlicenseAqualityDmaintenanceMCP server for generating images using OpenRouter API, supporting models like Gemini 2.5 Flash. Enables image generation with flexible options like saving to local files.2Do What The F*ck You Want To Public
- AlicenseAqualityBmaintenanceAn MCP server that gives LLMs direct access to OpenRouter's Image API to generate images, edit/transform existing ones, and browse the model catalog.4131Apache 2.0