antrieb
Server Details
Validates AI infra code on real VMs. Self-corrects until it works. No containers, no sandboxes.
- Status
- Unhealthy
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- jade-pico/antrieb-mcp-server
- GitHub Stars
- 3
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
1 tool update
- Changed
provision1 field changed- changed
Input schema / properties / cluster / descriptionPrevious value: -"VM topology. Each entry is either a shorthand string (\"ubuntu24.04\" = 1 VM, \"ubuntu24.04 x3\" = 3 VMs) OR an object {image, count?}. Init scripts are NOT part of provision — run them through exec with \"@namespace/name\" after the cluster is ready. This keeps provision sub-second and avoids hidden async state. Example: [{\"image\":\"ubuntu24.04\",\"count\":3},{\"image\":\"vyos\"}]"New value: +"VM topology. Each entry is either a shorthand string (\"ubuntu24.04\" = 1 VM, \"ubuntu24.04 x3\" = 3 VMs) OR an object {image, count?}. Cap: **max 4 target nodes per cluster**. Controller images (e.g. ansible-controller) do not count — an Ansible setup can be controller + 4 targets = 5 VMs. Init scripts are NOT part of provision — run them through exec with \"@namespace/name\" after the cluster is ready. This keeps provision sub-second and avoids hidden async state. Example: [{\"image\":\"ubuntu24.04\",\"count\":3},{\"image\":\"vyos\"}]"
1 tool update
- Changed
save2 fields changed- changed
Input schema / properties / body / descriptionPrevious value: -"Required for type=runbook. Markdown document describing the scenario. Structure: `## Topology required` (describes cluster shape the runbook applies to — images, NICs, networks), `## Variables` (lists placeholders like `<LAN_SUBNET>` callers substitute), `## Steps` (numbered, one per major action, prose explaining WHY + fenced shell for the actual command, annotating which node each step targets), `## Verify` (how to confirm success). Keep imperative — the reader (another LLM) will substitute variables and issue exec calls. Write commands idempotently so a second application is safe (`id user || useradd`, `grep -q entry /etc/hosts || echo ... >> /etc/hosts`, `systemctl is-active svc || systemctl start svc`)."New value: +"Required for type=runbook. Markdown document describing the scenario. Structure: `## Topology required` (describes cluster shape the runbook applies to — images, NICs, networks), `## Variables` (lists placeholders like `<LAN_SUBNET>` callers substitute), `## Steps` (numbered, one per major action, prose explaining WHY + fenced shell for the actual command, annotating which node each step targets), `## Verify` (how to confirm success). Keep imperative — the reader (another LLM) will substitute variables and issue exec calls. Write commands idempotently so a second application is safe (`id user || useradd`, `grep -q entry /etc/hosts || echo ... >> /etc/hosts`, `systemctl is-active svc || systemctl start svc`). The backend validates that the session_id you pass actually exercised this scenario — if the judge returns FAIL, the save is refused with the reason." - changed
Input schema / properties / session_id / descriptionPrevious value: -"Required for type=image. Session ID of the provisioned cluster."New value: +"Required for type=image AND type=runbook. For type=image: the session whose node is being snapshotted. For type=runbook: the session whose exec history actually demonstrates the scenario — the backend judges the history against the runbook body with an LLM and refuses to save if the session did not exercise what the runbook claims. Only successful demonstrations become runbooks."
4 tool updates
- Changed
delete2 fields changed- changed
Input schema / properties / name / descriptionPrevious value: -"The identifier of the thing to delete. For type=cluster: the session_id returned by provision. For type=image: the short image name (e.g. \"my-nginx\", not \"antrieb:my-nginx:v1\"). For type=function or type=network: the short name from your org (e.g. \"deploy-nginx\") or the fully-qualified \"namespace/name\" form."New value: +"The identifier of the thing to delete. For type=cluster: the session_id returned by provision. For type=image: the short image name. For type=runbook/network: the short name or \"namespace/short\" fq_name." - changed
Input schema / properties / type / enumPrevious value: -[ - "cluster", - "image", - "function", - "network" -]New value: +[ + "cluster", + "image", + "runbook", + "network" +]
- Changed
exec1 field changed- changed
Input schema / properties / command / descriptionPrevious value: -"Shell command, or a saved-function reference \"@namespace/name\" (optionally prefixed with KEY=val env bindings)."New value: +"Literal shell command to run on the node. Cluster-scoped env vars (NODE_NAME, NODE_INDEX, NODE_IP, CLUSTER_HOSTS, CLUSTER_SSH_PUBKEY, CLUSTER_SSH_PRIVKEY) are available inside the command."
- Changed
save6 fields changed- changed
Input schema / properties / body / descriptionPrevious value: -"Required for type=function. The function body — string for one command, or array of strings for a sequence of steps. **Each step runs in its own shell invocation**, so variables set in one step are NOT visible in the next — if a step needs state from an earlier step, have it read from a file, a known path, or re-derive. **Write each step to be idempotent** — functions get re-invoked on retries, on different nodes, and on already-configured VMs; guard mutations (e.g. `id user || useradd …`, `grep -q entry /etc/hosts || echo entry >> /etc/hosts`, `systemctl is-active svc || systemctl start svc`) so a second invocation is a no-op rather than a failure or a duplicate."New value: +"Required for type=runbook. Markdown document describing the scenario. Structure: `## Topology required` (describes cluster shape the runbook applies to — images, NICs, networks), `## Variables` (lists placeholders like `<LAN_SUBNET>` callers substitute), `## Steps` (numbered, one per major action, prose explaining WHY + fenced shell for the actual command, annotating which node each step targets), `## Verify` (how to confirm success). Keep imperative — the reader (another LLM) will substitute variables and issue exec calls. Write commands idempotently so a second application is safe (`id user || useradd`, `grep -q entry /etc/hosts || echo ... >> /etc/hosts`, `systemctl is-active svc || systemctl start svc`)." - removed
Input schema / properties / body / oneOfRemoved value: -[ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "type": "array" - } -] - added
Input schema / properties / body / typeAdded value: +"string" - changed
Input schema / properties / description / descriptionPrevious value: -"Optional for type=function/network. Short human description used by search."New value: +"Optional for type=runbook/network. Short human description used by search. Critical for runbooks — the description is what the LLM sees in browse mode; make it specific enough to distinguish from similar-named variants." - changed
Input schema / properties / name / descriptionPrevious value: -"Name for the saved entity (lowercase, hyphens). For type=image: becomes antrieb:<name>:v1. For type=function/network: becomes referenceable as @<namespace>/<name>."New value: +"Name for the saved entity (lowercase, hyphens). For type=image: becomes antrieb:<name>:v1. For type=runbook/network: becomes referenceable as @<namespace>/<name>." - changed
Input schema / properties / type / enumPrevious value: -[ - "image", - "function", - "network" -]New value: +[ + "image", + "runbook", + "network" +]
- Changed
search5 fields changed- added
Input schema / properties / fq_nameAdded value: +{ + "description": "Fully-qualified name (namespace/name) of a specific runbook to fetch. When set for type=runbook, returns the runbook WITH its full markdown body — use this after browsing so you can read the scenario steps before applying them. Ignored for type=image/network/cluster.", + "type": "string" +} - changed
Input schema / properties / keywords / descriptionPrevious value: -"Full-text filter on name, description, and fq_name. Applies to type=image, type=function, and type=network. Ignored for type=cluster."New value: +"Full-text filter on name, description, and fq_name. Applies to type=image/runbook/network. Ignored for type=cluster, and ignored when fq_name is set." - changed
Input schema / properties / limit / descriptionPrevious value: -"Max results (default 20, max 100)."New value: +"Max results (default 20, max 100). Ignored when fq_name is set." - changed
Input schema / properties / type / descriptionPrevious value: -"Catalog to query. \"image\" (default) — VM images available to provision. \"cluster\" — clusters you currently have running (ignores keywords/limit). \"function\" — saved functions you can invoke through exec. \"network\" — saved network specs you can reference in provision.networks. Uses the same enum values as save."New value: +"Catalog to query. \"image\" (default) — VM images available to provision. \"cluster\" — clusters you currently have running (ignores keywords/limit). \"runbook\" — saved scenarios in markdown. \"network\" — saved network specs. Uses the same enum values as save." - changed
Input schema / properties / type / enumPrevious value: -[ - "image", - "cluster", - "function", - "network" -]New value: +[ + "image", + "cluster", + "runbook", + "network" +]
1 tool update
- Changed
save1 field changed- changed
Input schema / properties / body / descriptionPrevious value: -"Required for type=function. The function body — string for one command, or array of strings for a sequence of steps."New value: +"Required for type=function. The function body — string for one command, or array of strings for a sequence of steps. **Each step runs in its own shell invocation**, so variables set in one step are NOT visible in the next — if a step needs state from an earlier step, have it read from a file, a known path, or re-derive. **Write each step to be idempotent** — functions get re-invoked on retries, on different nodes, and on already-configured VMs; guard mutations (e.g. `id user || useradd …`, `grep -q entry /etc/hosts || echo entry >> /etc/hosts`, `systemctl is-active svc || systemctl start svc`) so a second invocation is a no-op rather than a failure or a duplicate."
4 tool updates
- Changed
delete5 fields changed- removed
Input schema / properties / imageRemoved value: -{ - "description": "Image name to decommission (e.g. \"my-nginx\").", - "type": "string" -} - added
Input schema / properties / nameAdded value: +{ + "description": "The identifier of the thing to delete. For type=cluster: the session_id returned by provision. For type=image: the short image name (e.g. \"my-nginx\", not \"antrieb:my-nginx:v1\"). For type=function or type=network: the short name from your org (e.g. \"deploy-nginx\") or the fully-qualified \"namespace/name\" form.", + "type": "string" +} - removed
Input schema / properties / session_idRemoved value: -{ - "description": "Session ID of the cluster to destroy.", - "type": "string" -} - added
Input schema / properties / typeAdded value: +{ + "description": "What to delete. Uses the same enum values as save (plus \"cluster\").", + "enum": [ + "cluster", + "image", + "function", + "network" + ], + "type": "string" +} - added
Input schema / requiredAdded value: +[ + "type", + "name" +]
- Changed
exec1 field changed- changed
Input schema / properties / command / descriptionPrevious value: -"Shell command, or a saved-init reference \"@namespace/name\" (optionally prefixed with KEY=val env bindings)."New value: +"Shell command, or a saved-function reference \"@namespace/name\" (optionally prefixed with KEY=val env bindings)."
- Changed
save4 fields changed- changed
Input schema / properties / body / descriptionPrevious value: -"Required for type=init. The init script — string for one command, or array of strings for a sequence."New value: +"Required for type=function. The function body — string for one command, or array of strings for a sequence of steps." - changed
Input schema / properties / description / descriptionPrevious value: -"Optional for type=init/network. Short human description used by search."New value: +"Optional for type=function/network. Short human description used by search." - changed
Input schema / properties / name / descriptionPrevious value: -"Name for the saved entity (lowercase, hyphens). For type=image: becomes antrieb:<name>:v1. For type=init/network: becomes referenceable as @<namespace>/<name>."New value: +"Name for the saved entity (lowercase, hyphens). For type=image: becomes antrieb:<name>:v1. For type=function/network: becomes referenceable as @<namespace>/<name>." - changed
Input schema / properties / type / enumPrevious value: -[ - "image", - "init", - "network" -]New value: +[ + "image", + "function", + "network" +]
- Changed
search4 fields changed- changed
Input schema / properties / keywords / descriptionPrevious value: -"Search keywords to filter images (searches name, description, tags). Only for type=images."New value: +"Full-text filter on name, description, and fq_name. Applies to type=image, type=function, and type=network. Ignored for type=cluster." - changed
Input schema / properties / limit / descriptionPrevious value: -"Max results (default: 20, max: 100)"New value: +"Max results (default 20, max 100)." - changed
Input schema / properties / type / descriptionPrevious value: -"What to search: \"image\" (default — VM images), \"cluster\" (your active clusters), \"init\" (saved init scripts), \"network\" (saved network specs from your platform team — reference them as @namespace/name in provision's networks array). Matches the type values used by the save tool."New value: +"Catalog to query. \"image\" (default) — VM images available to provision. \"cluster\" — clusters you currently have running (ignores keywords/limit). \"function\" — saved functions you can invoke through exec. \"network\" — saved network specs you can reference in provision.networks. Uses the same enum values as save." - changed
Input schema / properties / type / enumPrevious value: -[ - "image", - "cluster", - "init", - "network" -]New value: +[ + "image", + "cluster", + "function", + "network" +]
2 tool updates
- Changed
exec1 field changed- changed
Input schema / properties / command / descriptionPrevious value: -"Shell command to execute on the node."New value: +"Shell command, or a saved-init reference \"@namespace/name\" (optionally prefixed with KEY=val env bindings)."
- Changed
provision2 fields changed- changed
Input schema / properties / cluster / descriptionPrevious value: -"VM topology. Each entry is either a shorthand string (\"ubuntu24.04\" = 1 VM, \"ubuntu24.04 x3\" = 3 VMs) OR an object {image, count?, init?}. The object form lets you attach an init script (a single command string OR an array of command strings) that runs on every VM from that entry once the cluster is ready (analogous to EC2 user_data). Per-entry init = each tier of a heterogeneous cluster gets its own setup. Env vars exposed to init: NODE_NAME (e.g. node1), NODE_INDEX (1,2,...), NODE_IP. Example: [{\"image\":\"ubuntu24.04\",\"count\":3,\"init\":\"apt-get install -y nginx\"},{\"image\":\"vyos\",\"init\":[\"configure\",\"commit\"]}]"New value: +"VM topology. Each entry is either a shorthand string (\"ubuntu24.04\" = 1 VM, \"ubuntu24.04 x3\" = 3 VMs) OR an object {image, count?}. Init scripts are NOT part of provision — run them through exec with \"@namespace/name\" after the cluster is ready. This keeps provision sub-second and avoids hidden async state. Example: [{\"image\":\"ubuntu24.04\",\"count\":3},{\"image\":\"vyos\"}]" - changed
Input schema / properties / cluster / items / oneOfPrevious value: -[ - { - "type": "string" - }, - { - "properties": { - "count": { - "description": "Number of VMs from this entry. Default 1.", - "type": "number" - }, - "image": { - "description": "Image name or ANI (e.g. \"ubuntu24.04\" or \"antrieb:ubuntu24.04:v1\").", - "type": "string" - }, - "init": { - "description": "Optional init script. Single command string OR array of command strings (run sequentially on each VM from this entry). Runs in background after cluster is ready; provision_time_ms is unaffected.", - "oneOf": [ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "type": "array" - } - ] - } - }, - "required": [ - "image" - ], - "type": "object" - } -]New value: +[ + { + "type": "string" + }, + { + "properties": { + "count": { + "description": "Number of VMs from this entry. Default 1.", + "type": "number" + }, + "image": { + "description": "Image name or ANI (e.g. \"ubuntu24.04\" or \"antrieb:ubuntu24.04:v1\").", + "type": "string" + } + }, + "required": [ + "image" + ], + "type": "object" + } +]
2 tool updates
- Changed
provision2 fields changed- changed
Input schema / properties / networks / descriptionPrevious value: -"Optional. Per-cluster private networks. Each is its own libvirt-managed bridge with its own DHCP. CIDRs are auto-allocated unless specified. Default (when omitted): one network named \"default\" with NAT egress. Example: [{\"name\":\"lan-a\",\"cidr\":\"10.10.1.0/24\",\"egress\":false},{\"name\":\"wan\",\"egress\":true}]"New value: +"Optional. Per-cluster private networks. Each is its own isolated L2 segment with its own DHCP. CIDRs are auto-allocated unless specified. Default (when omitted): one network named \"default\" with NAT egress. Example: [{\"name\":\"lan-a\",\"cidr\":\"10.10.1.0/24\",\"egress\":false},{\"name\":\"wan\",\"egress\":true}]" - changed
Input schema / properties / networks / items / properties / dhcp / descriptionPrevious value: -"true = libvirt runs dnsmasq with DHCP; false = no DHCP (run your own inside a VM). Default true."New value: +"true = framework runs DHCP for the network; false = no DHCP (run your own inside a VM). Default true."
- Changed
save1 field changed- changed
Input schema / properties / dhcp / descriptionPrevious value: -"Optional for type=network. true = libvirt DHCP; false = bring your own."New value: +"Optional for type=network. true = framework DHCP; false = bring your own."
3 tool updates
- Changed
provision3 fields changed- changed
Input schema / properties / cluster / descriptionPrevious value: -"VM topology. Supports shortcuts: \"ubuntu24.04\" expands to \"antrieb:ubuntu24.04:v1\", \"ubuntu24.04 x3\" creates 3 VMs."New value: +"VM topology. Each entry is either a shorthand string (\"ubuntu24.04\" = 1 VM, \"ubuntu24.04 x3\" = 3 VMs) OR an object {image, count?, init?}. The object form lets you attach an init script (a single command string OR an array of command strings) that runs on every VM from that entry once the cluster is ready (analogous to EC2 user_data). Per-entry init = each tier of a heterogeneous cluster gets its own setup. Env vars exposed to init: NODE_NAME (e.g. node1), NODE_INDEX (1,2,...), NODE_IP. Example: [{\"image\":\"ubuntu24.04\",\"count\":3,\"init\":\"apt-get install -y nginx\"},{\"image\":\"vyos\",\"init\":[\"configure\",\"commit\"]}]" - added
Input schema / properties / cluster / items / oneOfAdded value: +[ + { + "type": "string" + }, + { + "properties": { + "count": { + "description": "Number of VMs from this entry. Default 1.", + "type": "number" + }, + "image": { + "description": "Image name or ANI (e.g. \"ubuntu24.04\" or \"antrieb:ubuntu24.04:v1\").", + "type": "string" + }, + "init": { + "description": "Optional init script. Single command string OR array of command strings (run sequentially on each VM from this entry). Runs in background after cluster is ready; provision_time_ms is unaffected.", + "oneOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + } + }, + "required": [ + "image" + ], + "type": "object" + } +] - removed
Input schema / properties / cluster / items / typeRemoved value: -"string"
- Changed
save11 fields changed- added
Input schema / properties / bodyAdded value: +{ + "description": "Required for type=init. The init script — string for one command, or array of strings for a sequence.", + "oneOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] +} - added
Input schema / properties / cidrAdded value: +{ + "description": "Optional for type=network. /24 CIDR like \"10.10.1.0/24\". Omit to auto-allocate at each provision.", + "type": "string" +} - changed
Input schema / properties / commands / descriptionPrevious value: -"Ordered list of successful commands that were executed on this node."New value: +"Required for type=image. Ordered list of successful commands that were executed on this node." - added
Input schema / properties / descriptionAdded value: +{ + "description": "Optional for type=init/network. Short human description used by search.", + "type": "string" +} - added
Input schema / properties / dhcpAdded value: +{ + "description": "Optional for type=network. true = libvirt DHCP; false = bring your own.", + "type": "boolean" +} - added
Input schema / properties / egressAdded value: +{ + "description": "Optional for type=network. true = NAT to internet; false = isolated.", + "type": "boolean" +} - changed
Input schema / properties / name / descriptionPrevious value: -"Image name (e.g. \"my-nginx\"). Will become antrieb:<name>:v1."New value: +"Name for the saved entity (lowercase, hyphens). For type=image: becomes antrieb:<name>:v1. For type=init/network: becomes referenceable as @<namespace>/<name>." - changed
Input schema / properties / node / descriptionPrevious value: -"Node name to save (e.g. \"node1\")."New value: +"Required for type=image. Node name to save (e.g. \"node1\")." - changed
Input schema / properties / session_id / descriptionPrevious value: -"Session ID of the provisioned cluster."New value: +"Required for type=image. Session ID of the provisioned cluster." - added
Input schema / properties / typeAdded value: +{ + "description": "What to save. Default \"image\".", + "enum": [ + "image", + "init", + "network" + ], + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "session_id", - "node", - "name", - "commands" -]New value: +[ + "name" +]
- Changed
search2 fields changed- changed
Input schema / properties / type / descriptionPrevious value: -"What to search: \"images\" (default) or \"clusters\" (your active clusters)."New value: +"What to search: \"image\" (default — VM images), \"cluster\" (your active clusters), \"init\" (saved init scripts), \"network\" (saved network specs from your platform team — reference them as @namespace/name in provision's networks array). Matches the type values used by the save tool." - changed
Input schema / properties / type / enumPrevious value: -[ - "images", - "clusters" -]New value: +[ + "image", + "cluster", + "init", + "network" +]
1 tool update
- Changed
provision2 fields changed- added
Input schema / properties / networksAdded value: +{ + "description": "Optional. Per-cluster private networks. Each is its own libvirt-managed bridge with its own DHCP. CIDRs are auto-allocated unless specified. Default (when omitted): one network named \"default\" with NAT egress. Example: [{\"name\":\"lan-a\",\"cidr\":\"10.10.1.0/24\",\"egress\":false},{\"name\":\"wan\",\"egress\":true}]", + "items": { + "properties": { + "cidr": { + "description": "Optional 10.x.y.0/24 CIDR. Auto-allocated if omitted.", + "type": "string" + }, + "dhcp": { + "description": "true = libvirt runs dnsmasq with DHCP; false = no DHCP (run your own inside a VM). Default true.", + "type": "boolean" + }, + "egress": { + "description": "true = NAT to internet; false = isolated. Default false (true only for the \"default\" network).", + "type": "boolean" + }, + "name": { + "description": "Lowercase alphanumeric+hyphen identifier (e.g. \"lan-a\", \"wan\").", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / nicsAdded value: +{ + "additionalProperties": { + "items": { + "properties": { + "net": { + "description": "Name of a declared network.", + "type": "string" + } + }, + "required": [ + "net" + ], + "type": "object" + }, + "type": "array" + }, + "description": "Optional. Per-node NIC declarations keyed by node name (\"node1\", \"node2\", ...). Default (when omitted): every node gets one NIC on the first declared network. Example: {\"node1\":[{\"net\":\"lan-a\"}],\"node3\":[{\"net\":\"wan\"},{\"net\":\"lan-a\"}]}", + "type": "object" +}
5 tool updates
- First observed
delete - First observed
exec - First observed
provision - First observed
save - First observed
search
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
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
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
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!
Related MCP Connectors
Proves AI-generated Python does what you asked: lint, types, security, sandbox run, exact fixes.
- emisarOAuthdev.emisar
Let AI operate servers without SSH. Choose actions, approve risky changes, and audit every step.
Run, build, and validate firmware on virtual hardware from your AI agent. Hardware knowledge corpus.
Related MCP Servers
- FlicenseAqualityAmaintenanceProduction-ready, zero-knowledge AI DevOps deployment, infrastructure provisioning, self-healing execution, and persistent documentation engine for VPS servers.204-
- AlicenseNot gradedqualityDmaintenanceValidates AI-generated code against actual codebases to catch hallucinations, dead code, and API mismatches before runtime.241MIT

CLP MCP - DevOpsofficial
-licenseNot gradedqualityNot gradedmaintenanceEnables comprehensive DevOps infrastructure management through tools for Jenkins, Ansible, Terraform, Kubernetes, and Docker operations. Features a sophisticated memory system for context retention and provides validation, generation, and optimization capabilities across DevOps workflows.1-- AlicenseNot gradedqualityBmaintenanceEnables AI agents to safely test and debug PowerShell, CMD/BAT scripts, and system utilities inside isolated Hyper-V virtual machines, with snapshot rollback, host-to-guest file transfer, PowerShell Direct execution, and autonomous self-correction on failures.1Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Each tool has a clearly distinct purpose with no overlap: delete removes resources, exec runs commands, provision creates clusters, save creates images, and search lists resources. The descriptions clearly differentiate their functions, making misselection unlikely.
All tool names follow a consistent, simple verb-only pattern (delete, exec, provision, save, search) without any deviations in style or casing. This predictability makes the set easy to navigate and understand.
With 5 tools, this server is well-scoped for managing VM clusters and images, covering core operations without bloat. Each tool serves a clear, essential function in the workflow, making the count appropriate for the domain.
The toolset covers the full lifecycle of VM clusters and images: provision to create, exec to manage, save to persist, search to list, and delete to remove. A minor gap exists in updating or modifying existing clusters or images, but agents can work around this by re-provisioning or using exec.