Skip to main content
Glama

glm-mcp

npm ci license

MCP-сервер, который предоставляет модели GLM от Z.ai — GLM-5.3 и её собратьев — как инструменты внутри Claude Code и Claude Desktop.

Claude Desktop закрепляет собственного провайдера моделей: когда он запускает встроенный Claude Code, он принудительно устанавливает ANTHROPIC_BASE_URL на конечную точку Anthropic и удаляет ANTHROPIC_API_KEY / ANTHROPIC_AUTH_TOKEN из окружения дочернего процесса. Поэтому GLM не может управлять сеансом рабочего стола. Этот сервер идёт другим путём — GLM становится инструментом, который Claude может вызывать в середине разговора.

Полезно для:

  • Настоящего второго мнения. Независимая передовая модель, а не та же модель, спрошенная дважды.

  • Очень большого контекста. У GLM-5.3 окно в 1 000 000 токенов, так что вы можете передать ей гораздо больше исходного материала, чем помещается в обычный сеанс.

  • Дешёвой массовой работы. Направляйте черновую работу на glm-4.7 и оставляйте дорогую модель для рассуждений.

Установка

Зарегистрируйте его один раз в области пользователя, и он будет доступен в каждом проекте на машине — без настройки для каждого проекта:

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

Или из локальной копии репозитория:

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

Перезапустите Claude Code / Claude Desktop, чтобы он был подхвачен. Проверьте с помощью claude mcp list.

Требуется Node 20 или новее, а также ключ API z.ai с кредитом или Coding Plan.

Related MCP server: CCGLM MCP Server

Учётные данные

Сервер никогда не зашивает ключ. Он определяет его по порядку:

  1. ZAI_API_KEY

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

  3. ключ api.z.ai, который ZCode хранит в ~/.zcode/v2/config.jsonтолько когда установлено GLM_MCP_ALLOW_ZCODE_KEY=1

Шаг 3 включён намеренно. Он читает учётные данные, принадлежащие другому приложению, и это должно быть вашим решением, а не поведением, о котором вы узнаёте задним числом. Всё работает на машине, где выполняется установка: ваш ключ, ваш аккаунт z.ai, ваш биллинг.

Обратите внимание, что токен Start Plan от ZCode здесь не подходит — эта конечная точка защищена капчей для приложения ZCode и отклоняет внешних клиентов с кодом 3007. Вам нужен ключ api.z.ai с Coding Plan или кредитом на нём.

Использование

После регистрации попросите Claude использовать его. На практике вы говорите что-то вроде "используй glm_ask, чтобы проверить src/auth на гонки" — но лежащий в основе вызов выглядит так:

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

Ответ содержит нижний колонтитул с моделью, использованием токенов и объёмом рассуждений:

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

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

Две вещи, в которых он действительно хорош:

  • Второе мнение, которое не соглашается. Задайте один и тот же вопрос Claude и GLM и сравните. Две модели, которые не соглашаются, — это реальный сигнал; та же модель, спрошенная дважды, в основном нет.

  • Больше исходников, чем помещается. С окном в 1M токенов вы можете передать ему src/**/*.ts целиком вместо того, чтобы подбирать несколько файлов.

Инструменты

glm_ask

аргумент

тип

по умолчанию

примечания

prompt

string

обязательный

files

string[]

файлы для включения в контекст: буквальные пути и/или глобы (src/**/*.ts, *.md, {lib,src}/*.ts)

cwd

string

cwd сервера

относительно чего разрешаются относительные files

model

string

glm-5.3

любой идентификатор из glm_models

reasoning

none|low|high|max

low

выше — медленнее

system

string

необязательный системный промпт

max_tokens

number

8192

ограничение вывода

glm_models

Перечисляет идентификаторы моделей, доступных на настроенном аккаунте.

Рассуждения

GLM-5.3 всегда рассуждает. Запрос без блока мышления отклоняется с ошибкой z.ai 1210, поэтому reasoning: "none" для этой модели молча повышается до "low". Её собратья (glm-5.2, glm-5-turbo, glm-4.6, glm-4.7) не имеют такого ограничения.

reasoning

бюджет мышления

low

2 048 токенов

high

8 192 токена

max

24 576 токенов

max_tokens автоматически повышается, чтобы оставить место для ответа сверх бюджета.

Ограничение путей

glm_ask читает только внутри корней, которые задаёт оператор. Вызывающий может сужать внутри них; он не может ни выбирать их, ни выходить за их пределы.

  • Корни берутся из GLM_MCP_ROOTS, разделённых двоеточием абсолютных путей.

  • Если не задано, корнем является каталог, в котором был запущен сервер. Claude запускает один сервер на проект, поэтому каждый сервер ограничен своим проектом, и большинству конфигураций вообще ничего не нужно.

  • cwd должен разрешаться внутри корня. Если нет, вызов отклоняется полностью, а не молча сужается до корня — молча пустой ответ хуже, чем ошибка, объясняющая причину.

  • Реальный путь каждого файла должен попадать внутрь корня, поэтому символическая ссылка внутри дерева, указывающая наружу, разрешается наружу и отклоняется. Это проверяется до обхода глоба, поэтому шаблон, коренящийся вне корня, никогда не проходит.

  • Отклонённые пути появляются в Notes точно так же, как отсутствующие файлы, с указанием использованного вами написания. Одна отклонённая запись никогда не приводит к сбою вызова, в котором также указаны хорошие файлы.

Что бы ни говорили корни, сервер никогда не читает свои собственные учётные данные — ~/.config/zai/api-key, ~/.zcode/v2/config.json и /proc/self/environ — сравнивая по разрешённому реальному пути, а не по написанию.

GLM_MCP_ALLOW_ANY_PATH=1 отключает ограничение, намеренно и явно, тем же способом, что и GLM_MCP_ALLOW_ZCODE_KEY. Он расширяет корни; он не открывает заново эти три файла.

Обновление до 0.2.0

Если вы читаете файлы из более чем одного проекта, установите GLM_MCP_ROOTS в вашей регистрации MCP перед обновлением. Каждый сервер укоренён в проекте, в котором он был запущен, поэтому запрос из одного проекта о файле в другом молча работал до 0.2.0 и отклоняется после него. Регистрация поставляется с env: {}, поэтому это нужно добавить намеренно:

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

Абсолютные пути тоже ограничены, но это ломает гораздо меньше, чем звучит: опрос собственных инструментов этого автора не нашёл ни одного вызывающего, который их передаёт.

Контекст файлов

files принимает буквальные пути и glob-шаблоны, свободно смешанные. Совпадения сортируются и дедуплицируются по идентичности файла во всём списке, поэтому перекрывающиеся шаблоны никогда не отправляют один и тот же файл дважды.

Поддерживаемый синтаксис: *, **, ?, [a-z], [!a-z], {a,b} и escape-символ \.

  • . и .. разрешаются относительно cwd, поэтому ./src/** и ../neighbour/src/** работают.

  • Путь, существующий на диске, читается буквально, даже если его имя содержит метасимволы — реальный report[final].md читается, а не сопоставляется с шаблоном.

  • Скрытые (точечные) записи сопоставляются только тогда, когда шаблон явно указывает точку.

  • Шаблон, не дающий совпадений, сообщается в Notes, точно так же, как отсутствующий файл.

  • Символические ссылки на каталоги следуют только тогда, когда шаблон явно называет их (linked/*.ts). Подстановочные знаки никогда не следуют им, и ссылка на каталог никогда не перечисляется как файл.

  • В Windows используйте косую черту: C:/src/**/*.ts и //server/share/src/*.ts распознаются как абсолютные. \ — escape-символ на всех платформах.

Что пропускают глобы

Развёртывание glob пропускает node_modules, .git, dist, build, coverage, .next, .turbo, vendor и target, поэтому **/*.ts соответствует вашему исходному коду, а не 1700 определениям типов зависимостей, забивающим бюджет.

Это относится только к развёртыванию — буквальный node_modules/foo/x.d.ts проходит без изменений. Указание каталога в шаблоне также отменяет пропуск, потому что вызывающий запросил это: node_modules/foo/**/*.d.ts сопоставляется как ожидается.

Установите GLM_MCP_GLOB_IGNORE в список, разделённый запятыми, чтобы заменить набор по умолчанию (GLM_MCP_GLOB_IGNORE=dist,.venv); пустое значение полностью отключает пропуск.

Лимиты

Каждый лимит останавливает операцию, которая его достигла, и сообщает об этом в Notes, называя переменную, которая его установила — ничего никогда не усекается молча и не отбрасывается молча.

Лимит

Переменная

По умолчанию

Всего символов контекста, включая заголовки и разделители

GLM_MCP_MAX_FILE_CHARS

800 000

Размер файла, проверяется до чтения файла

GLM_MCP_MAX_FILE_BYTES

5 МБ

Глубина обхода glob

GLM_MCP_MAX_DEPTH

24

Записей каталога, проверяемых за вызов

GLM_MCP_MAX_ENTRIES

200 000

Бюджет времени на развёртывание glob

GLM_MCP_GLOB_TIMEOUT_MS

10 000

Всего развёртываний {a,b} фигурных скобок

GLM_MCP_MAX_BRACE_EXPANSIONS

1 024

Тайм-аут запроса

GLM_MCP_TIMEOUT_MS

600 000

  • Читаются только обычные файлы. FIFO, устройство или сокет отклоняются, а не блокируют сервер на чтении, которое может никогда не вернуться.

  • Усечение происходит по кодовым точкам, поэтому оно никогда не разрывает эмодзи пополам.

  • Отсутствующие, нечитаемые и отклонённые файлы пропускаются и сообщаются, но никогда не являются фатальными: одна плохая запись не приводит к сбою вызова, в котором также указаны хорошие файлы.

Ошибки и конечные точки

Кодированные ошибки z.ai переводятся в действенные сообщения: 1113 (нет баланса), 1210 (требуется рассуждение), 3007 (неверный тип учётных данных — см. Учётные данные выше).

Запросы идут на https://api.z.ai/api/anthropic, если ZAI_BASE_URL не говорит иное. Ваш ключ отправляется на любой хост, который он называет, поэтому указывайте его только на доверенные конечные точки.

Тестирование

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)

Всё, кроме smoke, герметично и работает в CI на Node 20, 22 и 24. smoke выполняет живые API-вызовы, поэтому запускается вручную.

Каждый приёмочный шлюз был написан до изменения, которое он контролирует, и не проходил против кода, для которого был написан, поэтому он утверждает поведение, а не описывает его. Они строят реальные деревья фикстур — реальные файлы, реальные символические ссылки, реальный FIFO, реальный фальшивый $HOME — и запускаются против дочерних процессов, где настройка должна быть на месте до загрузки модуля.

Релизы

Публикуются из CI с provenance через npm trusted publishing — долгоживущего npm-токена нет. Каждый релиз проходит стадирование и требует одобрения мейнтейнера с 2FA, прежде чем станет устанавливаемым, а его provenance связывает опубликованный тарбол с этим репозиторием и рабочим процессом, который его собрал.

Автор

Создано Джерольдом Биллингсом, основателем — No Compromise AI, LLC.

Ошибки и вопросы: откройте issue. Проблемы безопасности: пожалуйста, используйте

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