Skip to main content
Glama

glm-mcp

npm ci license

Ein MCP-Server, der die GLM-Modelle von Z.ai – GLM-5.3 und Geschwister – als Werkzeuge in Claude Code und Claude Desktop bereitstellt.

Claude Desktop legt seinen eigenen Modellanbieter fest: Wenn es sein eingebettetes Claude Code startet, erzwingt es ANTHROPIC_BASE_URL auf den Endpunkt von Anthropic und entfernt ANTHROPIC_API_KEY / ANTHROPIC_AUTH_TOKEN aus der Umgebung des Kindprozesses. GLM kann also keine Desktop-Sitzung steuern. Dieser Server geht den anderen Weg – GLM wird zu einem Werkzeug, das Claude mitten im Gespräch aufrufen kann.

Nützlich für:

  • Eine echte zweite Meinung. Ein unabhängiges Spitzenmodell, nicht dasselbe Modell zweimal gefragt.

  • Sehr großer Kontext. GLM-5.3 hat ein Fenster von 1.000.000 Token, sodass Sie ihm weit mehr Quellmaterial geben können, als in eine normale Sitzung passt.

  • Günstige Massenarbeit. Leiten Sie stupide Arbeit an glm-4.7 weiter und behalten Sie das teure Modell für das Denken.

Installation

Einmal registriert, benutzerbezogen, und es ist in jedem Projekt auf dem Rechner verfügbar – keine projektbezogene Einrichtung:

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

Oder aus einem lokalen Checkout:

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

Starten Sie Claude Code / Claude Desktop neu, damit es übernommen wird. Überprüfen Sie mit claude mcp list.

Erfordert Node 20 oder neuer und einen z.ai-API-Schlüssel mit Guthaben oder einen Coding Plan.

Related MCP server: CCGLM MCP Server

Anmeldedaten

Der Server kodiert niemals einen Schlüssel fest. Er löst einen aus, in dieser Reihenfolge:

  1. ZAI_API_KEY

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

  3. den api.z.ai-Schlüssel, den ZCode in ~/.zcode/v2/config.json speichert – nur wenn GLM_MCP_ALLOW_ZCODE_KEY=1 gesetzt ist

Schritt 3 ist bewusst optional. Er liest eine Anmeldeinformation, die zu einer anderen Anwendung gehört, und das sollte eine Entscheidung sein, die Sie treffen, und nicht ein Verhalten, das Sie entdecken. Alles läuft auf dem Rechner, der die Installation durchführt: Ihr Schlüssel, Ihr z.ai-Konto, Ihre Abrechnung.

Beachten Sie, dass das Start Plan-Token von ZCode hier nicht verwendbar ist – dieser Endpunkt ist Captcha-gesperrt für die ZCode-App und lehnt externe Clients mit 3007 ab. Sie benötigen einen api.z.ai-Schlüssel mit einem Coding Plan oder Guthaben darauf.

Verwendung

Sobald registriert, bitten Sie Claude, es zu verwenden. In der Praxis sagen Sie so etwas wie "verwende glm_ask, um src/auth auf Race Conditions zu prüfen" – aber der zugrunde liegende Aufruf sieht so aus:

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

Die Antwort trägt eine Fußzeile mit dem Modell, der Token-Nutzung und wie viel es nachgedacht hat:

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

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

Zwei Dinge, bei denen es wirklich gut ist:

  • Eine zweite Meinung, die widerspricht. Fragen Sie Claude und GLM dieselbe Frage und vergleichen Sie. Zwei Modelle, die sich uneinig sind, sind ein echtes Signal; dasselbe Modell zweimal gefragt, ist es meistens nicht.

  • Mehr Quelle, als passt. Mit einem 1M-Token-Fenster können Sie src/**/*.ts im Ganzen übergeben, anstatt eine Handvoll Dateien zu kuratieren.

Werkzeuge

glm_ask

arg

type

default

Hinweise

prompt

string

erforderlich

files

string[]

Dateien als Kontext: wörtliche Pfade und/oder Globs (src/**/*.ts, *.md, {lib,src}/*.ts)

cwd

string

Server-cwd

wogegen relative files aufgelöst werden

model

string

glm-5.3

jede ID aus glm_models

reasoning

none|low|high|max

low

höher ist langsamer

system

string

optionaler System-Prompt

max_tokens

number

8192

Ausgabegrenze

glm_models

Listet die Modell-IDs auf, die auf dem konfigurierten Konto verfügbar sind.

Denken

GLM-5.3 denkt immer. Eine Anfrage ohne Denkblock wird mit z.ai-Fehler 1210 abgelehnt, daher wird reasoning: "none" für dieses Modell stillschweigend auf "low" angehoben. Seine Geschwister (glm-5.2, glm-5-turbo, glm-4.6, glm-4.7) haben keine solche Einschränkung.

reasoning

Denkbudget

low

2.048 Token

high

8.192 Token

max

24.576 Token

max_tokens wird automatisch erhöht, um Platz für die Antwort zusätzlich zum Budget zu lassen.

Pfadbegrenzung

glm_ask liest nur innerhalb von Wurzeln, die der Betreiber festlegt. Ein Aufrufer kann innerhalb dieser eingrenzen; er kann sie weder wählen noch entkommen.

  • Wurzeln stammen aus GLM_MCP_ROOTS, durch Doppelpunkte getrennte absolute Pfade.

  • Wenn nicht gesetzt, ist die Wurzel das Verzeichnis, in dem der Server gestartet wurde. Claude startet einen Server pro Projekt, also ist jeder Server auf sein eigenes Projekt beschränkt und die meisten Setups benötigen überhaupt keine Konfiguration.

  • cwd muss innerhalb einer Wurzel aufgelöst werden. Wenn nicht, wird der Aufruf rundweg abgelehnt, nicht stillschweigend auf eine Wurzel eingeschränkt – eine stillschweigend leere Antwort ist schlimmer als ein Fehler, der erklärt, warum.

  • Der echte Pfad jeder Datei muss innerhalb einer Wurzel liegen, also zeigt ein Symlink innerhalb des Baums, der nach außen zeigt, nach außen und wird abgelehnt. Dies wird geprüft, bevor ein Glob läuft, sodass ein Muster, das außerhalb wurzelt, niemals traversiert.

  • Abgelehnte Pfade erscheinen in Notes genau wie fehlende Dateien, mit der Schreibweise, die Sie verwendet haben. Ein abgelehnter Eintrag lässt einen Aufruf, der auch gute Dateien nennt, niemals fehlschlagen.

Was auch immer die Wurzeln sagen, der Server liest niemals seine eigenen Anmeldedaten – ~/.config/zai/api-key, ~/.zcode/v2/config.json und /proc/self/environ – verglichen nach aufgelöstem echten Pfad statt nach Schreibweise.

GLM_MCP_ALLOW_ANY_PATH=1 schaltet die Begrenzung ab, bewusst und explizit, genau wie GLM_MCP_ALLOW_ZCODE_KEY funktioniert. Es erweitert die Wurzeln; es öffnet diese drei Dateien nicht wieder.

Upgrade auf 0.2.0

Wenn Sie Dateien über mehr als ein Projekt hinweg lesen, setzen Sie GLM_MCP_ROOTS in Ihrer MCP-Registrierung, bevor Sie upgraden. Jeder Server ist im Projekt verwurzelt, in dem er gestartet wurde. Wenn Sie also aus einem Projekt nach einer Datei in einem anderen fragen, funktionierte das vor 0.2.0 stillschweigend und wird danach abgelehnt. Die Registrierung liefert env: {}, also muss dies bewusst hinzugefügt werden:

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

Absolute Pfade sind ebenfalls begrenzt, aber das bricht weit weniger, als es klingt: eine Umfrage unter den eigenen Werkzeugen dieses Autors fand keinen Aufrufer, der sie übergibt.

Dateikontext

files akzeptiert wörtliche Pfade und Glob-Muster, frei gemischt. Treffer werden sortiert und über die gesamte Liste nach Dateiidentität dedupliziert, sodass überlappende Muster dieselbe Datei nie zweimal senden.

Unterstützte Syntax: *, **, ?, [a-z], [!a-z], {a,b} und \-Escapes.

  • . und .. werden gegen cwd aufgelöst, also funktionieren ./src/** und ../neighbour/src/**.

  • Ein Pfad, der auf der Festplatte existiert, wird wörtlich gelesen, auch wenn sein Name Metazeichen enthält – eine echte report[final].md wird gelesen, nicht musterabgeglichen.

  • Versteckte (Punkt-)Einträge werden nur abgeglichen, wenn das Muster den Punkt ausschreibt.

  • Ein Muster, das nichts findet, wird in Notes gemeldet, genau wie eine fehlende Datei.

  • Symlink-Verzeichnisse werden nur verfolgt, wenn das Muster eines explizit nennt (linked/*.ts). Wildcards folgen ihnen nie, und ein Link auf ein Verzeichnis wird nie als Datei aufgelistet.

  • Unter Windows verwenden Sie Schrägstriche: C:/src/**/*.ts und //server/share/src/*.ts werden als absolut behandelt. \ ist auf jeder Plattform das Escape-Zeichen.

Was Globs überspringen

Die Glob-Erweiterung überspringt node_modules, .git, dist, build, coverage, .next, .turbo, vendor und target, sodass **/*.ts Ihre Quelle abgleicht, anstatt 1.700 Typdefinitionen von Abhängigkeiten, die das Budget verdrängen.

Dies gilt nur für die Erweiterung – ein wörtliches node_modules/foo/x.d.ts geht unverändert durch. Ein Verzeichnis im Muster zu nennen, überschreibt den Übersprung ebenfalls, weil der Aufrufer danach gefragt hat: node_modules/foo/**/*.d.ts gleicht wie erwartet ab.

Setzen Sie GLM_MCP_GLOB_IGNORE auf eine durch Kommas getrennte Liste, um den Standard-Satz zu ersetzen (GLM_MCP_GLOB_IGNORE=dist,.venv); ein leerer Wert deaktiviert das Überspringen vollständig.

Grenzen

Jede Grenze stoppt die Operation, die sie erreicht hat, und sagt dies in Notes, wobei die Variable genannt wird, die sie gesetzt hat – nichts wird jemals stillschweigend abgeschnitten oder stillschweigend verworfen.

Grenze

Variable

Standard

Gesamte Kontextzeichen, einschließlich Header und Trennzeichen

GLM_MCP_MAX_FILE_CHARS

800.000

Dateigröße pro Datei, geprüft bevor die Datei gelesen wird

GLM_MCP_MAX_FILE_BYTES

5 MB

Glob-Walk-Tiefe

GLM_MCP_MAX_DEPTH

24

Pro Aufruf untersuchte Verzeichniseinträge

GLM_MCP_MAX_ENTRIES

200.000

Wanduhr-Budget für die Glob-Erweiterung

GLM_MCP_GLOB_TIMEOUT_MS

10.000

Gesamte {a,b}-Klammererweiterungen

GLM_MCP_MAX_BRACE_EXPANSIONS

1.024

Anforderungs-Timeout

GLM_MCP_TIMEOUT_MS

600.000

  • Nur reguläre Dateien werden gelesen. Eine FIFO, ein Gerät oder ein Socket wird abgelehnt, anstatt den Server bei einem Lesevorgang zu blockieren, der möglicherweise nie zurückkehrt.

  • Die Kürzung erfolgt an Codepunkten, sodass sie ein Emoji niemals in zwei Hälften teilt.

  • Fehlende, nicht lesbare und abgelehnte Dateien werden übersprungen und gemeldet, niemals fatal: ein schlechter Eintrag lässt einen Aufruf, der auch gute Dateien nennt, nicht fehlschlagen.

Fehler und Endpunkte

Die codierten Fehler von z.ai werden in etwas Umsetzbares übersetzt: 1113 (kein Guthaben), 1210 (Denken erforderlich), 3007 (falscher Anmeldedatentyp – siehe Anmeldedaten oben).

Anfragen gehen an https://api.z.ai/api/anthropic, sofern ZAI_BASE_URL nichts anderes sagt. Ihr Schlüssel wird an den Host gesendet, den es nennt, also zeigen Sie nur auf Endpunkte, denen Sie vertrauen.

Testen

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)

Alles außer smoke ist hermetisch und läuft in CI auf Node 20, 22 und 24. smoke macht Live-API-Aufrufe, wird also von Hand ausgeführt.

Jedes Akzeptanzkriterium wurde vor der Änderung geschrieben, die es abdeckt, und schlug gegen den Code fehl, für den es geschrieben wurde, also behauptet es das Verhalten, anstatt es zu beschreiben. Sie bauen echte Fixture-Bäume – echte Dateien, echte Symlinks, eine echte FIFO, ein echtes gefälschtes $HOME – und laufen gegen Kindprozesse, wo eine Einstellung vorhanden sein muss, bevor das Modul geladen wird.

Veröffentlichungen

Veröffentlicht aus CI mit Provenienz über npm Trusted Publishing – es gibt kein langlebiges npm-Token. Jede Veröffentlichung wird gestaffelt und erfordert, dass ein Betreuer sie mit 2FA genehmigt, bevor sie installierbar wird, und ihre Provenienz bindet das veröffentlichte Tarball an dieses Repository und den Workflow, der es erstellt hat.

Autor

Erstellt von Jerold Billings, Gründer – No Compromise AI, LLC.

Fehler und Fragen: Öffnen Sie ein Issue. Sicherheitsprobleme: Bitte verwenden Sie

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