Skip to main content
Glama
ufo5260987423

scheme-langserver-bridge

scheme-langserver-bridge

MCP (Model Context Protocol) bridge that connects Kimi Code CLI to scheme-langserver, giving Kimi real-time language intelligence when working with Scheme code.

What this does

When you ask Kimi to write, refactor, or explain Scheme code, Kimi can now call scheme-langserver behind the scenes to obtain:

  • Precise type information — via textDocument/hover

  • Scope-aware completions — via textDocument/completion (includes local let and lambda bindings)

  • Exact definition locations — via textDocument/definition

  • Cross-reference search — via textDocument/references

  • Syntax / semantic diagnostics — via textDocument/publishDiagnostics

  • Safe rename edits — via textDocument/rename (server support is on the roadmap)

  • Function signatures — via textDocument/signatureHelp (server support is on the roadmap)

  • Workspace-wide symbol search — via workspace/symbol (requires scheme-langserver ≥ 2.1.0 (tested up to 2.1.10))

  • Code actions — via textDocument/codeAction (server support is on the roadmap)

Important: You (the user) never interact with scheme-langserver directly. Kimi invokes the bridge tools automatically when it judges that precise code information would help its reasoning.

Related MCP server: kimi-code-mcp

Known limitations of scheme-langserver

scheme-langserver is actively developed and not infallible:

  • Type inference is experimental and may be wrong or hang on complex code.

  • Macro support (syntax-case, syntax-rules) is incomplete. Production builds fall back to hand-written rules.

  • Analysis of unfinished code is best-effort.

  • Implementation-specific Chez Scheme extensions may not be recognized.

  • workspace/symbol requires scheme-langserver ≥ 2.1.0 (tested up to 2.1.10).

  • textDocument/rename, textDocument/signatureHelp, and textDocument/codeAction are exposed by the bridge but still on the server's roadmap; the server may return "method not found".

Kimi is expected to treat LSP output as a reference, cross-check it against its own training knowledge, and gracefully fall back when the server returns errors or nonsense.

Installation

Via PyPI (any OS)

Requires Python 3.12+ and a local scheme-langserver executable.

pip install scheme-langserver-bridge

Or with uv:

uv pip install scheme-langserver-bridge

Via Nix

nix run .#scheme-langserver-bridge

Or enter the development shell:

nix develop
uv sync --extra dev

From source

git clone <this-repo>
cd scheme-langserver-bridge
uv sync --extra dev

Configuring Kimi

Add the bridge as an MCP server:

kimi mcp add --transport stdio scheme-langserver -- \
  python3 -m scheme_langserver_bridge

Or manually edit ~/.kimi/mcp.json:

{
  "mcpServers": {
    "scheme-langserver": {
      "command": "python3",
      "args": ["-m", "scheme_langserver_bridge"],
      "env": {
        "SCHEME_LANGSERVER_PATH": "/path/to/scheme-langserver/run"
      }
    }
  }
}

Configuration

Configuration is resolved in the following priority (highest first):

  1. Project config — .scheme-langserver.toml (or .scheme-langserver.json) in the project root

  2. Environment variables

  3. Built-in defaults

Project configuration file

Create .scheme-langserver.toml in your project root:

langserver_path = "/nix/store/.../bin/scheme-langserver"
multi_thread = "enable"
type_inference = "enable"
top_environment = "R6RS"
cache_path = ".scheme-langserver-cache"
auto_update = true
max_memory_mb = 4096
max_cpu_seconds = 300

Supported fields:

Field

Type

Description

langserver_path

string

Override the scheme-langserver executable path

multi_thread

string

enable / disable

type_inference

string

enable / disable

top_environment

string

R6RS / R7RS / s7 / goldfish / fluent (Ansys Fluent Scheme, requires scheme-langserver ≥ 2.1.10)

log_path

string

Override the log file path

cache_path

string

Directory for workspace FASL cache (scheme-langserver 2.1.3+; default: .scheme-langserver-cache in project root)

auto_update

bool

Allow auto-download when no executable is found

max_memory_mb

int

Sub-process memory limit in MB (default: 2048)

max_cpu_seconds

int

Sub-process CPU time limit in seconds (default: 180)

Auto-download

If no scheme-langserver executable is found locally, the bridge can automatically download the latest release from GitHub:

  • Uses GitHub's static redirect URL (releases/latest/download/...) with HEAD requests to detect the latest version without consuming API rate limits.

  • Downloads are cached to ~/.cache/scheme-langserver-bridge/versions/<version>/.

  • Version-check results are cached with a 1-hour TTL.

  • Controlled by auto_update in project config or SCHEME_LANGSERVER_AUTO_UPDATE env var (default true).

  • Currently supports Linux x86_64 glibc only. Other platforms will receive a manual-installation hint.

Environment variables

Variable

Description

Default

SCHEME_LANGSERVER_PATH

Path to the scheme-langserver executable

auto-discover

SCHEME_LANGSERVER_LOG_PATH

Log file path

.scheme-langserver.log in cwd

SCHEME_LANGSERVER_MULTI_THREAD

Multi-threading enable / disable

enable

SCHEME_LANGSERVER_TYPE_INFERENCE

Type inference enable / disable

enable

SCHEME_LANGSERVER_TOP_ENVIRONMENT

Top-level environment: R6RS / R7RS / s7 / goldfish / fluent (Ansys Fluent Scheme, requires scheme-langserver ≥ 2.1.10)

R6RS

SCHEME_LANGSERVER_CACHE_PATH

Directory for workspace FASL cache (scheme-langserver 2.1.3+; default: .scheme-langserver-cache in project root)

.scheme-langserver-cache in project root

SCHEME_LANGSERVER_TIMEOUT

Request timeout in seconds

30.0

SCHEME_LANGSERVER_COMPLETION_TIMEOUT

Completion request timeout in seconds

30.0

SCHEME_LANGSERVER_MAX_MEMORY_MB

Sub-process memory limit in MB

2048

SCHEME_LANGSERVER_MAX_CPU_SECONDS

Sub-process CPU time limit in seconds

180

SCHEME_LANGSERVER_AUTO_UPDATE

Allow auto-download when no executable is found

true

SCHEME_BRIDGE_LOGLEVEL

Bridge log level: DEBUG / INFO / WARNING / ERROR

INFO

SCHEME_BRIDGE_REPORT_DIR

Default directory for debug crash reports

current working dir

Resource Limits

The bridge applies hard resource limits to the scheme-langserver child process via Unix setrlimit:

  • Memory (RLIMIT_AS): capped at SCHEME_LANGSERVER_MAX_MEMORY_MB (default 2048 MB). If the server tries to allocate beyond this limit, the OS will deny the allocation.

  • CPU time (RLIMIT_CPU): capped at SCHEME_LANGSERVER_MAX_CPU_SECONDS (default 180 s). If the server consumes more CPU time, the kernel sends SIGXCPU and terminates it.

  • Core dumps (RLIMIT_CORE): disabled to avoid filling disk on crashes.

Timeout and force-kill behavior

If an LSP request exceeds its timeout (default 30 s, or the completion-specific timeout):

  1. The bridge first terminates (SIGTERM) the scheme-langserver process.

  2. It waits up to 3 seconds for graceful exit.

  3. If the process is still alive, it is killed (SIGKILL).

  4. All pending requests receive a timeout error so Kimi can fall back to its own knowledge.

Crash detection and recovery

The bridge monitors the LSP process:

  • If the process exits unexpectedly (stdout EOF, stderr close), the bridge marks it as crashed.

  • Any subsequent tool call returns an error telling Kimi to call lsp_shutdown followed by lsp_initialize to restart the server.

  • On shutdown signals (SIGINT, SIGTERM), the bridge gracefully stops the LSP server before exiting.

Debug reporting

When scheme-langserver crashes or behaves abnormally, the bridge automatically generates a debug report containing:

  • LSP traffic log (ready-for-analyse.log) — compatible with upstream replay scripts

  • Open file snapshots

  • Server stderr and own log

  • Environment metadata (versions, args, diagnostics)

You can also manually export a report at any time:

lsp_export_debug_report(output_path="/optional/path")

⚠️ Reports contain your source code. Review before posting to a public issue tracker.

Reports are saved to SCHEME_BRIDGE_REPORT_DIR (or the current working directory) as: scheme-langserver-debug-report-YYYYMMDD-HHMMSS/

Usage Examples

Below are typical Kimi conversations that trigger LSP tools automatically:

1. "帮我看看这个 factorial 函数的定义在哪里"

Kimi will call:

lsp_definition(file_path="/project/math.scm", line=5, character=9)

And receive the exact file, line, and column where factorial is defined, e.g.:

{
  "uri": "file:///project/utils.scm",
  "range": {
    "start": { "line": 12, "character": 7 },
    "end": { "line": 12, "character": 16 }
  }
}

2. "补全这行代码"

When your cursor is inside a let binding, Kimi calls:

lsp_complete(file_path="/project/main.scm", line=8, character=14)

The result includes local bindings (e.g., n, acc) that a plain text search would miss:

[
  { "label": "factorial", "kind": 3 },
  { "label": "n", "kind": 6 },
  { "label": "acc", "kind": 6 }
]

3. "这个变量是什么类型"

Kimi calls:

lsp_hover(file_path="/project/main.scm", line=4, character=12)

And gets the inferred type signature and documentation:

{
  "contents": [
    "```scheme\n(: factorial (-> integer? integer?))\n```",
    "Compute n! recursively."
  ]
}

4. Switching scheme-langserver executables

To test a local development build of scheme-langserver, pass langserver_path to lsp_initialize or lsp_restart:

lsp_restart(langserver_path="/home/dev/scheme-langserver/run")

The bridge will use that executable and reopen all tracked documents. This is useful when iterating on scheme-langserver itself.

Available MCP Tools

All tools are prefixed with lsp_:

Tool

Purpose

lsp_initialize

Start scheme-langserver for a project root

lsp_open

Open a file so the server can analyze it

lsp_change

Push updated file contents to the server

lsp_close

Close a file

lsp_restart

Restart scheme-langserver and reopen tracked documents

lsp_hover

Get type/docs for a symbol at a position

lsp_complete

Get completion candidates at a position

lsp_definition

Find where a symbol is defined

lsp_references

Find all references to a symbol

lsp_rename

Compute workspace edits to rename a symbol

lsp_signature

Get function signature help

lsp_document_symbol

List all symbols in a file

lsp_workspace_symbol

Search symbols across the workspace

lsp_code_action

Get quick fixes / refactorings for a range

lsp_diagnostics

Get errors and warnings (critical for catching unmatched brackets / tokenizer failures in Scheme)

lsp_export_debug_report

Export a debug report for upstream issue reporting

NixOS Specific Notes

  • Enter the development environment with nix develop.

  • ruff and pyright must be installed through nixpkgs (they are included in the dev shell via uv / pyproject.toml dev dependencies).

  • On NixOS, the bridge will pick up scheme-langserver from PATH if it is installed via nixpkgs.

Development

nix develop          # enter dev shell
uv sync --extra dev  # install Python deps
pytest               # run tests
ruff check --fix     # lint
pyright              # type check

Architecture

Kimi CLI  <--MCP (stdio)-->  scheme-langserver-bridge  <--LSP (stdio)-->  scheme-langserver

The bridge is a thin Python layer that:

  1. Spawns scheme-langserver as a subprocess with configurable resource limits.

  2. Speaks JSON-RPC 2.0 over stdio with the LSP server.

  3. Exposes LSP operations as MCP tools for Kimi to call.

  4. Manages document sync, timeouts, crash detection, and graceful shutdown.

Available Tools

17 tools
lsp_changeA

Notify the language server that a file has changed (like pressing Save).

Send the new full text of the file. This keeps the server's internal state in sync with the actual file contents.

When to use: IMMEDIATELY after you modify a Scheme file via filesystem tools (WriteFile/StrReplaceFile). If you skip this step, subsequent diagnostics and queries will operate on stale content.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output 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 burden of behavioral disclosure. It discloses the effect (syncs server state) and the consequence of not calling it (stale diagnostics), but does not describe side effects like whether it triggers re-diagnostics or requires an active session. Still, it adds significant behavioral context.

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 well-structured with a clear first sentence followed by a when-to-use section. It's appropriately concise, though the warning could be slightly tighter. The key information is front-loaded.

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?

Given the simple tool with two required parameters and an output schema, the description covers the essential context: what it does, when to use it, and the parameter semantics. It lacks details about return values, but the output schema likely handles that, keeping completeness high.

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 0%, so the description must compensate. It does by explaining that 'text' is the new full text of the file, which clarifies the expected format. However, it doesn't specify the path format or encoding of file_path, but given the simplicity, a 4 is justified.

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 clearly states that it notifies the server of a file change by sending the full text, and explicitly frames it as the equivalent of pressing Save. This is distinct from other lsp_* tools like lsp_open or lsp_close, making its purpose unambiguous.

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

Usage Guidelines5/5

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

It provides explicit when-to-use guidance: immediately after modifying a Scheme file via filesystem tools, and warns of stale content if skipped. This makes the usage context crystal clear and helps the agent decide when to invoke it over alternatives.

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

lsp_closeA

Close a file in the language server.

When to use: When you are completely done with a file or at session end. Do NOT close files just because you paused editing; frequent open/close wastes server resources.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It does add a useful performance caveat about frequent open/close cycles, but it does not disclose whether unsaved edits are affected, whether close is idempotent, or what happens if the file is not currently open. This is a meaningful gap for an operation without annotation support.

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?

The description is short and well-structured: a one-line action statement followed by bolded usage guidance. Every sentence adds value, and the critical behavioral caution is placed prominently.

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?

For a simple one-parameter close operation with an output schema available, the description covers the main invocation contexts and the primary anti-pattern. It does not mention error behavior or require the file to be open explicitly, but those are minor omissions given the simplicity of the tool.

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 0%, and the description does not explain file_path format (e.g., URI vs filesystem path, absolute vs relative). The single parameter is nevertheless made reasonably clear by its name and title plus the tool's 'file' reference, so semantics are inferable but not enriched beyond the schema.

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 clearly states the specific action ('Close a file') and the resource ('the language server'). It is immediately distinguishable from sibling tools like lsp_open, lsp_change, and lsp_shutdown because close is a distinct operation in the same lifecycle.

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

Usage Guidelines5/5

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

It gives explicit when-to-use guidance ('completely done with a file or at session end') and an explicit when-not-to-use instruction ('Do NOT close files just because you paused editing'). It also explains the rationale (wasted server resources), making the routing decision easy for an agent.

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

lsp_code_actionB

Get code actions (quick fixes, refactorings) for a range.

Limitation: codeAction is on the scheme-langserver roadmap and may return -32601 "method not found" or behave incompletely.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_lineYes
file_pathYes
start_lineYes
end_characterYes
start_characterYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It does disclose a limitation ('may return -32601 method not found or behave incompletely'), which is a positive behavioral note. However, it does not state whether the operation is read-only, describe the response format, or mention any side effects, leaving significant behavioral gaps.

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?

The description is two sentences with zero waste. The main purpose is front-loaded in the first sentence, and the limitation is clearly separated in the second. It is appropriately sized and well-structured.

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

Completeness2/5

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

Given the tool has 5 required parameters, no annotations, and an output schema, the description is minimal. It does not explain parameter semantics, prerequisites (e.g., server initialization), or the expected output. The limitation note is the only extra context, making it insufficient for an agent to call the tool correctly without additional assumptions.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It only says 'for a range,' which hints at start/end positions but does not explain the individual parameters (file_path, line/character numbers) or coordinate conventions. The parameter names are somewhat self-explanatory, but the description adds no meaningful detail beyond the schema.

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 clearly states the operation: 'Get code actions (quick fixes, refactorings) for a range.' This specifies the verb, resource, and scope. While it doesn't explicitly differentiate from sibling tools like lsp_rename, the name and description are distinct enough for an agent to identify the purpose.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus other LSP tools. The only additional note is a limitation about potential -32601 errors, which addresses reliability rather than usage context. No alternatives, exclusions, or prerequisites are mentioned.

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

lsp_completeA

Trigger auto-completion at the cursor position.

Like pressing Ctrl+Space in an IDE. Returns identifiers available in the current scope, including local bindings (let, lambda parameters) that may not be obvious from a simple text search.

Confidence: MEDIUM. The list may miss identifiers generated by macros.

ParametersJSON Schema
NameRequiredDescriptionDefault
lineYes
characterYes
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full transparency burden. It does well by explaining what is returned (scope-aware identifiers) and by disclosing a meaningful limitation: confidence is MEDIUM and macro-generated identifiers may be missed. This goes beyond the basic action and gives the agent realistic expectations.

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?

The description is compact and well-structured: a one-line action, a clarifying analogy, the behavior, and a caveat. Every sentence earns its place, and the most important information appears first. There is no redundancy or filler.

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

Completeness3/5

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

The description covers the main behavior, scope-awareness, and a confidence caveat, and an output schema exists for return values. The notable gap is the missing coordinate-system context for line and character parameters, which is important for correctly invoking an LSP completion request. Overall it is usable but not fully complete.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, but it does not explain line and character semantics. It only says 'at the cursor position,' leaving ambiguous whether coordinates are zero-based, whether UTF-16 code units are used, or how malformed positions should fail. Self-explanatory parameter names help slightly, but the LSP-specific conventions are undocumented.

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: 'Trigger auto-completion at the cursor position' and clarifies the result with 'Returns identifiers available in the current scope.' It distinguishes itself from text-search and hover tools by noting local bindings that would not appear in a simple text search. This is clearly a completion tool, not a lookup or navigation tool.

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 analogy 'Like pressing Ctrl+Space in an IDE' gives clear context for when to invoke the tool: when the user wants code completion at a specific location. The mention of local bindings also implicitly steers agents away from naive text search. However, it does not explicitly name alternative sibling tools or state when not to use it, so it stops short of full exclusion guidance.

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

lsp_definitionB

Go to Definition: jump to where the symbol is defined.

Like pressing F12 in an IDE. Returns file URI, line, and column.

Confidence: HIGH. Reliable for locating definitions across files.

ParametersJSON Schema
NameRequiredDescriptionDefault
lineYes
characterYes
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that it is reliable across files and states the return format (file URI, line, column). However, it does not mention error cases, prerequisites (e.g., file must be open), or any side effects, which for a read-like operation is a minor gap but still leaves some uncertainty.

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 brief and front-loaded with the core purpose. The analogy and confidence note are efficient and add value without bloat. The sentence order is logical, moving from action to analogy to output to confidence.

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

Completeness3/5

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

For a simple tool, the description covers the core action and output, but it omits parameter semantics and any caveats about LSP state (e.g., need for initialization). Given the tool has an output schema, return format is partly handled, but the missing parameter explanation leaves a notable gap for a 3-parameter tool with 0% schema coverage.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain what file_path, line, and character represent. It implies they are coordinates by mentioning return line/column, but never states that these parameters specify the symbol's location. An agent must infer their meaning from context, which is insufficient given no schema descriptions.

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 clearly states the verb 'jump to' and resource 'definition', and adds the analogy 'Like pressing F12 in an IDE' which makes the intent unambiguous. It doesn't explicitly contrast with siblings like lsp_references, but the definition vs references distinction is implicit and clear enough for an agent to differentiate.

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

Usage Guidelines3/5

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

The description implies when to use it (when you need a definition) via the F12 analogy, but provides no explicit guidance on when not to use it or mention of alternatives like lsp_references or lsp_hover. It leaves the selection to inference, which is adequate but not proactive.

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

lsp_diagnosticsA

Get diagnostic messages (errors, warnings) from the language server.

When to use: After lsp_change to check for errors, like IDE real-time linting. Also useful before finishing a task to ensure no errors were introduced.

Why this matters for Scheme: S-expressions are catastrophically sensitive to bracket balance. A single missing or extra parenthesis can render the entire file unparseable. Diagnostics will catch unmatched brackets, tokenizer errors, and structural syntax failures with high reliability — things LLMs often miss by eye. scheme-langserver 2.1.2+ restored clear bracket-mismatch diagnostics (unclosed parenthesis, unexpected close bracket) in the fault-tolerant tokenizer. Always pull diagnostics after significant edits.

Confidence: HIGH for basic syntax (brackets, undefined ids). MEDIUM/LOW for semantic errors and implementation-specific extensions (Chez-specific forms may be falsely flagged).

Args: file_path: If provided, returns diagnostics for that file only. If omitted, returns diagnostics for all open files.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden — and it delivers richly. It discloses confidence levels per diagnostic class (HIGH for syntax, MEDIUM/LOW for semantics), explains the bracket-mismatch behavior and the scheme-langserver version dependency, and warns about false positives for Chez-specific forms. This is exemplary behavioral disclosure.

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

Conciseness3/5

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

The critical 'When to use' and parameter semantics are well front-loaded, but the 'Why this matters for Scheme' section is verbose — several sentences of background and version history that could be tightened. Every sentence adds some value, but the description is longer than strictly necessary.

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 read-only tool with a single optional parameter and an output schema already present, the description is more than complete. It covers the one param exhaustively, the behavioral caveats, confidence, and usage context — nothing an agent needs to invoke it correctly is missing.

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

Parameters5/5

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

Schema description coverage is 0%, yet the description fully compensates by explaining the file_path semantics: providing it scopes diagnostics to one file, omitting it returns diagnostics for all open files. This adds meaning the schema alone (just a nullable string) cannot convey.

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 ('Get diagnostic messages (errors, warnings) from the language server'), and the LSP-specific context clearly separates it from sibling operations like hover, complete, and definition. Purpose is unambiguous.

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

Usage Guidelines5/5

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

Explicit 'When to use' section names the sibling lsp_change as the trigger ('After lsp_change to check for errors'), gives a task-completion use case, and ends with a firm directive ('Always pull diagnostics after significant edits'). Usage guidance is complete and actionable.

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

lsp_document_symbolA

Show the file's symbol outline (functions, variables, macros).

Like the Outline / Structure panel in an IDE.

Confidence: MEDIUM. Symbols generated by macros may be missing.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does add a useful behavioral caveat: 'Confidence: MEDIUM. Symbols generated by macros may be missing.' However, it does not disclose preconditions such as requiring LSP initialization or an open file, nor explicitly confirm the read-only nature beyond the verb 'Show.'

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?

Two short sentences plus a bolded confidence note. The main action is front-loaded, the IDE analogy is useful, and every sentence earns its place without redundancy.

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

Completeness3/5

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

The tool is simple and the output schema exists, so return values are covered. The description gives purpose and a limitation, but omits usage guidance, parameter semantics, and preconditions like initialization or file-open requirements, leaving noticeable gaps for an agent.

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

Parameters2/5

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

Schema description coverage is 0%, so the description should compensate. It only ties file_path to 'the file's' outline, adding minimal meaning; it does not explain path format, whether the file must be open, or how file_path relates to other LSP state.

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: 'Show the file's symbol outline (functions, variables, macros).' It clearly distinguishes itself from lsp_workspace_symbol by scoping to a single file, so an agent can tell which tool to use without inspecting schemas.

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

Usage Guidelines3/5

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

The analogy to an IDE Outline/Structure panel gives a clear implied use case, but the description never explicitly says when to use this tool versus alternatives like lsp_workspace_symbol, nor does it state any exclusions or preconditions.

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

lsp_export_debug_reportA

Export a debug report for scheme-langserver upstream issue reporting.

The report contains the LSP traffic log, open project files, environment info, and server stderr. Review before sharing publicly — it includes source code.

When to use: scheme-langserver crashed or returned clearly wrong results, and you want to help debug by generating a report for the upstream issue tracker (https://github.com/ufo5260987423/scheme-langserver/issues).

ParametersJSON Schema
NameRequiredDescriptionDefault
output_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description needed to disclose behavioral traits. It does well by stating that the report includes source code and advises reviewing before sharing publicly, which is a critical behavioral warning. It doesn't cover all possibilities (e.g., output format or potential side effects), but the main privacy concern is highlighted, earning a high score.

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?

The description is succinct, with a clear first sentence stating the tool's purpose, followed by a bullet-point list of contents, and a 'When to use' section. It is front-loaded with the core purpose and avoids redundancy. Every sentence adds value.

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?

Given the tool's simplicity (one optional parameter) and the presence of an output schema, the description provides sufficient context for an agent to call the tool correctly. It covers what the report contains and when to use it. Could be more detailed on what happens after export (e.g., where the file is saved if no path is given), but that's minor.

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?

The description does not elaborate on the output_path parameter beyond what the schema provides, and the schema coverage is 0%, so the description carries the burden. However, the parameter is optional and simple, and the description implies an output file is needed. With a single optional parameter, the description adds minimal meaning, so a baseline of 3 is appropriate.

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 clearly states the tool's purpose: to export a debug report for upstream issue reporting. It lists the specific contents (LSP traffic log, open project files, environment info, server stderr) and provides a context for use (after a crash or wrong results). This distinguishes it from sibling tools that perform LSP operations, not reporting.

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

Usage Guidelines5/5

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

The description includes a 'When to use' section that explicitly states the scenario: when the LSP server crashed or produced clearly wrong results, and the user wants to help debug upstream. It also mentions the issue tracker URL, which guides the agent on where the report is intended. This is explicit guidance that sets it apart from other LSP tools.

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

lsp_hoverA

Show hover tooltip (type, docs) for the symbol under the cursor.

Like hovering the mouse over an identifier in an IDE.

Confidence: MEDIUM. Type inference is experimental; info about macro-expanded identifiers may be inaccurate. Cross-check with your knowledge.

Args: file_path: Absolute path to the file. line: Zero-based line number. character: Zero-based character (column) position.

ParametersJSON Schema
NameRequiredDescriptionDefault
lineYes
characterYes
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses a 'Confidence: MEDIUM' and notes that type inference is experimental, with potential inaccuracies for macro-expanded identifiers, advising cross-checking. This is valuable behavioral transparency about reliability, though it doesn't address side effects or prerequisites. It adds meaningful context beyond a simple 'hover' description.

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?

The description is concise and well-structured. The purpose is front-loaded, followed by an analogy, a confidence note, and parameter explanations. Each sentence earns its place; there is no redundancy or filler. The format is easy to parse and act upon.

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?

For a hover tool, the description covers the essential information: what it does, how to specify the location, and reliability caveats. An output schema exists, so return values are not required. It could mention prerequisites like needing an active LSP session or open file, but these are implied by sibling tools. The description is sufficiently complete for correct invocation.

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

Parameters5/5

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

Schema description coverage is 0%, but the description includes an 'Args' section that explains each parameter: file_path as absolute path, line as zero-based, character as zero-based. This fully compensates for the schema's lack of descriptions, providing the agent with precise meaning for each parameter.

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 clearly states the tool's function: 'Show hover tooltip (type, docs) for the symbol under the cursor.' This is a specific verb+resource that distinguishes it from siblings like lsp_definition or lsp_signature. The IDE analogy reinforces the purpose without ambiguity.

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 analogy 'Like hovering the mouse over an identifier in an IDE' provides clear context for when to use the tool. However, it does not explicitly mention alternatives or exclusions, such as when to use lsp_definition or lsp_references instead. The guidance is clear but lacks explicit routing.

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

lsp_initializeA

Initialize the scheme-langserver connection.

Must be called before any other LSP tool. Provides the project root directory so the language server can resolve imports and analyze the codebase.

Args: root_dir: Project root directory. langserver_path: Optional path to a specific scheme-langserver executable. If provided, it overrides environment variables and project config. This is useful for switching between scheme-langserver builds at runtime, e.g. when debugging a local development build.

ParametersJSON Schema
NameRequiredDescriptionDefault
root_dirYes
langserver_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output 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 burden. It discloses the effect (provides project root for import resolution) and the override behavior of langserver_path. It does not address idempotency or behavior after shutdown, which is a minor 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?

Concise, well-structured intro, lifecycle note, and Args block. Every sentence earns its place, and key information is front-loaded.

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?

Output schema exists so return values are covered. All parameters are explained and the ordering requirement is stated. Minor edge cases like path format or re-initialization behavior are not addressed.

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

Parameters5/5

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

Schema description coverage is 0%, so the description fully compensates. It explains root_dir as the project root directory and langserver_path with detailed override semantics (overrides env vars/project config, useful for switching builds).

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+resource: 'Initialize the scheme-langserver connection.' It also adds that it must be called before any other LSP tool, which clearly distinguishes it from all sibling tools and establishes its unique role.

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?

Explicitly says 'Must be called before any other LSP tool,' giving a clear when-to-use directive. It doesn't mention when not to use (e.g., if already initialized) or differentiate from lsp_restart, so it's not fully complete.

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

lsp_openA

Open a file in the language server (like opening a tab in an editor).

The server needs to know file contents before it can provide hover, completion, or diagnostics for that file.

When to use: When you start working on a Scheme file. Keep the file open for the duration of the session; do NOT open and close repeatedly.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes
language_idNoscheme

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It explains the rationale (server needs file contents) and gives a behavioral rule (keep open for session). Yet it does not disclose side effects, failure modes, or behavior on repeated opens, leaving some transparency gaps.

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?

The description is concise and front-loaded with the core action, followed by a brief rationale and usage guidance. Each sentence earns its place; no redundant content exists.

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

Completeness3/5

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

The tool is simple, but the description omits prerequisites like calling lsp_initialize first and how it fits into the lifecycle. It does not explain return values, though an output schema exists. It provides session context but misses setup dependencies.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It does not explain file_path or language_id beyond schema titles. The mention of 'Scheme file' hints at the default language_id, but it does not clarify the parameters' purpose or usage, failing to add value over the schema.

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 clear verb+resource: 'Open a file in the language server', with an editor tab analogy that makes the action intuitive. It implicitly distinguishes from siblings like lsp_close and lsp_change by focusing solely on the opening action.

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?

It explicitly states when to use ('When you start working on a Scheme file') and when not to ('do NOT open and close repeatedly'). However, it does not name alternative tools (e.g., lsp_change for edits, lsp_close for cleanup), so the guidance is clear but lacks explicit sibling comparisons.

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

lsp_referencesB

Find All References: list every usage of the symbol across the workspace.

Like Shift+F12 in an IDE.

Confidence: HIGH. Reliable for assessing impact before refactoring.

Args: include_declaration: Whether to include the definition site in the results.

ParametersJSON Schema
NameRequiredDescriptionDefault
lineYes
characterYes
file_pathYes
include_declarationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

There are no annotations, so the description carries the burden of behavioral disclosure. It states the tool is workspace-wide, has HIGH confidence, and is reliable for refactoring impact, which is useful context. It does not explicitly mention side effects, read-only behavior, or any server initialization prerequisites, though 'find references' strongly implies a non-mutating operation.

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 brief, front-loads the core behavior, and uses a helpful IDE analogy. The confidence note and the one parameter explanation earn their place, though the Args section is slightly redundant with the schema.

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

Completeness3/5

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

The description covers purpose, a use case, and one optional parameter, and an output schema exists. However, it omits explanations for the required position arguments and does not mention expected file-path or coordinate formats, so an agent may not correctly construct the primary invocation without external LSP knowledge.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It only explains include_declaration, while the three required positional parameters file_path, line, and character receive no semantic explanation in either the schema or description. This is a meaningful gap for an LSP tool where coordinate semantics matter.

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 uses a specific verb and resource: 'list every usage of the symbol across the workspace.' It clearly conveys what the tool does and the IDE analogy reinforces intent. It does not explicitly contrast itself with siblings such as lsp_definition or lsp_workspace_symbol, but its 'references/every usage' language makes the distinction fairly inferable.

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 usage context: it is like Shift+F12 and is reliable for assessing impact before refactoring. It does not explicitly state when not to use it compared with lsp_definition or lsp_workspace_symbol, but the refactoring-impact use case is strong enough to guide selection.

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

lsp_renameA

Compute workspace edits to rename a symbol.

Returns a set of text document edits that can be applied to safely rename the symbol across all files.

Limitation: rename is on the scheme-langserver roadmap and may return -32601 "method not found". If so, fall back to manual renaming.

ParametersJSON Schema
NameRequiredDescriptionDefault
lineYes
new_nameYes
characterYes
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It discloses that the tool returns edits rather than applying them directly, and it honestly flags the limitation that the server may return -32601 and suggests manual fallback. This is strong behavioral disclosure for an unannotated tool.

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?

The description is three sentences with the core purpose front-loaded, followed by the return behavior and a critical limitation. Every sentence earns its place, and there is no filler or redundancy.

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

Completeness3/5

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

The description covers the purpose, output, and a key failure mode, but it omits important context such as whether the language server must be initialized, whether the target file must already be open, or whether line/character are zero-based. For an LSP operation with dependencies on sibling tools like lsp_initialize and lsp_open, this is a noticeable gap.

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

Parameters1/5

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

Schema description coverage is 0% with four required parameters, and the description adds no parameter detail. It never explains line/character coordinate semantics or how file_path and new_name interact. The description must compensate given the low schema coverage, and it does not.

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 clearly states a specific verb and resource: 'compute workspace edits to rename a symbol.' It also differentiates itself by explaining the result is a set of edits across all files, which distinguishes it from browsing tools like lsp_references or lsp_definition.

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: use this tool when renaming a symbol, and the returned edits can be applied to perform the rename. It does not explicitly compare against alternatives, but the purpose is clear enough that an agent can infer when it is appropriate.

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

lsp_restartA

Restart the scheme-langserver connection and reopen tracked documents.

Use this when you want scheme-langserver to pick up configuration changes (e.g. a new cache_path), switch to a different executable, or recover from a stuck server. After restarting, all currently open files are re-opened automatically so the server state is restored.

Args: root_dir: Project root directory. If omitted, the previously used root_dir is reused; if there is none, it is inferred from open documents or the current working directory. langserver_path: Optional path to a specific scheme-langserver executable. If provided, it overrides environment variables and project config. This lets you instantly switch to a local build for debugging or comparison.

ParametersJSON Schema
NameRequiredDescriptionDefault
root_dirNo
langserver_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does well by disclosing that open documents are reopened automatically, root_dir fallback behavior, and langserver_path override behavior. It does not mention potential side effects like lost server state or in-flight requests, but it covers the main state-changing behavior.

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?

The description is well-structured and front-loaded with the purpose, followed by use cases, behavioral effects, and parameter details. Every sentence adds useful information without padding or repetition.

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 purpose, usage, parameter semantics, and post-restart behavior, and an output schema exists so return details are unnecessary. It is slightly missing guidance on edge cases such as whether a server must already be initialized, but overall it gives an agent enough context to invoke the tool correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description fully compensates by explaining both parameters in detail: root_dir's reuse/inference fallback and langserver_path's override of environment variables and project config. This adds meaningful semantics far beyond the bare parameter names in the schema.

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 opening sentence explicitly states the action: 'Restart the scheme-langserver connection and reopen tracked documents.' This goes beyond a tautology by naming the specific resource and secondary behavior, and it is clearly different from sibling tools like lsp_initialize or lsp_shutdown.

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 explicit when-to-use guidance: pick up configuration changes, switch executables, or recover from a stuck server. It does not explicitly name alternatives or when-not-to-use cases, but the stated conditions are concrete and actionable.

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

lsp_shutdownB

Gracefully shut down the scheme-langserver connection.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure, but it only adds 'gracefully.' It does not state that the connection becomes unusable afterward, whether shutdown is idempotent, or that a later lsp_initialize is required to resume work.

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?

One sentence with no filler, and the key verb and resource appear upfront. Every word earns its place.

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

Completeness3/5

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

The tool is simple (no parameters) and has an output schema, so the description does not need to document return values. However, it leaves lifecycle context unstated—no mention of shutdown being terminal or how it relates to lsp_initialize/lsp_restart—so a fully self-sufficient agent would need to infer behavior from LSP conventions.

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?

There are zero parameters and the schema properties object is empty, so there is nothing for the description to clarify beyond the schema. The baseline of 4 applies.

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?

Names a specific verb ('shut down') and target ('the scheme-langserver connection'), with 'gracefully' adding manner. It does not explicitly contrast with lsp_restart or lsp_initialize, so the agent must infer lifecycle boundaries largely from the name.

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

Usage Guidelines2/5

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

No statement of when shutdown should be used instead of lsp_restart or lsp_initialize, and no warning about prerequisites. The only context is the word 'gracefully,' which implies finality but does not provide explicit selection guidance.

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

lsp_signatureA

Get signature help for a function call.

Shows parameter names and types for the function being called at the given position.

Limitation: signatureHelp is on the scheme-langserver roadmap and may return -32601 "method not found". If so, fall back to your own knowledge.

ParametersJSON Schema
NameRequiredDescriptionDefault
lineYes
characterYes
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/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 disclosure burden, and it does so well by explicitly warning that signatureHelp is on the scheme-langserver roadmap and may return -32601 'method not found'. This is a valuable behavioral trait that an agent needs to handle gracefully. It does not discuss side effects, but as a read-only LSP query that is a minor omission.

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?

The description is concise and front-loaded with the core purpose, followed by a single, clearly marked limitation. Every sentence earns its place, and the fallback instruction is easy to notice.

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

Completeness3/5

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

The description covers purpose and a key limitation, and an output schema exists to explain return values. However, the parameter semantics gap and lack of positional details make the tool not fully self-contained for correct invocation, especially given no annotations are available.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate by explaining file_path, line, and character semantics. It only mentions 'at the given position', which does not explain coordinate bases, whether positions are zero-based, or how the file_path locates the document. The parameter names are self-evident but not sufficiently documented.

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 uses a specific verb and resource: 'Get signature help for a function call.' It goes further by stating what the tool shows ('parameter names and types'), making its purpose unambiguous. This clearly distinguishes it from sibling tools like lsp_hover or lsp_complete.

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

Usage Guidelines3/5

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

The intended use is implied from the purpose: call this when a function call is being made and signature details are needed. However, there is no explicit guidance on when to prefer this over alternatives such as lsp_hover or lsp_complete, and no when-not-to-use conditions besides the error fallback note.

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

lsp_workspace_symbolA

Search symbols across the entire workspace.

Like Ctrl+T / Go to Symbol in an IDE. Returns all symbols matching the query string across all indexed files.

Confidence: MEDIUM. Accuracy depends on index completeness. Requires scheme-langserver >= 2.1.0.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/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 and does well by disclosing confidence level, dependence on index completeness, and a version requirement. It also describes the returned behavior ('all symbols matching the query string'). It does not mention failure modes or prerequisites beyond the version, but the provided context is genuinely useful.

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?

The description is compact and well-structured: a one-line purpose, a helpful analogy, a summary of behavior, and two critical operational caveats. Each sentence adds distinct value and nothing is redundant.

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?

For a single-parameter tool with an output schema, the description covers the core purpose, behavior, confidence, and a version requirement. The main missing piece is explicit routing relative to lsp_document_symbol, and whether an initialized LSP session is required, but the overall context is adequate.

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

Parameters2/5

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

The input schema has a single 'query' parameter with 0% description coverage, so the description must compensate. It only says the query is a 'query string' and that symbols 'matching' it are returned, which adds minimal meaning beyond the schema's bare property name. No format, case-sensitivity, wildcard, or matching semantics are documented.

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 uses a specific verb ('Search') and a clear resource ('symbols across the entire workspace'), and contrasts with lsp_document_symbol by emphasizing workspace-wide scope. The Ctrl+T / Go to Symbol analogy reinforces the intent and makes the tool immediately recognizable.

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 usage context: use this to find symbols workspace-wide, like an IDE's Go to Symbol. It does not explicitly name lsp_document_symbol as the alternative or state when not to use it, but the 'across all indexed files' phrasing implies the workspace-vs-document distinction.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 17 tool updatesv0.1.0
    • First observedlsp_change
    • First observedlsp_close
    • First observedlsp_code_action
    • First observedlsp_complete
    • First observedlsp_definition
    • First observedlsp_diagnostics
    • First observedlsp_document_symbol
    • First observedlsp_export_debug_report
    • First observedlsp_hover
    • First observedlsp_initialize
    • First observedlsp_open
    • First observedlsp_references
    • First observedlsp_rename
    • First observedlsp_restart
    • First observedlsp_shutdown
    • First observedlsp_signature
    • First observedlsp_workspace_symbol

TDQS

A3.9/5.0

Scored across 17 tools

Disambiguation5/5

Each tool maps to a distinct LSP operation or lifecycle event, so there is no meaningful overlap: open/change/close manage document state, hover/complete/definition/references/signature query different perspectives, and document_symbol vs workspace_symbol are explicitly scoped to file vs workspace. The few related pairs are differentiated clearly by name and description.

Naming Consistency5/5

All 17 tools follow the same lsp_ snake_case prefix and mostly mirror standard LSP method names, making the set predictable and easy to navigate. Even though some names are nouns rather than verb_noun phrases, the convention is uniform across the whole server.

Tool Count4/5

17 tools is at the upper end of comfortable scope, but nearly every one corresponds to a distinct LSP feature or lifecycle step needed by a language-server bridge. The count feels justified rather than bloated; it is only slightly above the typical well-scoped range.

Completeness4/5

The set covers the full editing loop: initialize, open/change/close documents, query symbols/references/hover/completion, and fetch diagnostics, plus shutdown/restart and troubleshooting. Minor gaps remain (e.g., formatting, document highlighting) and a few exposed features (rename/signature/code_action) are documented as possibly unsupported by the server, but there are no critical dead ends for the core workflow.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    Bridges Claude Code to Language Server Protocol (LSP) servers to enable semantic code intelligence features like navigation, refactoring, and real-time diagnostics. It supports multiple languages including TypeScript, Python, and Rust with multi-root workspace capabilities.
    19
    1,077 npm
    21
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Windows-first MCP bridge for Kimi Code CLI, exposing code analysis, editing, sessions, and diagnostics as tools for AI agents.
    6
    21 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Bridges MCP clients to Moonshot AI's Kimi Code CLI, enabling file analysis, brainstorming, batch tasks, code reviews, and session management within editors like Claude Desktop and Cursor.
    14
    744 npm
    1
    MIT