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. |
Capabilities
Features and capabilities supported by this server
| 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