Skip to main content
Glama

glm-mcp

npm ci license

Un servidor MCP que expone los modelos GLM de Z.ai — GLM-5.3 y sus hermanos — como herramientas dentro de Claude Code y Claude Desktop.

Claude Desktop fija su propio proveedor de modelos: cuando lanza su Claude Code integrado, fuerza ANTHROPIC_BASE_URL al endpoint de Anthropic y elimina ANTHROPIC_API_KEY / ANTHROPIC_AUTH_TOKEN del entorno del hijo. Así que GLM no puede conducir una sesión de escritorio. Este servidor toma la otra ruta: GLM se convierte en una herramienta que Claude puede llamar a mitad de conversación.

Útil para:

  • Una segunda opinión real. Un modelo frontera independiente, no el mismo modelo preguntado dos veces.

  • Contexto muy grande. GLM-5.3 tiene una ventana de 1.000.000 de tokens, así que puedes darle mucho más material fuente del que cabe en una sesión normal.

  • Trabajo masivo barato. Enruta el trabajo pesado a glm-4.7 y guarda el modelo caro para razonar.

Install

Regístralo una vez, con ámbito de usuario, y estará disponible en todos los proyectos de la máquina, sin configuración por proyecto:

claude mcp add --scope user glm -- npx -y @nocompromiseai/glm-mcp

O desde un checkout local:

npm install && npm run build
claude mcp add --scope user glm -- node /absolute/path/to/glm-mcp/dist/index.js

Reinicia Claude Code / Claude Desktop para que se cargue. Verifícalo con claude mcp list.

Requiere Node 20 o superior, y una clave API de z.ai con crédito o un Coding Plan.

Related MCP server: CCGLM MCP Server

Credentials

El servidor nunca fija una clave en el código. Resuelve una desde, en orden:

  1. ZAI_API_KEY

  2. ~/.config/zai/api-key

  3. la clave api.z.ai que ZCode guarda en ~/.zcode/v2/config.jsonsolo cuando GLM_MCP_ALLOW_ZCODE_KEY=1 está establecido

El paso 3 es opcional a propósito. Lee una credencial que pertenece a otra aplicación, y eso debería ser una decisión que tomes, no un comportamiento que descubras. Todo se ejecuta en la máquina que hace la instalación: tu clave, tu cuenta de z.ai, tu facturación.

Ten en cuenta que el token del Start Plan de ZCode no es utilizable aquí: ese endpoint está bloqueado por captcha para la aplicación ZCode y rechaza clientes externos con 3007. Necesitas una clave api.z.ai con un Coding Plan o crédito.

Usage

Una vez registrado, pide a Claude que lo use. En la práctica dices algo como "usa glm_ask para revisar src/auth en busca de condiciones de carrera" — pero la llamada subyacente se ve así:

{
  "prompt": "Does the refresh logic have a race condition? Point at the lines.",
  "files": ["src/auth/**/*.ts"],
  "reasoning": "high"
}

La respuesta lleva un pie con el modelo, el uso de tokens y cuánto razonó:

The refresh path in session.ts:88 reads `expiresAt` before taking the lock ...

[glm-5.3 · in 4210 / out 380 tok · reasoned 2170 chars]

Dos cosas en las que es realmente bueno:

  • Una segunda opinión que discrepa. Pregunta a Claude y a GLM la misma cuestión y compara. Dos modelos que discrepan son una señal real; el mismo modelo preguntado dos veces no lo es.

  • Más fuente de la que cabe. Con una ventana de 1M de tokens puedes darle src/**/*.ts entero en lugar de seleccionar un puñado de archivos.

Tools

glm_ask

arg

type

default

notes

prompt

string

requerido

files

string[]

archivos a incluir como contexto: rutas literales y/o globs (src/**/*.ts, *.md, {lib,src}/*.ts)

cwd

string

cwd del servidor

contra qué se resuelven los files relativos

model

string

glm-5.3

cualquier id de glm_models

reasoning

none|low|high|max

low

más alto es más lento

system

string

prompt de sistema opcional

max_tokens

number

8192

límite de salida

glm_models

Lista los ids de modelo disponibles en la cuenta configurada.

Reasoning

GLM-5.3 siempre razona. Una solicitud sin bloque de pensamiento se rechaza con el error 1210 de z.ai, así que reasoning: "none" se eleva silenciosamente a "low" para ese modelo. Sus hermanos (glm-5.2, glm-5-turbo, glm-4.6, glm-4.7) no tienen esa restricción.

reasoning

presupuesto de pensamiento

low

2,048 tokens

high

8,192 tokens

max

24,576 tokens

max_tokens se eleva automáticamente para dejar espacio para la respuesta además del presupuesto.

Path confinement

glm_ask solo lee dentro de las raíces que establece el operador. Un llamador puede estrechar dentro de ellas; no puede elegirlas ni escapar de ellas.

  • Las raíces provienen de GLM_MCP_ROOTS, rutas absolutas separadas por dos puntos.

  • Si no se establece, la raíz es el directorio en el que se inició el servidor. Claude inicia un servidor por proyecto, así que cada servidor está confinado a su propio proyecto y la mayoría de las configuraciones no necesitan ninguna configuración.

  • cwd debe resolverse dentro de una raíz. Si no lo hace, la llamada se rechaza directamente, no se estrecha silenciosamente a una raíz: una respuesta vacía en silencio es peor que un error que dice por qué.

  • La ruta real de cada archivo debe caer dentro de una raíz, así que un enlace simbólico dentro del árbol que apunte fuera se resuelve fuera y se rechaza. Esto se comprueba antes de que un glob recorra, así que un patrón con raíz fuera nunca atraviesa.

  • Las rutas rechazadas aparecen en Notes exactamente como archivos faltantes, nombrando la ortografía que usaste. Una entrada rechazada nunca falla una llamada que también nombra archivos buenos.

Digamos lo que digan las raíces, el servidor nunca lee sus propias credenciales — ~/.config/zai/api-key, ~/.zcode/v2/config.json y /proc/self/environ — comparadas por ruta real resuelta en lugar de por ortografía.

GLM_MCP_ALLOW_ANY_PATH=1 desactiva el confinamiento, deliberada y explícitamente, de la misma manera que funciona GLM_MCP_ALLOW_ZCODE_KEY. Amplía las raíces; no reabre esos tres archivos.

Upgrading to 0.2.0

Si lees archivos de más de un proyecto, establece GLM_MCP_ROOTS en tu registro MCP antes de actualizar. Cada servidor tiene su raíz en el proyecto en el que se inició, así que preguntar desde un proyecto sobre un archivo de otro funcionaba silenciosamente antes de 0.2.0 y se rechaza después. El registro incluye env: {}, así que esto debe añadirse deliberadamente:

"env": { "GLM_MCP_ROOTS": "/Users/you/project-a:/Users/you/project-b" }

Las rutas absolutas también están confinadas, pero eso rompe mucho menos de lo que parece: un estudio de las propias herramientas de este autor no encontró ningún llamador que las pase.

File context

files acepta rutas literales y patrones glob, mezclados libremente. Las coincidencias se ordenan y se deduplican por identidad de archivo en toda la lista, así que los patrones superpuestos nunca envían el mismo archivo dos veces.

Sintaxis admitida: *, **, ?, [a-z], [!a-z], {a,b} y escapes \.

  • . y .. se resuelven contra cwd, así que ./src/** y ../neighbour/src/** funcionan.

  • Una ruta que existe en disco se lee literalmente incluso si su nombre contiene metacaracteres: un report[final].md real se lee, no se empareja con patrón.

  • Las entradas ocultas (punto) solo coinciden cuando el patrón escribe el punto explícitamente.

  • Un patrón que no coincide con nada se reporta en Notes, exactamente como un archivo faltante.

  • Los directorios con enlaces simbólicos solo se siguen cuando el patrón nombra uno explícitamente (linked/*.ts). Los comodines nunca los siguen, y un enlace a un directorio nunca se lista como archivo.

  • En Windows, usa barras diagonales: C:/src/**/*.ts y //server/share/src/*.ts se tratan como absolutas. \ es el carácter de escape en todas las plataformas.

What globs skip

La expansión de globs omite node_modules, .git, dist, build, coverage, .next, .turbo, vendor y target, así que **/*.ts coincide con tu fuente en lugar de que 1.700 definiciones de tipos de dependencias acaparen el presupuesto.

Esto se aplica solo a la expansión: un node_modules/foo/x.d.ts literal pasa sin tocarse. Nombrar un directorio en el patrón también anula la omisión, porque el llamador lo pidió: node_modules/foo/**/*.d.ts coincide como se espera.

Establece GLM_MCP_GLOB_IGNORE a una lista separada por comas para reemplazar el conjunto predeterminado (GLM_MCP_GLOB_IGNORE=dist,.venv); un valor vacío desactiva la omisión por completo.

Limits

Cada límite detiene la operación que lo alcanza y lo dice en Notes, nombrando la variable que lo estableció: nada se trunca silenciosamente ni se descarta silenciosamente.

Límite

Variable

Predeterminado

Caracteres totales de contexto, incluidos encabezados y separadores

GLM_MCP_MAX_FILE_CHARS

800,000

Tamaño por archivo, comprobado antes de leer el archivo

GLM_MCP_MAX_FILE_BYTES

5 MB

Profundidad de recorrido de globs

GLM_MCP_MAX_DEPTH

24

Entradas de directorio examinadas por llamada

GLM_MCP_MAX_ENTRIES

200,000

Presupuesto de tiempo real para la expansión de globs

GLM_MCP_GLOB_TIMEOUT_MS

10,000

Expansiones totales de llaves {a,b}

GLM_MCP_MAX_BRACE_EXPANSIONS

1,024

Tiempo de espera de la solicitud

GLM_MCP_TIMEOUT_MS

600,000

  • Solo se leen archivos regulares. Un FIFO, dispositivo o socket se rechaza en lugar de bloquear el servidor en una lectura que puede no volver nunca.

  • El truncamiento corta por puntos de código, así que nunca parte un emoji por la mitad.

  • Los archivos faltantes, ilegibles y rechazados se omiten y se reportan, nunca son fatales: una entrada mala no falla una llamada que también nombra archivos buenos.

Errors and endpoints

Los errores codificados de z.ai se traducen a algo accionable: 1113 (sin saldo), 1210 (razonamiento requerido), 3007 (tipo de credencial incorrecto — ver Credentials arriba).

Las solicitudes van a https://api.z.ai/api/anthropic a menos que ZAI_BASE_URL diga lo contrario. Tu clave se envía al host que nombre, así que solo apúntala a endpoints en los que confíes.

Testing

npm test                    # unit tests: globs, key resolution, confinement, limits
npm run verify:ignore       # acceptance gate: glob ignore semantics
npm run verify:globs        # acceptance gate: glob path handling
npm run verify:confinement  # acceptance gate: the path trust boundary
npm run verify:limits       # acceptance gate: every resource limit actually fires
npm run smoke               # drives the server over stdio as a real MCP client (needs a key)

Todo excepto smoke es hermético y se ejecuta en CI en Node 20, 22 y 24. smoke hace llamadas API en vivo, así que se ejecuta manualmente.

Cada puerta de aceptación se escribió antes del cambio que controla y falló contra el código para el que se escribió, así que afirma el comportamiento en lugar de describirlo. Construyen árboles de fixtures reales — archivos reales, enlaces simbólicos reales, un FIFO real, un $HOME falso real — y se ejecutan contra procesos hijos donde un ajuste tiene que estar en su lugar antes de que el módulo se cargue.

Releases

Publicado desde CI con provenance mediante publicación confiable de npm: no hay token npm de larga duración. Cada lanzamiento se prepara y requiere que un mantenedor lo apruebe con 2FA antes de que sea instalable, y su provenance vincula el tarball publicado con este repositorio y el flujo de trabajo que lo construyó.

Author

Construido por Jerold Billings, Fundador — No Compromise AI, LLC.

Errores y preguntas: abre un issue. Problemas de seguridad: por favor usa

Available Tools

3 tools
glm_askAsk GLMA

Send a prompt to a Z.ai GLM model (default GLM-5.3) and return its answer. GLM-5.3 is an independent frontier model with a million-token context window, so this is useful for a genuine second opinion from a different model, for cross-checking reasoning, and for analysing far more source material at once than fits in a normal context. Optionally pass file paths to include as context. Model and reasoning are the latency levers: thinking tokens are generated before the first character of the answer, and the thinking budget spans 2,048 at 'low' against 24,576 at 'max' — a twelve-fold spread. Route mechanical work (extract, summarise, reformat, classify) to glm-5.3-flash or glm-4.6 at 'low'; glm-4.6 alone can go further, to 'none' — glm-5.3-flash cannot run with reasoning off, so its 'none' is raised to 'low'. Keep GLM-5.3 at 'high' or 'max' for design review, cross-checking reasoning, and hunting a subtle bug. glm-4.6 and glm-4.7 accept reasoning 'none'; GLM-5.3 and glm-5.3-flash cannot, so 'low' is their shallowest setting.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoDirectory that relative file paths resolve against. Defaults to the server's cwd.
filesNoOptional files to include as context: literal paths and/or glob patterns (e.g. "src/**/*.ts"). Each glob expands to its matching files, sorted and de-duplicated across the whole list; a pattern that matches nothing is reported in the response notes. A path that exists on disk is used literally even when it contains glob characters. Glob expansion skips node_modules, .git and build output by default; naming a directory in the pattern (node_modules/foo/**/*.d.ts) or setting GLM_MCP_GLOB_IGNORE overrides that. Relative paths — ./ and ../ prefixes included — resolve against 'cwd'. Every file arrives with cat -n style line numbers, so answers can cite path:line and mean it; a literal path may carry an inclusive line range ("src/auth/session.ts:40-120") to send just that region, numbered with the file's own line numbers rather than renumbered from 1.
modelNoGLM model id. Defaults to glm-5.3 (the frontier flagship); glm-5.3-flash and glm-4.6 are the fast routes, and glm_models lists every id the account offers with a one-line role.
promptYesThe question or instruction to send to GLM.
systemNoOptional system prompt.
messagesNoThe conversation so far: prior turns this call continues, in order, each {role, content}. `prompt` stays required and is sent as the FINAL user turn — do not repeat it inside messages. Roles are "user" and "assistant"; any other is refused here, before anything is sent, naming the value you sent. No ordering is imposed — replay a real transcript as it happened. With `files`, the file context rides the FIRST turn and is never repeated on the newest, so the thread keeps a stable prefix: a follow-up reads its context from cache instead of re-prefilling it. The history spends the same character budget as the files, so a long thread leaves less room for file context — the cut is reported in the notes.
reasoningNoReasoning depth — the largest latency lever in this tool: thinking tokens are generated before the first character of the answer, and the budget runs 2,048 at 'low', 8,192 at 'high', 24,576 at 'max'. Use 'none' or 'low' for mechanical work — extract, summarise, reformat; use 'high' or 'max' to review a design, cross-check reasoning, or hunt a subtle bug. GLM-5.3 and glm-5.3-flash always reason: GLM-5.3 rejects 'none' outright, while glm-5.3-flash accepts it and silently reasons anyway, so 'none' is raised to 'low' for both.
max_tokensNoMax output tokens — a hard cap. The request never exceeds it; the thinking budget scales down to fit beneath it, always leaving room for the answer, but never below the API minimum of 1024. A cap below 2048 — the API's budget minimum plus the least room that still constitutes an answer — cannot hold both and is refused rather than silently raised; on GLM-5.3 and glm-5.3-flash, which always reason, the only fix is a higher cap. A cap over the model's published ceiling is likewise refused before anything is sent (131,072 for GLM-5.3). Omit it and the model's own default applies (65,536 for GLM-5.3).

TDQS

A4.1/5.0
Behavior5/5

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

With no annotations, the description carries the full burden of disclosing behavior, and it is exceptionally thorough. It explains thinking-token generation before the answer, reasoning budget ranges, model-specific constraints ('glm-5.3-flash cannot run with reasoning off, so its none is raised to low'), file context placement on the first turn, history consuming character budget, and max_tokens cap behavior including refusals. This is far beyond a basic safety profile.

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 description is long but information-dense; every sentence carries either a use-case, a latency lever, or a routing rule. It is front-loaded with the core action and value proposition before diving into details. Some redundancy with the schema's reasoning and model descriptions exists, but for a tool this complex the length is justified.

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

Completeness4/5

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

The description covers operational nuances such as file globbing behavior, line numbers, message ordering, reasoning constraints, and max_tokens caps. It mentions response notes for unmatched globs and history cuts, which implies a structured return. It does not fully spell out the output format, but for a chat-completion tool 'return its answer' plus the notes mention is reasonably complete given the lack of an output schema.

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

Parameters3/5

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

Schema description coverage is 100% and each parameter already has rich documentation, so the baseline is 3. The tool description adds high-level guidance about model/reasoning selection, but it mostly reinforces what is already in the parameter schemas rather than introducing new parameter-level meaning. The schema descriptions alone are sufficient for parameter understanding.

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

Purpose4/5

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

The description opens with a specific verb and resource: 'Send a prompt to a Z.ai GLM model (default GLM-5.3) and return its answer.' It clearly explains the tool's function and even suggests use cases. However, it does not explicitly differentiate from the sibling tools glm_review and glm_models, relying on the tool name and general context to separate them.

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?

The description gives clear context for when to use the tool: 'for a genuine second opinion from a different model, for cross-checking reasoning, and for analysing far more source material at once than fits in a normal context.' It also provides detailed routing advice among models and reasoning levels, e.g., 'Route mechanical work (extract, summarise, reformat, classify) to glm-5.3-flash or glm-4.6 at low.' It does not explicitly say when to use glm_review or glm_models instead, so no true alternatives are named.

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

glm_modelsList GLM modelsA

List the GLM model ids available on the configured Z.ai account, each with a one-line role; an id this server's model table does not know is listed bare.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It discloses useful behavior: each model id is annotated with a one-line role, and unknown ids are rendered bare. It does not mention authentication or rate limits, but for a simple read-only enumeration this is not a significant gap.

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

Conciseness5/5

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

A single sentence that front-loads the action and includes only essential details about the output format and the special handling of unknown ids. Every clause adds value with no redundancy.

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 zero-parameter list tool with no output schema, this description is complete: it tells the agent what will be returned, how roles appear, and how unknown ids are presented. Nothing critical is missing for invoking and interpreting the tool.

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?

The tool has zero parameters and an empty input schema, so there is nothing for the description to clarify. The baseline of 4 applies because the schema already fully covers parameter semantics.

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 and resource: lists GLM model ids from the configured Z.ai account. It also adds useful output semantics (one-line role, unknown ids listed bare), which makes it clearly distinct from sibling tools glm_ask and glm_review.

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?

The description makes the context clear: use this tool when you need to enumerate available model ids. It does not explicitly name alternatives or when-not-to-use, but the sibling tool names and the list-oriented wording make the intended usage obvious enough.

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

glm_reviewReview with GLMA

Review a change with a Z.ai GLM model (default GLM-5.3) and return a VERDICT: the reply is the reviewer's analysis and always ends with a final line that is exactly VERDICT: PASS or VERDICT: CHANGES_REQUIRED — the same vocabulary bin/glm-review reads, so a shell pipeline can consume the result. Pass the change as a unified diff and the requirement it was meant to implement as spec: review against intent is what catches silent scope-narrowing, and the reviewer is warned off both recorded pathologies — findings that are padded or fabricated, and work that is stubbed, mocked or hardcoded rather than implemented. A reply that is a bare verdict with no analysis behind it comes back as an error, never as a clean review. This server never runs git and inspects no repository state on its own: the diff comes from the caller, and files resolve exactly as glm_ask resolves them. Reviews default to reasoning 'high' — the depth the glm_ask routing guidance reserves for review and bug-hunting — and a different model than the one that wrote the code is worth choosing where you can, because a model re-reading its own work reliably under-reports.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoDirectory that relative file paths resolve against. Defaults to the server's cwd.
diffNoThe unified diff to review, as your tooling produced it. The server never runs git — the caller supplies the change under review, and this argument is how. Either diff or files must be present; with neither, the call is refused rather than answered with a verdict about nothing.
specNoWhat the change was meant to do — the requirement, ticket or plan it was written against. Reaches the reviewer verbatim. Review against intent is the only check on silent scope-narrowing, this loop's recorded failure mode; with no spec the reviewer can only infer intent from the diff itself.
filesNoOptional files as review context, resolved exactly as glm_ask resolves them (same confinement to the operator's roots, same per-model character budget, same notes): literal paths and/or glob patterns (e.g. "src/**/*.ts"). Each glob expands to its matching files, sorted and de-duplicated across the whole list; a pattern that matches nothing is reported in the response notes. A path that exists on disk is used literally even when it contains glob characters. Glob expansion skips node_modules, .git and build output by default; naming a directory in the pattern (node_modules/foo/**/*.d.ts) or setting GLM_MCP_GLOB_IGNORE overrides that. Relative paths — ./ and ../ prefixes included — resolve against 'cwd'.
modelNoGLM model id. Defaults to glm-5.3 (the frontier flagship); glm-5.3-flash and glm-4.6 are the fast routes, and glm_models lists every id the account offers with a one-line role.
reasoningNoReasoning depth — same levels as glm_ask, but the default here is 'high' rather than 'low': a review is the work the routing guidance reserves 'high' for, and a reviewer skimming on the 2,048-token 'low' budget is the rubber stamp with extra steps. Use 'max' (24,576 tokens) for a large or subtle change, and 'low' only for a re-check you expect to be mechanical. GLM-5.3 and glm-5.3-flash always reason, so 'low' is their shallowest setting.
max_tokensNoMax output tokens — a hard cap. The request never exceeds it; the thinking budget scales down to fit beneath it, always leaving room for the answer, but never below the API minimum of 1024. A cap below 2048 — the API's budget minimum plus the least room that still constitutes an answer — cannot hold both and is refused rather than silently raised; on GLM-5.3 and glm-5.3-flash, which always reason, the only fix is a higher cap. A cap over the model's published ceiling is likewise refused before anything is sent (131,072 for GLM-5.3). Omit it and the model's own default applies (65,536 for GLM-5.3). A review severed by too small a cap loses its verdict line and is returned as an error, so size it for the analysis plus the verdict.

TDQS

A4.6/5.0
Behavior5/5

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

With zero annotations, the description carries the full burden and discharges it thoroughly: it discloses the exact verdict line grammar, that a bare verdict is returned as an error, that the server never runs git and inspects no repository state, that calls with neither diff nor files are refused, and that the reviewer is explicitly warned against padded/fabricated findings and stubbed/mocked/hardcoded work. This is rich behavioral disclosure well beyond what any structured field provides.

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 description is long but front-loaded with the most critical fact — the exact VERDICT contract — before any parameter framing. Every sentence carries real content, from refusal behavior to the reasoning-depth default to the model-advice caveat. It is dense prose rather than concise prose, and a few points repeat what the schema already says, 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 7-parameter tool with no annotations and no output schema, this description is nearly complete: it specifies the return contract, error/refusal conditions, default model and reasoning level, cross-tool file-resolution semantics, and both recorded failure modes the reviewer is guarded against. The only deferrals are reasonable ones — glob-ignore overrides and character budgets live in the files parameter schema, and depth beyond routing is delegated to glm_ask's guidance.

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's own parameter descriptions are already unusually detailed, so the baseline is 3. The description adds genuine value on top: the rationale for the diff+spec pairing ('review against intent is what catches silent scope-narrowing') and the model-selection heuristic that a model re-reading its own work under-reports, which appears in no schema field. Some default and reasoning-guidance content is duplicated between description and schema, keeping this at 4 rather than 5.

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?

The description states a specific verb and resource — 'Review a change with a Z.ai GLM model' — and defines a concrete, distinctive output contract: a reply ending in exactly 'VERDICT: PASS' or 'VERDICT: CHANGES_REQUIRED'. This clearly distinguishes it from siblings glm_ask (asking) and glm_models (listing models) through the review-specific verdict vocabulary and the diff+spec input pairing.

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?

The description places glm_review within the glm_ask routing guidance ('the depth the glm_ask routing guidance reserves for review and bug-hunting') and gives actionable advice — supply a diff against spec rather than just a diff, and choose a different model than the one that wrote the code. However, it never explicitly states when to prefer glm_review over glm_ask or vice versa; that routing is inferred from the sibling names and the verdict contract rather than stated outright.

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

TDQS

A4.4/5.0
Disambiguation4/5

glm_ask and glm_review both send prompts to GLM, which could cause some overlap, but glm_review's strict VERDICT format and diff/spec input make its purpose clearly distinct. glm_models is wholly separate.

Naming Consistency4/5

glm_ask and glm_review follow a consistent verb-first pattern, while glm_models breaks it by using a noun instead of a verb like list_models. Minor deviation, but the prefix keeps the family recognizable.

Tool Count5/5

Three tools is within the ideal 3-15 range and each tool earns its place: one for general prompting, one for structured review, and one for model discovery. The scope is tightly focused.

Completeness5/5

For a GLM-oriented server, the surface covers the core needs: asking questions, reviewing changes against a spec, and listing available models. No obvious dead ends or missing operations within the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Gives Claude access to multiple AI models (Gemini, OpenAI, OpenRouter, Ollama) for enhanced development capabilities including extended reasoning, collaborative development, code review, and advanced debugging.
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables Claude Code (Anthropic Sonnet) to invoke Z.AI's GLM-4.6 model through a secondary Claude instance. Supports code generation, deep analysis, and general queries while maintaining file tracking and secure token management.
    1
  • A
    license
    Not graded
    quality
    D
    maintenance
    Exposes local Ollama instances as tools for Claude Code, allowing users to offload code generation, text drafting, and embedding tasks to local GPUs. It supports multi-turn conversations and model management through the Model Context Protocol.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/No-Compromise-AI/glm-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server