Skip to main content
Glama

deploy_pr_demo

Deploy a throwaway, time-limited demo of an Application's pull-request build into an isolated ankra-demo-pr- namespace on the organisation's staging cluster. Every recorded component is deployed as its own Deployment + Service running the PR's container image tag: the entry component owns the preview host's root path and the others are routed under path prefixes on the same host (the application's saved demo routing when it declares one, else the frontend-shaped component at / and a single API-shaped sibling at /api). A public Ingress is rendered when the organisation has a demo domain configured or the staging cluster has an active DNS zone - the resolved public URL is returned as preview_url (empty when the demo stays in-cluster-only). The answer lists every deployed component under components[] with its image, container_port and ingress_path; the top-level image and service describe the entry component only. Environment variables merge over the Application's saved demo defaults; values may carry ${SECRET_SLOT:} sentinels (resolved server-side, mounted via a Kubernetes Secret) and, when the database is enabled, ${{ ankra.demo_database.url|host|port|name|user|password }} placeholders resolving to a throwaway per-demo Postgres. Safe in ask mode: the demo is isolated in its own namespace and the reaper deletes it at TTL, so it cannot affect existing deployments. Requires a configured staging cluster, application_id, pr_number, and image_tag (the tag the PR build pushed).

Input Schema

NameRequiredDescriptionDefault
envNoExtra environment variables for the demo container as a name-to-value object. Values may carry ${SECRET_SLOT:<uuid>} sentinels (treated as secret and mounted via a Kubernetes Secret) and, when database is enabled, ${{ ankra.demo_database.* }} placeholders. Merged over the Application's saved demo env defaults; these win by name.
databaseNoProvision a throwaway Postgres (random per-demo password, deleted with the demo) inside the demo namespace and enable the ${{ ankra.demo_database.* }} placeholders. Overrides the Application's saved default.
image_tagYesThe container image tag the PR head build pushed (appended to the Application's container image URL).
pr_numberYesThe pull-request number; names and isolates the demo namespace.
application_idYesThe Application to deploy a PR demo of.
container_portNoThe port the entry component's container listens on (defaults to that component's Dockerfile EXPOSE port, or 8080 when none is declared).
entry_componentNoThe component that owns the preview host's root path on a multi-component application; the other components keep their path prefixes. Omit to use the application's saved demo routing, then the heuristic (frontend-shaped component, else the primary one). A name that is not a recorded component is refused.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false, idempotentHint=false, destructiveHint=false; the description goes far beyond by disclosing the TTL reaper, namespace isolation, that it cannot affect existing deployments, the ingress-rendering conditions, and the exact return shape (preview_url, components[], top-level image/service = entry component only). This is exactly the behavioral context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action and scope are front-loaded in the first sentence, and nearly every clause carries distinct information. It is dense and parenthetical-heavy for a single block, which slightly taxes readability, but nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, non-idempotent mutation with 7 parameters, a nested object, and no output schema, the description covers prerequisites, isolation/safety, environment-variable and database semantics, and the full return contract. An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema descriptions are already thorough, but the description adds real meaning: env values merge over saved demo defaults and 'these win by name', sentinels are resolved server-side and mounted via a Kubernetes Secret, and entry_component drives root-path ownership while siblings keep path prefixes. It largely reinforces rather than contradicts the schema, so it lands above the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (deploy a throwaway, time-limited demo of an Application's PR build) and pins down scope precisely: an isolated ankra-demo-pr-<n> namespace on the staging cluster. This is clearly distinguishable from siblings like deploy_application, redeploy_demo, and demo_stop.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear preconditions (requires a configured staging cluster, application_id, pr_number, image_tag) and states it is 'safe in ask mode' because the demo is isolated and reaped at TTL. It does not, however, name an alternative sibling or an explicit when-not-to-use condition (e.g., redeploy_demo vs deploy_pr_demo), so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources