lamina
Server Details
On-brand product photos, model try-ons, video reels & banners from a brief + brand kit.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Score is being calculated. Check back soon.
Available Tools
22 toolslamina_app_versionsAInspect
List a generated app's saved graph versions, or restore it to one. Every lamina_generate_workflow edit snapshots the app's prior graph first, so a bad edit is always recoverable.
appId(required): the generated app.Omit
restoreto LIST versions — returns{ versions: [{ version, createdAt, createdBy, changeSummary }] }, newest first.Pass
restore: <version>to RESTORE that version — swaps its graph + parameters back in (the current graph is snapshotted first, so restore is itself undoable). Returns{ appId, restoredFrom, newVersion }. Requires you to be the app creator or a workspace owner/admin.
| Name | Required | Description | Default |
|---|---|---|---|
| appId | Yes | The generated app to inspect or restore. | |
| apiKey | Yes | Lamina API key (starts with lma_) | |
| restore | No | A version number to restore (from the list). Omit to just list versions. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that restore modifies graph and parameters, current graph is snapshotted first (undoable), and requires creator or admin privileges. No annotation contradiction: readOnlyHint=false is consistent with restoration being a write operation.
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?
Concise, front-loaded with main purpose, every sentence adds unique information. Uses dash-list format for clarity without unnecessary verbosity.
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?
Coverage is comprehensive: explains both actions, return values, behavioral nuances, and authorization requirements. No output schema, but return formats are explicitly described.
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%, but description adds value by explaining the dual-mode behavior (omit vs. pass restore) and the return format for each mode, which is beyond the schema's property 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?
The description clearly states the tool lists or restores app versions, with specific verbs and resource. The unique purpose is well-defined and distinct from sibling tools which cover branding, generation, 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?
Explicit instructions on when to omit vs. pass the restore parameter, and context that restores are for recovering from bad edits. However, no explicit comparison with siblings, though they are mostly unrelated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lamina_brandRead-onlyInspect
Load the brand context the user has configured for this workspace — voice, visual identity, guardrails, prompt directives, performance patterns. Call this when the user mentions branding, voice, or guardrails, or when you want to weave brand-aware language into inputs for lamina_run.
Returns three independent sections (each can be null or empty):
brandDna— voice, visual identity, content pillars, audience signals, guardrails. Populated when the workspace has both a brand profile filled in AND brand-DNA synthesis has run.guidance— workflow-scoped prompt directives, negative prompts, recommended moves. Populated by content scoring / recommendation jobs.topPatterns— top-performing patterns aggregated from this workspace's run history. Populated by content scoring runs (look attopPatterns.itemCount—0means no scored content yet).
If a section is null (or topPatterns.itemCount === 0), the user hasn't configured that piece yet. Do not fabricate brand attributes. Tell the user honestly: "I don't see a brand profile / content history configured for your workspace — you can add one in your Lamina workspace settings to get brand-aware suggestions. For now I'll proceed with what you've supplied directly." Then continue with the task using only the user's stated inputs.
When sections are populated, fold the relevant strings into the inputs you build for lamina_run — voice cues into text fields, guardrails into negative prompts, winning patterns as suggestions you can offer the user.
| Name | Required | Description | Default |
|---|---|---|---|
| topK | No | Pattern count. | |
| apiKey | Yes | Lamina API key (starts with lma_) | |
| modality | No | Content modality, such as image or video. | |
| platform | No | Target platform for guidance. | |
| objective | No | Content objective, such as engagement or sales. | |
| campaignId | No | Campaign to scope guidance to. | |
| workflowId | No | Workflow/app to scope guidance to. | |
| brandProfileId | No | Specific brand profile to inspect. |
lamina_brand_complianceRead-onlyInspect
Read the Brand Guard result a run recorded — the per-node on/off-brand status and score against the workspace brand. Use it to drive the approve/reject turn: after a run, show the output alongside this compliance read, ask the user to approve or reject, and on a reject call lamina_brand_feedback (which turns the reason into a guardrail the next generation avoids).
runId(required): a run you started (fromlamina_run/lamina_status).Returns
{ enabled, brandProfileId, nodes[] }. Each node has{ nodeId, status, overallScore, brandDeviations, checkedAt }.enabled: falsemeans Brand Guard was off for that app — uselamina_brand_scoreto score it on demand instead.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Run to read brand compliance for. | |
| apiKey | Yes | Lamina API key (starts with lma_) |
lamina_brand_feedbackAInspect
Give an on/off-brand verdict on a completed run, closing the loop so the next generation respects it. A reject with a note turns the reason into a brand guardrail — which then flows into lamina_generate_workflow and applyBrand runs as a negative, so the same off-brand result is avoided. approve is acknowledged without changing the brand.
runId(required): a run you started (fromlamina_run/lamina_status).verdict(required):approveorreject.note(optional but recommended on reject): why it is off-brand — this becomes the guardrail.brandProfileId(optional): target brand. Defaults to the run's app brand.Returns
{ brandProfileId, verdict, applied, guardrails }. Requires an owner/admin identity.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Why it is off-brand — becomes a brand guardrail when verdict is reject. | |
| runId | Yes | Run to give feedback on. | |
| apiKey | Yes | Lamina API key (starts with lma_) | |
| verdict | Yes | Whether the output is on-brand. | |
| brandProfileId | No | Target brand. Defaults to the run's app brand. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotation's readOnlyHint=false, the description discloses the side effect of rejecting with a note: it creates a brand guardrail that flows into other tools. It also specifies the required identity ('Requires an owner/admin identity') and notes the return object. No contradictions with 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?
The description is front-loaded with the main action, followed by a bulleted list of parameters. It is concise (around 100 words) and every sentence provides useful information without redundancy.
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 lack of an output schema, the description includes the return structure. All 5 parameters are explained, and the tool's side effects are clearly described. Sibling tools are numerous, but the description is self-sufficient for correct invocation.
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%, and the description adds extra meaning: 'note' is recommended on reject and becomes a guardrail; 'verdict' is explained with its impact; 'brandProfileId' defaults to the run's app brand. This adds value 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 clearly states the tool's purpose: 'Give an on/off-brand verdict on a completed run, closing the loop so the next generation respects it.' It uses a specific verb ('give'), resource ('completed run'), and outcome. It also distinguishes from siblings like 'lamina_brand_compliance' and 'lamina_refine_to_brand' by focusing on feedback as a closure mechanism.
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 provides context on when to use the tool (after a run) and explains the effects of verdicts (reject+note creates guardrails, approve does not). It does not explicitly state when not to use it or list alternative tools, but the guidance is clear enough for an AI agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lamina_brand_scoreARead-onlyInspect
Score how on-brand a completed run's image output is, and get back the specific deviations — before you show it to the user or decide whether to regenerate. Works on ANY completed run, whether or not Brand Guard was enabled on the app.
runId(required): a completed run (fromlamina_run/lamina_status).brandProfileId(optional): brand to score against. Defaults to the run's app brand.Returns
{ brandFit, dimensions, deviations, suggestions }.brandFitis 0–100;deviationslists the specific guideline breaks;suggestionsis how to fix them.Use it as the check in a generate → score → refine loop: if
brandFitis below your bar, feeddeviations/suggestionsback into the next generation.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Completed run to score. | |
| apiKey | Yes | Lamina API key (starts with lma_) | |
| brandProfileId | No | Brand to score against. Defaults to the run's app brand. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is consistent with readOnlyHint annotation, indicates no side effects, and adds detail about return format (brandFit, deviations, suggestions) and that it works even without Brand Guard enabled. 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?
The description is well-structured with bullet points and clear sections. It front-loads the main purpose and usage, though it could be slightly more concise without losing 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?
Given no output schema, the description adequately covers return type, usage loop, and default behavior. It provides enough for an agent to use the tool effectively, though some details about deviations/suggestions formatting are omitted.
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%, and the description adds value by specifying that runId must be a completed run from lamina_run/lamina_status and that brandProfileId defaults to the run's app brand. This goes beyond the schema definitions.
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 scores a completed run's image output for brand compliance and returns deviations. It distinguishes from siblings by focusing on scoring a completed run, not general brand info or compliance checks.
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 explicitly recommends using it in a generate → score → refine loop and says to use it before showing to user or deciding to regenerate. It provides context but does not explicitly mention when not to use or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lamina_cancelDestructiveInspect
Cancel a queued or running execution by runId. Idempotent — if the run already reached a terminal state (completed / failed / cancelled), the server returns its current status without erroring.
Use this when the user changes their mind mid-flight (wrong inputs after dispatch, oversized variant set, abandoned long-running job). Stopping lamina_status polls does NOT cancel a run — the orchestrator keeps spending credits until the workflow terminates on its own.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Run ID returned by `lamina_run`. | |
| apiKey | Yes | Lamina API key (starts with lma_) |
lamina_createInspect
Plan a creative run from a free-text brief. The router agent searches the catalog, picks the best-fit app by CAPABILITY ENVELOPE (an app whose outputs[] can deliver the brief, even when broader than asked — narrow via output selection), drafts inputs from the brief, and surfaces every choice the human still needs to make. NEVER dispatches a run — that's lamina_run's job.
Branch on data.status:
• "plan" (mode "app"): the router committed to an app. Response includes selectedApp.appId, draftedInputs, optional selectedOutputs (output-label subset), and askUser[] (per-parameter questions the human must answer). The askUser list is the WORKHORSE — it covers everything the human needs to decide on the chosen app: USER-OWNED slots (product photo, brand logo, headshot), PRESET option picks (background style, aesthetic, mood-board references — curated option labels are listed INLINE in the question text), output subsetting (when the entry is { name: "__outputs", question }, the answer is a comma-separated list of output labels), and any KNOB the user needs to choose. To dispatch: ask the human each askUser[i].question in chat, collect answers, then call lamina_run with appId: selectedApp.appId, inputs: {…draftedInputs, …<answers keyed by askUser[i].name>}, and outputs: <selectedOutputs OR the labels parsed from the __outputs answer>. ONE dispatch round.
• "needs_clarification": the router could not commit to an app because the brief is genuinely ambiguous between two or more apps (e.g. banner vs. reel vs. video, single hero vs. multi-language adapts). This is PRE-COMMIT ROUTING ambiguity only. Response includes clarifications: [{ question }]. Ask the human each clarification, fold the answers into a refined brief, then call lamina_create again. This is the ONLY status where re-calling lamina_create with a refined brief is correct.
• "unmatched": no pre-built app fits. Response includes reason, and — when the brief is a buildable creative request (no catalog app matched) — a suggestion object { tool: "lamina_generate_workflow", instruction }. If suggestion is present, offer to BUILD a bespoke app: call lamina_generate_workflow with the given instruction, then lamina_run the returned appId. If there is no suggestion, the brief is outside Lamina's creative-media surface — tell the human and do not retry.
ANTI-DRIFT: After lamina_create returns "plan", NEVER re-call lamina_create to resolve askUser items — that re-rolls the LLM and may pick a different app or drop the partial plan. Resolve asks via lamina_run with the answers folded into inputs/outputs. Re-calling lamina_create is ONLY correct when the prior response was "needs_clarification", in which case fold the human's clarification answers into a REFINED BRIEF and call lamina_create again.
The user has NO form UI — they only see what you (the calling LLM) tell them in chat. Treat every askUser entry as a question to surface to the human verbatim, including the inline option lists for PRESET choices (so the human knows what they can pick) and the output labels for __outputs asks (so they know which deliverables are available). The router never silently uses demo defaults on user-owned slots — that's why those slots appear in askUser. Always collect answers first, then dispatch via lamina_run.
| Name | Required | Description | Default |
|---|---|---|---|
| appId | No | Optional pin: skip app discovery and force the router to use this app. Useful when the user already chose an app earlier in the conversation. | |
| brief | Yes | The user's natural-language request (e.g. "selfie with Tom Holland", "moody dawn product shot for our skincare line"). | |
| apiKey | Yes | Lamina API key (starts with lma_) | |
| inputs | No | Optional pre-supplied inputs keyed by parameter `key`. Anything the user already gave you can go here so the router doesn't ask for it again. | |
| modality | No | Optional output modality hint when known. Improves app routing precision. | |
| platform | No | Optional target platform hint (instagram, tiktok, web, etc.). Used for aspect-ratio + framing decisions. | |
| numVariants | No | Optional variant count hint when the user asked for multiple outputs. |
lamina_creditsRead-onlyInspect
Check the workspace's credit balance and the credit packages available to buy — so you can tell the user what they have and what a top-up would cost before running anything expensive.
Returns
{ balance, packages[] }. Each package has{ packageId, name, credits, priceCents, currency }.To buy one, hand the
packageIdtolamina_topup.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | Yes | Lamina API key (starts with lma_) |
lamina_describeRead-onlyInspect
Get the full input/output specification for a single Lamina app. Use it in the MANUAL flow (after lamina_discover and before lamina_run) when the calling LLM wants to inspect or verify an app's schema directly. The AGENTIC flow via lamina_create does discover + describe internally — no need to call describe before create.
Returns:
parameters[]— every input the app accepts. Each entry has a stablekey(used inlamina_run.inputs), atype(text/options/url), an optionaldefault, andaccept/options/multiplewhere relevant.outputs[]— what the app produces. Each entry is{ index, label, type: 'image'|'video'|'audio'|'text' }. Labels are canonical identifiers — pass them verbatim tolamina_run.outputswhen subsetting.estimatedCredits— typical cost of one run (omitted when unknown).
The user has NO form UI — they only see what you tell them in chat. Every parameter in parameters[] is something the workflow author wanted set; defaults shown are the AUTHOR's choices, not the user's authorization. Treat each parameter accordingly:
For USER-OWNED assets (their product, headshot, logo, brand asset, garment): never use the default. ASK the human in chat first — defaults here are demo placeholders that misrepresent the user's subject.
For PRESET / STYLE / REFERENCE groups (mood-board refs, style refs, palette refs, etc.) — often appearing as a numbered series of similar slots: ASK the human in chat ONCE per group — 'use the app's curated defaults or supply your own?' Don't silently default; the user can't see these slots exist.
For text/copy you can confidently draft from the brief (headlines, descriptions): draft. Otherwise ASK.
For dialog-derived settings (aspect ratio, variant count, output format): use the user's explicit input or hint; if absent, ASK.
When in doubt about ANY parameter, ASK the human in chat before calling lamina_run. One extra question is cheaper than a wrong-output run.
Constructing inputs for lamina_run:
Use the parameter
keyas the input key. Example:inputs: { "your_photo_image_url": "https://..." }.For
type: "options", send the option label as a string (case-insensitive match).For
type: "url"withmultiple: true, send an array of URLs. Otherwise send a single URL string. Never invent URLs.Omit a parameter from
inputsonly when the user has explicitly authorized falling back to the workflow default.
| Name | Required | Description | Default |
|---|---|---|---|
| appId | Yes | App ID returned by `lamina_discover`. | |
| apiKey | Yes | Lamina API key (starts with lma_) |
lamina_discoverRead-onlyInspect
Discover Lamina apps (creative workflows) that can produce what the user wants. ALWAYS start here when the user asks to create new content — discover the right app first, then describe it, then run it.
How to use it:
Provide an array of
keywordsdescribing the desired creative outcome. Be concrete: combine medium (image / video / audio), form (reel, banner, hero shot, headshot, voiceover), and context (ecommerce, social, lifestyle). Examples: ["product video", "reel", "9:16"], ["hero banner", "lifestyle photo"], ["voiceover", "narration"].Read the returned apps. Each entry shows the app's name, description, outputs, and estimated credit cost when known. Choose by PURPOSE match — does the app's actual delivery match the user's intent? Keyword overlap alone is not enough.
If no listed app fits, call this tool again with different / broader / more specific keywords. The catalog is large; rephrasing often surfaces matches you missed.
If after a few sensible searches you still cannot find a suitable app, tell the user honestly that the catalog has no app for this exact need — suggest the closest related app or propose they refine their goal.
Once a candidate looks right, call
lamina_describewith itsappIdfor the full parameter contract.
The result is ordered by relevance. Apps may be owned by your workspace or shared publicly. estimatedCredits is omitted when it cannot be computed quickly — treat absence as "unknown", not zero.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of apps to return. Default 10. | |
| apiKey | Yes | Lamina API key (starts with lma_) | |
| keywords | Yes | Keywords describing the creative outcome. Combine medium + form + context for best results, e.g. ["product video", "reel", "9:16"] or ["hero banner", "lifestyle photo", "ecommerce"]. The more specific, the better the match. |
lamina_generate_imageInspect
Dispatch a single atomic image generation. Sibling of lamina_create (the agentic router) — use this when you already know which model fits, or when no app fits the brief.
WORKFLOW: (1) lamina_models_list({ modality: "image" }) → pick a model. (2) lamina_models_describe({ modelId }) → read its flat paramSchema. (3) lamina_generate_image({ model, prompt, params }) → dispatch, get runId. (4) lamina_status({ runId, wait: true }) → poll until completed; the response has output.url.
ONE TOOL, BOTH OPERATIONS:
• Text-to-image — call with just prompt (and any text-mode params). The model id you picked is the only thing that selects the operation.
• Image-to-image (edit / remix / background-swap / etc.) — call the same tool, but include a source image in params. Hybrid models (nano-banana-pro, gpt-image-2, gemini-2.5-flash-image, seedream-4.5, flux-2-flex, nano-banana-2, gpt-image-1, gpt-image-1.5) flip to image-to-image automatically when params.imageUrls is a non-empty array (or params.imageUrl is set for single-source models like flux-pro-kontext). Edit-only models (bria-bg-remove, ideogram-character, ideogram-v3-remix/reframe/replace-background, flux-pro-kontext, ideogram-character-remix) only have image-to-image — params.imageUrls/imageUrl is required.
INPUTS:
• model (required): a model id from lamina_models_list. Don't invent it.
• prompt (required for most models; check paramSchema.prompt.required from lamina_models_describe; absent from paramSchema for prompt-less models like bria-bg-remove and ideogram-v3-reframe): natural-language brief; ≤2000 chars.
• params (model-specific): every key MUST be declared in the chosen model's paramSchema (call lamina_models_describe first). Unknown keys are rejected with a structured invalid_params error; each error has field + allowed/range/got so you can correct on retry. Omitted optional keys fall back to schema defaults.
• webhookUrl (optional): HTTPS URL. On terminal status Lamina POSTs {runId, status, model, prompt, resolvedParams, output, errorMessage, completedAt} HMAC-signed.
RESPONSE: {runId, status: "queued"|"completed", model, mode, prompt, resolvedParams}. mode is the resolved value ("text-to-image" | "image-to-image"). The runId is the fal_request_id — pass it to lamina_status.
SYNC vs ASYNC: identical contract. Vertex-backed models (imagen-4.0-*, gemini-2.5-flash-image) complete in seconds and return status: "completed" on the first poll. fal-backed models queue and take 5–60s. lamina_status({ wait: true }) handles both transparently.
ERROR HANDLING: validation failures return code + details.errors[] with field + error + allowed/range/got. Common codes: model_not_supported, mode_not_supported, invalid_params, dispatch_failed.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Model id from `lamina_models_list({modality:"image"})`. | |
| apiKey | Yes | Lamina API key (starts with lma_) | |
| params | No | Model-specific fields per the chosen (model, mode)'s `paramSchema`. Include `imageUrls` (array) or `imageUrl` (string) when you want image-to-image; omit them for text-to-image. Call `lamina_models_describe({modelId})` to see what's accepted. | |
| prompt | No | Natural-language prompt (≤2000). Required for most models; omit only for prompt-less edits. | |
| webhookUrl | No | Optional HTTPS URL to POST the completion event to. |
lamina_generate_videoInspect
Dispatch a single atomic video generation. Sibling of lamina_generate_image — same shape, but outputs a video URL.
WORKFLOW: (1) lamina_models_list({ modality: "video" }) → pick a model. (2) lamina_models_describe({ modelId }) → read its flat paramSchema to learn required inputs. (3) lamina_generate_video({ model, prompt, params }) → dispatch, get runId. (4) lamina_status({ runId, wait: true }) → poll until completed; the response has output.url.
ONE TOOL, EVERY VIDEO OPERATION. Model id selects the operation; params matches the model's paramSchema:
• Text-to-video — Kling t2v variants, Wan-2.6-text-to-video, Wan-turbo, Minimax, Seedance t2v, Veo3-text-to-video. Just prompt (+ duration / aspectRatio / etc. per the model).
• Image-to-video — Kling i2v variants, Wan-2.6/turbo image-to-video, Minimax i2v, Seedance i2v (uses startImageUrl), happy-horse-image-to-video, veo3-image-to-video (sync). params includes imageUrl (or startImageUrl for Seedance, firstFrameUrl for Veo3 first-frame).
• Keyframe — veo3-keyframe-to-video (sync). params requires firstFrameUrl AND lastFrameUrl — model interpolates between them.
• Motion-control — kling-v26-motion-control, kling-v26-motion-control-pro. params requires imageUrl (character) AND videoUrl (motion reference).
• Video-to-video (edit) — wan-video-to-video, Kling v2v variants. params requires videoUrl (source).
• Reference-to-video — Kling/Seedance/Wan reference variants. params uses referenceImageUrls.
INPUTS:
• model (required): a model id from lamina_models_list({modality:"video"}).
• prompt: most models require it; some (motion-control variants) are optional. Check paramSchema.prompt.required from lamina_models_describe. Some models omit prompt from paramSchema entirely (prompt-less).
• params: model-specific fields per the model's paramSchema. Required URL fields vary by operation — see list above.
• webhookUrl (optional): HTTPS URL for HMAC-signed completion POST.
RESPONSE: {runId, status: "queued"|"completed", model, mode, prompt, resolvedParams}. mode is the resolved operation. Pass runId to lamina_status.
SYNC vs ASYNC: identical contract. Veo3 variants (veo3-text-to-video, veo3-image-to-video, veo3-first-frame-to-video, veo3-keyframe-to-video) are Vertex-backed and complete in seconds. fal-backed models queue and take 30s–5min. lamina_status({ wait: true, timeoutSeconds: 240 }) handles either transparently.
ERROR HANDLING: same shape as lamina_generate_image — code + details.errors[] with field + allowed/range/got.
| Name | Required | Description | Default |
|---|---|---|---|
| model | Yes | Model id from `lamina_models_list({modality:"video"})`. | |
| apiKey | Yes | Lamina API key (starts with lma_) | |
| params | No | Model-specific fields per the chosen model's `paramSchema`. Required URL fields depend on the operation — e.g. `imageUrl` (image-to-video), `videoUrl` (video-to-video), both for motion-control, `firstFrameUrl`+`lastFrameUrl` for keyframe. | |
| prompt | No | Natural-language prompt (≤2000). Required for most models; check the model's describe response for `prompt.required`. | |
| webhookUrl | No | Optional HTTPS URL to POST the completion event to. |
lamina_generate_workflowInspect
Generate a BRAND-NEW Lamina app from a plain-language instruction, OR EDIT an existing generated app in place. Use this when NO existing app fits the goal (check lamina_discover first) and the user wants a bespoke workflow — or when a follow-up needs the app itself changed (add a step, new output, swap a model), not just a different run.
A headless Claude planner assembles a validated node graph from the Lamina node catalog and auto-publishes it as a PRIVATE, immediately-runnable app.
instruction: describe what the app should create (or, in edit mode, the change to make), including the inputs the user will provide and the desired output(s).baseAppId(optional): EDIT MODE. The appId of a generated app to modify. The planner starts from its current graph and appliesinstructionas a targeted edit — keeping everything it does not touch — then updates that SAME app in place (same appId, run history preserved). Requires you to be the app creator or a workspace owner/admin. Omit to build a new app.ops(optional, EDIT MODE — the CHEAP path): when you already know the exact change and can express it as a small op list, passopsinstead ofinstruction— the server applies them deterministically with NO planner LLM call and no credit charge. Each op is one of:{op:"setNodeData",nodeId,data},{op:"addNode",node:{id,type,data?}},{op:"removeNode",nodeId},{op:"addEdge",edge:{source,target,sourceHandle?,targetHandle?}},{op:"removeEdge",source,target},{op:"addParameter",parameter:{key,name,type,targetNodeId,targetField,...}},{op:"removeParameter",key},{op:"setParameter",key,patch}. RequiresbaseAppId. Read the app first (lamina_describe/GET /v1/apps/{id}) to get node ids. Useinstruction(planner) for anything you cannot express as ops.name(optional): preferred app name.visibility(optional):private(default),shared(whole workspace), orpublic. Ignored in edit mode.brandProfileId(optional): bake a brand's voice/visual/guardrails into the app so it's on-brand by default. Omit to use the workspace's active brand.Returns
{ appId, name, parameters[], outputs[], runUrl }. In edit modeappIdis unchanged. FeedappId+ the returned parameterkeys straight intolamina_run— the parameter set may have changed, so re-readparameters[].On failure returns
{ error, details[] }where details are the validation problems the planner could not resolve.
| Name | Required | Description | Default |
|---|---|---|---|
| ops | No | EDIT MODE cheap path: explicit edit operations applied deterministically (no planner LLM). Requires baseAppId. See the tool description for op shapes. | |
| run | No | One-shot: after generating, immediately run the app with `inputs`. Returns the started runId — check with lamina_status. | |
| name | No | Optional preferred app name. | |
| apiKey | Yes | Lamina API key (starts with lma_) | |
| inputs | No | Input values keyed by the generated app parameter `key` (media as URLs). Used only when run is true. | |
| provider | No | Planner LLM provider. Defaults to the server setting (claude). | |
| baseAppId | No | Edit an existing generated app in place. Its appId. Omit to build a new app. | |
| visibility | No | App reach after creation. Defaults to private. | |
| instruction | No | Plain-language description of the app to build — or, with baseAppId, the change to apply. Optional only when `ops` is provided. | |
| brandProfileId | No | Bake a specific brand profile's voice, visual anchors, and guardrails into the generated app so it produces on-brand output. Defaults to the workspace's active brand. |
lamina_models_describeRead-onlyInspect
Get the input contract for one atomic-generate model (image OR video). Returns id, displayName, modality, and a flat paramSchema (every accepted field, including prompt, with type, allowed values, default, min/max/step, and short field-level description text). Hybrid models present a single merged schema where mode-specific fields are marked optional; the description on each field tells you when it applies. Models that don't accept a prompt (e.g. bria-bg-remove) simply omit the prompt field from paramSchema.
Polymorphic — tries image registry then video registry, so any id from lamina_models_list({modality:'image'|'video'}) is accepted.
Call this BEFORE lamina_generate_image / lamina_generate_video for a model you haven't used. The response is the contract — what you pass in params must match these field rules, and the cross-field constraints noted in each field's description (e.g. gpt-image-2's custom dimensions are capped at 8.3M pixels and 3:1 aspect).
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | Yes | Lamina API key (starts with lma_) | |
| modelId | Yes | Model id from `lamina_models_list`, e.g. "ideogram-v3" or "kling-v25-text-to-video". |
lamina_models_listRead-onlyInspect
List Lamina's curated atomic generation models. Each entry has id, displayName, modality, and — to help you pick deliberately rather than guess — bestFor (what the model is good at / when to reach for it), cost (low|medium|high relative credit tier), speed (fast|standard|slow), and provider (the infra that serves it: fal|wavespeed|vertex).
Pass modality: 'image' (default) or modality: 'video' to scope the response.
Use bestFor to match the task, and cost/speed to break ties — prefer a low/fast model unless the task needs the quality of a high one. After picking an id, call lamina_models_describe({modelId}) to get the input contract before calling lamina_generate_image / lamina_generate_video.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | Yes | Lamina API key (starts with lma_) | |
| modality | No | "image" (default) or "video". | image |
lamina_refine_to_brandInspect
Automatically improve a completed run until it's on-brand — without letting it run away on cost. Repeats score → refine (re-rolling with the specific deviations fed back in) and stops the instant the score clears your bar, the iteration cap is hit, or the credit budget would be exceeded — whichever comes first. Returns the best result plus exactly how many iterations and credits it took.
runId(required): a completed run to improve.minScore(optional, default 80): stop oncebrandFitreaches this (0–100).maxIterations(optional, default 3): most refine passes to try (1–10).maxCredits(optional, default 200): hard credit ceiling — never exceeded.brandProfileId(optional): brand to score against. Defaults to the run's app brand.Returns
{ best, iterations, creditsSpent, stoppedBecause, attempts }.best.imageUrlis the highest-scoring result;stoppedBecauseismet_score|max_iterations|budget|no_output.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | Completed run to refine toward the brand. | |
| apiKey | Yes | Lamina API key (starts with lma_) | |
| minScore | No | Target brand-fit score to stop at (default 80). | |
| maxCredits | No | Hard credit ceiling — never exceeded (default 200). | |
| maxIterations | No | Most refine passes to try (default 3). | |
| brandProfileId | No | Brand to score against. Defaults to the run's app brand. |
lamina_runAInspect
Dispatch a run for an app the user has authorized. Pure trigger — no LLM, no brief analysis, no app picking. Takes an appId you already know (from lamina_create.selectedApp.appId after the agentic flow, or from lamina_describe in the manual flow) plus inputs keyed by parameter key, optionally outputs (label subset).
How to use it:
Pass
appIdandinputs.inputsis a map keyed by parameterkeyfrom describe (option label foroptions, URL string forurl, array of URLs forurl + multiple).Only include parameters the user has explicitly authorized — by giving the value in the brief, answering an ask in chat, or saying 'use defaults' on a surfaced preset group. Silent defaults on user-owned slots produce wrong-subject output.
outputs(optional): when the user asked for only a subset of the app's outputs (e.g. 'just the front view and the lifestyle shot'), passoutputs: ['Front View', 'Lifestyle View']with labels verbatim fromlamina_describe.outputs[].label(case-insensitive). Omit or pass an empty array to produce every output the app declares (default).applyBrand(optional): set true to make the output on-brand — Lamina folds the workspace's brand negatives + visual style onto the app's visual nodes before running. Yourinputsstill win over brand. Use it instead of hand-writing brand into every input.Returns immediately with
{runId, workflowId, status}. Most apps take 1–5 minutes (median ~2 min, p90 ~5 min). Poll withlamina_status.On
Invalid inputserror, the response includesdetails: [{param, code, message}]. Common causes: option label not in declared list, malformed URL, wrong type. Onoutputs_resolution_failed, the label you passed doesn't match any output on the app — re-checklamina_describe.outputs[].label.For variants/series (e.g. "5 selfies with different celebrities"), call this tool once per variant in parallel. Each call returns its own
runId.
| Name | Required | Description | Default |
|---|---|---|---|
| appId | Yes | App ID returned by `lamina_discover` and confirmed via `lamina_describe`. | |
| apiKey | Yes | Lamina API key (starts with lma_) | |
| inputs | Yes | Map keyed by parameter `key` (from `lamina_describe`). Values shaped per each parameter's type: option label for `options`, URL string for `url`, array of URLs for `url + multiple`. Only include parameters the user has explicitly authorized. | |
| outputs | No | Optional subset of the app's outputs to produce. Each entry is a `label` from `lamina_describe.outputs[].label` (case-insensitive). Omit or pass an empty array to produce every output the app declares. | |
| applyBrand | No | Fold the workspace's brand (negatives + visual style) onto the app's visual generation nodes so output is on-brand — without you weaving brand into `inputs`. Anything you pass in `inputs` still wins. | |
| brandProfileId | No | Target a specific brand profile when applyBrand is set. Defaults to the active brand. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false), the description discloses it returns immediately with runId/status, typical run times (1-5 minutes), polling via lamina_status, and warns about silent defaults causing wrong outputs. 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?
Well-structured with clear sections, but slightly verbose. However, every sentence adds value given the tool's complexity (optional outputs, error handling, parallel usage). Front-loaded with core purpose.
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?
Comprehensive coverage for a tool with 6 parameters, nested objects, and no output schema. Includes input specification, optional outputs, applyBrand, error handling, polling guidance, and parallel usage. No gaps identified.
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?
Adds significant context beyond the schema: explains input value shaping per type, authorization rules, outputs subset labeling (case-insensitive), and applyBrand behavior. Schema coverage is 100% but description enriches understanding.
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 dispatches a run for an authorized app. It distinguishes from siblings by emphasizing it is a pure trigger with no LLM, no analysis, and no app picking.
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?
Provides explicit instructions on when to use (after agentic or manual flow), how to pass parameters, optional outputs, error handling, and parallel calls for variants. Includes alternatives like lamina_status for polling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lamina_set_brandInspect
Create or update this workspace's brand and ground it with a starter Brand DNA, so generated apps and applyBrand runs produce on-brand output. Use it to make a fresh workspace on-brand before generating.
brandName(required): the brand to create, or the display name when updating.brandProfileId(optional): update an existing profile instead of creating one. Omit to create.guardrails(optional): things to avoid — these become the brand's negatives on visual generation.brandVoice/visualStyle/targetAudience/description/industry(optional): shape the brand.Returns
{ brandProfileId, reused }. Pass thatbrandProfileIdtolamina_generate_workfloworlamina_run(withapplyBrand).Requires an owner/admin identity. Read the current brand with
lamina_brand.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | Yes | Lamina API key (starts with lma_) | |
| industry | No | Industry / vertical. | |
| brandName | Yes | Brand to create, or display name when updating. | |
| brandVoice | No | Tone/voice, e.g. "warm, confident, never salesy". | |
| guardrails | No | Things to avoid — become the brand's visual negatives. | |
| description | No | Short description of the brand. | |
| visualStyle | No | Visual anchors, e.g. "clean studio lighting, muted palette". | |
| brandProfileId | No | Update this existing profile. Omit to create a new one. | |
| targetAudience | No | Who the brand speaks to. |
lamina_set_visibilityInspect
Change an app's reach: private (creator/workspace-owner only), shared (any workspace member — discoverable via lamina_discover), or public.
Only the app creator or a workspace owner may change visibility. Useful right after lamina_generate_workflow to share a freshly generated app.
| Name | Required | Description | Default |
|---|---|---|---|
| appId | Yes | App ID to update. | |
| apiKey | Yes | Lamina API key (starts with lma_) | |
| visibility | Yes | New reach for the app. |
lamina_statusARead-onlyInspect
Check the status of any Lamina run — polymorphic across atomic image-gen (lamina_generate_image), atomic video-gen (lamina_generate_video), app workflow runs (lamina_run), and agentic recipe runs.
Default: returns the current snapshot (
queued/running/completed/failed/cancelled) and the result. The agent decides when to call again.With
wait: true: blocks server-side, polling every 2 seconds, until the run reaches a terminal state ORtimeoutSecondselapses (default 240, max 600). Atomic image runs typically finish in 5–30s; atomic video runs take 30s–5 min; app workflows 1–5 min (median ~2 min, p90 ~5 min). PicktimeoutSecondsaccordingly. If the timeout fires, the response includes"timeout": trueplus the current status; call again to keep waiting.
Response shape depends on the run kind:
Atomic image-gen runs: when
completed, the response hasoutput: { type: "image", url: "..." }(singular). Pass theurlto the user.Atomic video-gen runs: when
completed, the response hasoutput: { type: "video", url: "..." }(singular). Pass theurlto the user.App + freestyle runs: when
completed, every entry inoutputs[]has aurl. Thelabelmatches what you saw inlamina_describe. Pass URLs back to the user, or feed them into a follow-uplamina_runas reference assets.When
failed,errorMessagecarries the top-level reason. Per-output failures (app runs) are inoutputs[i].error.While the run is
running, surface progress to the user instead of making them wait silently.
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | When true, the server polls internally and returns only when the run reaches a terminal state (or `timeoutSeconds` elapses). When false, returns the current snapshot immediately. | |
| runId | Yes | Run ID returned by `lamina_run` / `lamina_generate_image` / `lamina_generate_video` — pass it back exactly as given. | |
| apiKey | Yes | Lamina API key (starts with lma_) | |
| timeoutSeconds | No | Maximum server-side wait time when `wait: true`. Default 240, max 600. Real run durations: median ~2 min, p90 ~5 min — set higher for confidence the call returns the final result, lower if you want to surface intermediate progress to the user. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses extensive behavioral traits beyond the readOnlyHint annotation, such as server-side polling behavior with wait, response shapes for different run kinds, error handling, and progress surfacing. No contradictions with 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?
The description is well-structured with clear sections (default behavior, wait mode, response shapes per run kind) and bullet points. It is comprehensive yet concise, with no wasted sentences.
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?
Despite no output schema, the description completely covers return values for all run types, including successful outputs, error messages, and timeout responses. It also advises on surfacing progress, making it fully self-contained.
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%, providing a baseline of 3. The description adds substantial value by explaining the `wait` parameter's blocking behavior, `timeoutSeconds` rationale, and how `runId` should be used, all beyond the 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?
The description clearly states the tool checks the status of Lamina runs, and lists the polymorphic types (image-gen, video-gen, app, agentic recipe), distinguishing it from sibling tools that initiate runs. It uses a specific verb 'check' and resource 'run status'.
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 provides explicit guidance on when to use the tool, including details on the `wait` parameter, typical run durations, and how to pick `timeoutSeconds`. However, it does not explicitly state when not to use this tool or name alternatives, slightly reducing the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lamina_topupAInspect
Start a credit top-up and get back a Stripe-hosted checkout link to give the user. Use this when the balance is too low to run what they asked for — no need to send them to a dashboard.
packageId(required): fromlamina_credits.Returns
{ checkoutUrl, credits, amountCents, currency }. Give the user thecheckoutUrlto pay; once they do, the credits land on the workspace and you can retry the run.Never ask the user for card details — they pay on the Stripe page the link opens.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | Yes | Lamina API key (starts with lma_) | |
| packageId | Yes | Credit package to buy (from `lamina_credits`). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, so the description correctly implies a write operation. It adds context about the Stripe checkout flow and credits landing asynchronously, but does not disclose potential failure modes or side effects (e.g., charges, timeouts).
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 sentences, front-loaded with action and purpose. Each sentence adds value with no redundancy or fluff.
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 no output schema, the description provides the return shape and flow. It covers the essential steps and differentiates from siblings. It could include retry or error handling, but is sufficient for a top-up 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 covers 100% of parameters. The description reinforces that packageId comes from lamina_credits and adds the return format ({ checkoutUrl, credits, amountCents, currency }), which is valuable 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 clearly states the tool's action: 'Start a credit top-up and get back a Stripe-hosted checkout link.' It specifies the verb and resource, and distinguishes from siblings by noting when to use it (balance too low) and that it avoids sending users to a dashboard.
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 explicitly says 'Use this when the balance is too low to run what they asked for' and advises not to ask for card details. It lacks direct comparison to sibling tools like lamina_credits or lamina_run, but the context is still clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lamina_upload_assetInspect
Get a pre-signed upload URL for one user-supplied asset (image, video, or audio). Use this when the user provides a local file you need to feed into lamina_run (or lamina_create.inputs) as a URL parameter (e.g. your_photo_image_url, product_image_url, brand_logo_url).
How to use:
Pass
filename(the name to register, e.g. "selfie.jpg") andmediaType("image" | "video" | "audio").This tool returns
{ uploadUrl, assetUrl, contentTypeHint }. TheuploadUrlis a pre-signed PUT URL; theassetUrlis what you eventually pass tolamina_run(or pre-supply inlamina_create.inputs).THE BYTES DO NOT GO THROUGH THIS TOOL CALL. After this returns, perform an HTTP PUT of the file bytes directly to
uploadUrlwith theContent-Typeheader set tocontentTypeHint(or override). When the PUT completes (200), the asset is live atassetUrl.
If your host has shell access (Claude Code, Cursor): execute curl -X PUT --data-binary @<local-path> -H 'Content-Type: <contentTypeHint>' '<uploadUrl>' to upload, then call lamina_run with assetUrl in the relevant input (or pre-supply it to lamina_create.inputs so the router doesn't re-ask).
If your host doesn't have shell access (Claude Desktop, Claude.ai, ChatGPT): tell the user honestly that you cannot move the bytes from your context to Lamina's storage, and ask them to provide a publicly-reachable URL of the asset (or upload via the Lamina CLI / SDK from a shell), then continue with that URL.
Asset URLs returned here are stable and can be reused across multiple runs. There is no need to re-upload between dispatches of related runs.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | Yes | Lamina API key (starts with lma_) | |
| filename | Yes | Filename to register, including extension (e.g. "selfie.jpg"). | |
| mediaType | Yes | Media kind. Picks the upload bucket; the actual MIME type is set on PUT. |
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!