hedra-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | Port for HTTP transport (default 3000). | 3000 |
| TRANSPORT | No | Transport mode: 'stdio' (default) or 'http'. Set to 'http' for remote deployment. | stdio |
| HEDRA_API_KEY | Yes | Your Hedra API key in the format <key_id>:<secret>. Required for authentication. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| hedra_list_modelsA | List every AI model available through the Hedra API — image, video, and audio/avatar generation models from partners like ByteDance (Seedance, Seedream), Google (Veo, Imagen), OpenAI (GPT Image), Kling, ElevenLabs, and Hedra's own avatar models. Use this first to discover a model's public id (e.g. "seedance-20", "veo-31", "hedra-avatar") before calling hedra_get_model_input_schema or hedra_submit_job with it. Args:
Returns: JSON with a "models" array, each entry having at least {id, name, modality}. Examples:
|
| hedra_get_modelA | Get full catalog details for one Hedra model: display name, modality, description, and any capability metadata Hedra publishes for it. This gives a human-readable overview. For the exact, machine-typed input parameters needed to submit a job (required fields, enums, media roles), use hedra_get_model_input_schema instead — this tool alone is not enough to construct a valid hedra_submit_job call. Args:
Returns: JSON object describing the model. Error Handling:
|
| hedra_get_model_input_schemaA | Get the exact, typed JSON Schema for one model's submit "input" object — required fields, enums (e.g. allowed resolutions, aspect ratios, durations), and which fields accept media references (images/videos/audios/start_image/end_image) versus plain text/numbers. ALWAYS call this before hedra_submit_job for a model you haven't used yet in this session — model input shapes vary significantly (e.g. Seedance uses duration_ms as an enum of fixed values; image models use a "quality" tier instead). Guessing the shape wastes a submit call and API validation is strict. Args:
Returns: A standalone OpenAPI operation object for this model's POST endpoint. The interesting part is components.schemas.Input_ (or similarly named) — its "properties" lists every input field with type, enum, and description; "required" lists which are mandatory. Examples:
|
| hedra_list_model_voicesA | List the text-to-speech voices a specific model accepts (scoped to that model's voice provider — e.g. ElevenLabs voices differ from Hedra Avatar's own voices). Use this before submitting a job to a speech or avatar model that takes a voice_id input. Args:
Returns: JSON with a "voices" array of {id, name, ...}. Error Handling:
|
| hedra_estimate_costA | Estimate the cost in USD of running a model with a given input, WITHOUT submitting a job or spending any wallet balance. Strongly recommended before hedra_submit_job for expensive operations (long videos, 4K, high-duration audio) so the person can approve spend first. Some models cannot be precisely quoted until inputs are measured server-side (e.g. audio-length-dependent avatar video) — in that case the response indicates the price isn't quotable yet and the real cost will be shown if a submit is refused for insufficient balance. Args:
Returns: JSON with the estimated price and currency (fields vary by model; some return {quotable:false} instead). Examples:
|
| hedra_submit_jobA | Submit a generation job to a Hedra model. This starts real, billed work against the API wallet — always confirm the model and input with the person for anything non-trivial, and consider calling hedra_estimate_cost first for expensive requests. Submission is asynchronous: this returns immediately with a job_id in IN_QUEUE or IN_PROGRESS status, not the finished result. Follow up with hedra_wait_for_job (simplest) or poll hedra_get_job_status / hedra_get_job yourself. Before your first call to this tool for a given model in this session, call hedra_get_model_input_schema to get the exact required fields and enums — submitting a malformed input wastes a round trip and Hedra's validation is strict (e.g. Seedance's duration_ms only accepts specific values: 4000, 5000 ... 15000). For any input field that takes a media reference (images, videos, audios, start_image, end_image, reference audio for voice cloning, etc.), first upload the file with hedra_upload_file and pass {"source":"url","url":} — or reuse a prior job's output with {"source":"asset","asset_id":<from outputs[].asset_id>}. Args:
Returns: JSON {job_id, model, status, status_url, result_url, estimated_completion_at}. Error Handling:
|
| hedra_get_jobA | Fetch the full result envelope for a job, including its outputs (with download URLs and asset_ids) once complete, or its error if it failed. Use this to retrieve the final generated file's URL, or the failure reason for a FAILED job. For a lighter-weight progress check while a job is still running, use hedra_get_job_status instead — or use hedra_wait_for_job to block until it finishes. Args:
Returns: JSON {job_id, model, status, outputs: [{url, asset_id, content_type, ...}], error, created_at, updated_at}. outputs[].url is the downloadable result; outputs[].asset_id can be fed back into another model's input as {"source":"asset","asset_id":...}. Error Handling:
|
| hedra_get_job_statusA | Lightweight poll of a job's current status and progress — cheaper than hedra_get_job for repeated polling while a job is still running. Args:
Returns: JSON {job_id, status: 'IN_QUEUE'|'IN_PROGRESS'|'COMPLETED'|'FAILED', progress, estimated_completion_at}. Once status is COMPLETED or FAILED, call hedra_get_job for the full result/outputs. Examples:
|
| hedra_wait_for_jobA | Poll a job until it reaches COMPLETED or FAILED (or the timeout elapses), then return the full result in one call. This is the simplest way to generate-and-wait without managing your own poll loop. For batches of jobs, call this once per job_id rather than trying to wait on several at once — there is no multi-job wait tool by design, to keep timeout/backoff behavior predictable per job. Args:
Returns: JSON {job_id, status, outputs, error, timed_out}. timed_out is true if the timeout elapsed before completion — in that case status reflects the last poll and the job may still finish later; call hedra_get_job again after more time. Examples:
|
| hedra_list_jobsA | List jobs submitted with this API key across all models, most recent activity first, paginated. Args:
Returns: JSON {jobs: [...], next_cursor}. has_more can be inferred from next_cursor being non-null. Examples:
|
| hedra_list_model_jobsA | List jobs submitted to one specific model, most recent first, paginated. Args:
Returns: JSON {jobs: [...], next_cursor}. |
| hedra_upload_fileA | Upload a file (image, video, or audio) to Hedra and get back a short-lived presigned URL to use as a media input in hedra_submit_job (e.g. a start_image, a reference image, a voice-cloning audio sample). Free — works even with $0.00 in the API wallet; funding is only enforced at job submission. The returned url expires 1 hour after upload; if it lapses before you submit, upload again. Provide EXACTLY ONE source:
Returns: JSON {url, content_type, expires_at}. Pass this straight into a model's input as {"source":"url","url":} for the appropriate field (per hedra_get_model_input_schema). Examples:
Error Handling:
|
| hedra_get_balanceA | Get the current spendable balance of the Hedra API wallet — the prepaid USD balance that pays for API generations. This is SEPARATE from Hedra Studio credits; funding one does not fund the other. Check this before submitting expensive or bulk jobs to confirm there's enough balance, or when a submit was refused with an INSUFFICIENT_BALANCE error. Returns: JSON {balance, currency}. Examples:
|
| hedra_get_usageA | Get API wallet usage/spend history and breakdown. Returns: JSON with usage details (shape depends on Hedra's current usage report format). Examples:
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/HemanthDonga/hedra-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server