agent-lsp
agent-lsp is a stateful MCP server bridging Language Server Protocol (LSP) intelligence to AI agents, offering 56 tools and 22 skills across 30+ programming languages.
Code Navigation
Go to definition, declaration, type definition, and implementation
Navigate by symbol name (dot-notation), call hierarchy, and type hierarchy
Code Intelligence & Analysis
Find references (including cross-repository), document highlights, and workspace/document symbols
Hover info, signature help, completions, inlay hints, and semantic tokens
Diagnostics (errors/warnings), symbol source, and offline documentation (
go doc,pydoc,cargo doc)
Impact & Blast-Radius Analysis
get_change_impact— enumerate exported symbols and find all callers (with optional transitive analysis)get_cross_repo_references— find usages of a library symbol across consumer repositories
Editing & Refactoring
Apply edits via text-match or WorkspaceEdit, rename symbols workspace-wide (with dry-run preview), prepare/validate renames, get code actions, execute server commands, and format documents or ranges
Speculative Execution (simulate before writing)
Create in-memory sessions, apply edits or chains of edits, evaluate diagnostic impact, then commit to disk or discard — without touching files until you're ready
Build & Test Integration
Run builds (
go build,cargo build,tsc,mypy) and tests (go test,pytest,npm test)Find test files covering a given source file
Workspace & Lifecycle Management
Initialize/restart LSP, auto-detect language servers, manage multi-root workspaces, control document lifecycle, and inspect server capabilities
Agent Workflow Enforcement
Skills (e.g.,
blast-radius,safe-edit,refactor) encode multi-step operations with phase enforcement that blocks out-of-order tool calls, guiding agents through correct workflows
A persistent daemon maintains a warm index across files and projects, improving performance for repeated AI agent interactions.
Supports Bun runtime as an alternative to Node.js for running the MCP server, offering compatibility with JavaScript/TypeScript language server tooling.
Provides C++ language support through clangd language server integration, enabling code analysis, navigation, and refactoring capabilities for C++ projects.
Provides Clojure language support through language server integration, enabling code analysis, navigation, and refactoring capabilities for Clojure projects.
Provides Dart language support through language server integration, enabling code analysis, navigation, and refactoring capabilities for Dart projects.
Provides Docker container deployment options for the MCP server with stdio and HTTP modes, supporting multiple language server configurations in isolated environments.
Provides Elixir language support through language server integration, enabling code analysis, navigation, and refactoring capabilities for Elixir projects.
Hosts the project repository and provides installation scripts via GitHub raw URLs for platform-agnostic deployment of the MCP server.
Provides package installation through Homebrew tap for macOS/Linux users, offering a native package management experience for the MCP server.
Provides JavaScript language support through TypeScript language server integration, enabling code analysis, navigation, and refactoring capabilities for JavaScript projects.
Provides Kotlin language support through language server integration, enabling code analysis, navigation, and refactoring capabilities for Kotlin projects.
Provides LLVM-based tooling for C/C++ language support through clangd integration, enabling advanced code analysis and refactoring capabilities.
Provides Lua language support through language server integration, enabling code analysis, navigation, and refactoring capabilities for Lua projects.
Provides MongoDB query language support through language server integration, enabling code analysis and validation capabilities for MongoDB projects.
Provides Node.js runtime support for language servers and npm package installation for the MCP server and language server dependencies.
Provides npm package installation for the MCP server globally and for language server dependencies like TypeScript language server and pyright.
Provides PHP language support through language server integration, enabling code analysis, navigation, and refactoring capabilities for PHP projects.
Provides Prisma schema language support through language server integration, enabling code analysis and validation capabilities for Prisma projects.
Provides Python language support through pyright language server integration, enabling code analysis, navigation, and refactoring capabilities for Python projects.
Provides Ruby language support through solargraph language server integration, enabling code analysis, navigation, and refactoring capabilities for Ruby projects.
Provides Rust language support through rust-analyzer language server integration, enabling code analysis, navigation, and refactoring capabilities for Rust projects.
Provides Scala language support through language server integration, enabling code analysis, navigation, and refactoring capabilities for Scala projects.
Provides Swift language support through language server integration, enabling code analysis, navigation, and refactoring capabilities for Swift projects.
Provides Terraform HCL language support through language server integration, enabling code analysis and validation capabilities for Terraform projects.
Provides TypeScript language support through typescript-language-server integration, enabling code analysis, navigation, and refactoring capabilities for TypeScript projects.
Provides Zig language support through language server integration, enabling code analysis, navigation, and refactoring capabilities for Zig projects.
Code intelligence infrastructure for AI agents. 65 tools, 31 CI-verified languages, 24 agent workflows. Single Go binary.
curl -fsSL https://raw.githubusercontent.com/blackwell-systems/agent-lsp/main/install.sh | sh && agent-lsp initWhat is it?
agent-lsp is an MCP server that orchestrates existing LSP servers (gopls, rust-analyzer, jdtls, etc.) into agent-native workflows.
Not an LSP server — it's an orchestration layer that manages language servers and exposes batch operations, speculative editing, and multi-step workflows via MCP tools.
Architecture:
Language servers (gopls, rust-analyzer, etc.) → provide code intelligence
agent-lsp (MCP server) → orchestrates workflows, maintains warm runtime
AI agents → consume via MCP protocol
Related MCP server: uacos
Why agent-lsp?
Persistent warm runtime
Language servers stay indexed across agent sessions. First session: indexes workspace (~10s for typical projects). Subsequent sessions: instant. No cold-start penalty on each request.
Batch operationsblast_radius → one call returns all exports + all callers (test vs non-test partitioned). Without orchestration: 20+ sequential LSP calls.
Speculative editingsimulate_edit → preview changes in memory, check diagnostic delta, apply or discard. Test edits before touching disk.
Workflow orchestration
24 skills that chain LSP operations into complete pipelines:
/lsp-refactor→ impact analysis → preview → apply → verify build → run tests/lsp-safe-edit→ preview → diagnostic diff → apply if safe/lsp-verify→ LSP diagnostics → build → test suite
Multi-language, single session
One agent-lsp process routes .go to gopls, .ts to tsserver, .py to pyright. No reconfiguration between projects. Session persists across files and repositories.
Token-optimized output: Tool responses encoded in GCF instead of JSON. 30-84% fewer tokens depending on tool (up to 92.7% with session dedup). 100% LLM comprehension on every frontier model, 91.2% on complex code graphs where JSON averages 54.1%. See below for measured savings per tool.
How the pieces fit together: LSP (Language Server Protocol) is how editors get code intelligence: completions, diagnostics, go-to-definition. MCP (Model Context Protocol) is the standard way AI tools like Claude Code discover and call external tools. agent-lsp bridges the two: language server intelligence, accessible to AI agents.
Use it when
Building agentic code generation systems
Automating refactors across large codebases
CI tooling that needs programmatic code intelligence
Any workflow where sequential LSP calls are too slow or complex
What agents say
We asked AI agents to evaluate agent-lsp across 10 coding tasks (find callers, rename safely, preview edits, detect dead code) and write an honest assessment. Four different models, four independent evaluations, same conclusion:
Claude (Opus 4.6): "I would recommend agent-lsp for any workflow involving refactoring, impact analysis, or safe editing. The standout tools are
blast_radius(blast radius in one call, with test/non-test partitioning that would take 5-10 grep commands to replicate),go_to_implementation(type-checked interface satisfaction that grep simply cannot do), and the simulation session workflow (speculative type-checking without touching disk, which has no grep/read equivalent at all)."
Cursor (auto): "I would recommend agent-lsp for heavy refactors and code navigation because the rename, references, implementations, call hierarchy, and simulation tools remove a lot of brittle grep/manual-edit work and make changes safer."
GPT-5.5 (via Codex): "I would recommend agent-lsp for symbol-aware work: references, implementations, rename previews, diagnostics, and large-file structure are materially faster and less error-prone than grep/read loops."
Gemini 2.5 Pro (via Gemini CLI): "I would highly recommend agent-lsp because it provides a level of semantic awareness that standard text-searching tools simply cannot match. The ability to perform high-confidence renames, find interface implementations, and preview the diagnostic impact of edits without writing to disk significantly reduces the risk of introducing regressions."
Tested, not assumed
Every other MCP-LSP implementation lists supported languages in a config file. None of them run the actual language server in CI to verify it works.
agent-lsp CI runs 31 real language servers against real fixture codebases on every push: Go, Python, TypeScript, Rust, Java, C, C++, C#, Ruby, PHP, Kotlin, Swift, Scala, Zig, Lua, Elixir, Gleam, Clojure, Dart, Terraform, Nix, Prisma, SQL, MongoDB, and more. When we say "works with gopls," that's a verified, automated claim, not a hope.
Speculative execution
Simulate changes in memory before writing to disk. No other MCP-LSP implementation has this.
preview_edit previews the diagnostic impact of any edit. You see exactly what breaks before the file is touched. simulate_chain evaluates a sequence of dependent edits (rename a function, update all callers, change the return type) and reports which step first introduces an error.
8 speculative execution tools. See docs/guide/speculative-execution.md for the full workflow.
Token savings
Structured LSP responses use 5-34x fewer tokens than grep/read on the same tasks. On HashiCorp Consul (319K lines), a blast-radius analysis uses 17.7MB via grep vs 841KB via LSP, reducing 5,534 tool calls to 119. Savings scale with codebase size. See docs/guide/token-savings.md for the full experiment across five codebases.
Token-optimized output (GCF)
Tool responses are encoded in GCF (Graph Compact Format) instead of JSON. GCF eliminates field-name repetition, identifier repetition, and per-record structural overhead.
Profile | Tools | Savings vs JSON |
Tabular | All 66 tools | 30-51% |
Graph | blast_radius, find_callers, explore_symbol, find_references, type_hierarchy, cross_repo, detect_changes, list_symbols | 79-84% |
Graph + session dedup | Same, via gcf-proxy | 92.7% (5th call) |
Grouped/nested responses (callers under a symbol, diagnostics with related info) tabularize too, for ~14% over JSON on that shape (details).
GCF is enabled by default. To revert to JSON:
export AGENT_LSP_OUTPUT_FORMAT=jsonBenchmark: go run scripts/gcf-benchmark.go. See docs/guide/gcf-integration.md for architecture details.
GCF: gcformat.com · Spec · Go · Python · TypeScript · Playground
Why orchestration matters
AI agents make incorrect code changes because they can't see the full picture: who calls this function, what breaks if I rename it, does the build still pass. Language servers have the answers, but raw LSP tools require 20+ sequential calls and complex orchestration logic.
agent-lsp solves this by encoding correct multi-step operations into single calls and skills. blast_radius does what would take an agent 20+ calls in one. /lsp-refactor chains impact → preview → apply → verify → test without per-prompt orchestration.
Persistent daemon mode
Python and TypeScript projects need minutes of background indexing before find_references works. agent-lsp automatically spawns a persistent daemon broker that survives between sessions, so the workspace stays indexed. First session: daemon starts and indexes (~10s for FastAPI). Subsequent sessions: instant connection to the warm daemon. Auto-exits after 30 minutes of inactivity. Go, Rust, and other fast-indexing languages bypass this entirely (zero overhead).
Phase enforcement
Skills tell agents the correct order of operations. Phase enforcement makes the runtime block violations instead of trusting the agent to follow instructions.
When an agent activates a skill, every tool call is checked against the current phase's permissions. Calling apply_edit during blast-radius analysis doesn't silently proceed; it returns an error with specific recovery guidance ("complete the blast_radius phase first, allowed tools: [blast_radius, find_references]"). Phases advance automatically as the agent calls tools from later phases.
No other MCP tool provider enforces workflow ordering at runtime. See docs/guide/phase-enforcement.md.
Concurrency analysis
The inspector includes 4 concurrency checks that work across 25 languages in 4 concurrency families (goroutine, thread, async, actor):
Unrecovered concurrent entry: goroutines/threads/tasks without recovery
Unchecked shared state: bare type assertions on sync.Map, ConcurrentHashMap
Channel never closed: channels/queues created but never closed (goroutine leaks)
Shared field without sync: fields accessed from concurrent contexts without synchronization
blast_radius annotates symbols with sync_guarded: true when the parent type has a mutex. find_callers with cross_concurrent: true traces call chains through goroutine/thread boundaries. The /lsp-concurrency-audit skill produces a field-level safety report for any type.
Auto-diagnostics
Symbol edit tools (replace_symbol_body, insert_after_symbol, insert_before_symbol, safe_delete_symbol) automatically return errors_after and warnings_after counts. Agents know immediately whether an edit broke something without a separate get_diagnostics call.
safe_apply_edit combines preview + apply in one call: previews speculatively, applies to disk only if net_delta == 0 (no new errors). One tool call instead of three.
Works with
AI Tool | Transport | Setup |
stdio |
| |
stdio |
| |
stdio |
| |
stdio |
| |
stdio |
| |
stdio |
| |
Any MCP client | HTTP+SSE |
|
See docs/getting-started/mcp-clients.md for copy-paste configs.
Skills
Raw tools get ignored. Skills get used. Each skill encodes the correct tool sequence so workflows actually happen without per-prompt orchestration instructions. Skills are available as AgentSkills slash commands and as MCP prompts via prompts/list / prompts/get for any MCP client.
See docs/guide/skills.md for full descriptions and usage guidance.
Before you change anything
Skill | Purpose |
| Blast-radius analysis before touching a symbol or file |
| Find all concrete implementations of an interface |
| Detect zero-reference exports before cleanup |
Editing safely
Skill | Purpose |
| Speculative preview before disk write; before/after diagnostic diff; surfaces code actions on errors |
| Test changes in-memory without touching the file |
| Edit a named symbol without knowing its file or position |
| Safe editing of exported symbols, finds all callers first |
|
|
Getting started
Skill | Purpose |
| First-session project onboarding: detect languages, map packages, find entry points and hotspots, check diagnostics |
Understanding unfamiliar code
Skill | Purpose |
| "Tell me about this symbol": hover + implementations + call hierarchy + references in one pass |
| Deep-dive Code Map for a symbol or file: type info, call hierarchy, references, source |
| Three-tier documentation: hover → offline toolchain → source |
| Find all usages of a library symbol across consumer repos |
| File-scoped symbol list, usage search, and type info |
After editing
Skill | Purpose |
| Diagnostics + build + tests after every edit |
| Apply quick-fix code actions for all diagnostics in a file |
| Find and run only tests that cover an edited file |
| Format a file or selection via the language server formatter |
Generating code
Skill | Purpose |
| Trigger server-side code generation (interface stubs, test skeletons, mocks) |
| Extract a code block into a named function via code actions |
Full workflow
Skill | Purpose |
| End-to-end refactor: blast-radius → preview → apply → verify → test |
| Full code quality audit (12 checks): dead symbols, test coverage, error handling, doc drift, concurrency safety |
| Field-level concurrency safety audit for a type: traces concurrent access, flags unsynced fields |
Docker
Stdio mode (MCP client spawns the container directly):
# Go
docker run --rm -i -v /your/project:/workspace ghcr.io/blackwell-systems/agent-lsp:go go:gopls
# TypeScript
docker run --rm -i -v /your/project:/workspace ghcr.io/blackwell-systems/agent-lsp:typescript typescript:typescript-language-server,--stdio
# Python
docker run --rm -i -v /your/project:/workspace ghcr.io/blackwell-systems/agent-lsp:python python:pyright-langserver,--stdioHTTP mode (persistent service, remote clients connect over HTTP+SSE):
docker run --rm \
-p 8080:8080 \
-v /your/project:/workspace \
-e AGENT_LSP_TOKEN=your-secret-token \
ghcr.io/blackwell-systems/agent-lsp:go \
--http --port 8080 go:goplsImages run as a non-root user (uid 65532) by default. Set AGENT_LSP_TOKEN via environment variable, never --token on the command line. Images are also mirrored to Docker Hub (blackwellsystems/agent-lsp). See DOCKER.md for the full tag list, HTTP mode setup, and security hardening options.
Setup
Step 1: Install agent-lsp
curl -fsSL https://raw.githubusercontent.com/blackwell-systems/agent-lsp/main/install.sh | shmacOS / Linux
brew install blackwell-systems/tap/agent-lspWindows
# PowerShell (no admin required)
iwr -useb https://raw.githubusercontent.com/blackwell-systems/agent-lsp/main/install.ps1 | iex
# Scoop
scoop bucket add blackwell-systems https://github.com/blackwell-systems/agent-lsp
scoop install blackwell-systems/agent-lsp
# Winget
winget install BlackwellSystems.agent-lspAll platforms
# pip
pip install agent-lsp
# npm
npm install -g @blackwell-systems/agent-lsp
# Go install
go install github.com/blackwell-systems/agent-lsp/cmd/agent-lsp@latestStep 2: Install language servers
Install the servers for your stack. Common ones:
Language | Server | Install |
TypeScript / JavaScript |
|
|
Python |
|
|
Go |
|
|
Rust |
|
|
C / C++ |
|
|
Ruby |
|
|
Full list of 31 supported languages in docs/reference/language-support.md.
Step 3: Verify setup
agent-lsp doctorProbes each configured language server and reports capabilities. Fix any failures before proceeding. See language support for install commands and server-specific notes.
Step 4: Configure your AI tool
agent-lsp initDetects language servers on your PATH, asks which AI tool you use, writes the correct MCP config, and installs skill awareness rules for your AI provider (CLAUDE.md for Claude Code, .cursor/rules/ for Cursor, .clinerules for Cline, .windsurfrules for Windsurf, GEMINI.md for Gemini CLI). For CI or scripted use: agent-lsp init --non-interactive.
The generated config looks like:
{
"mcpServers": {
"lsp": {
"type": "stdio",
"command": "agent-lsp",
"args": [
"go:gopls",
"typescript:typescript-language-server,--stdio",
"python:pyright-langserver,--stdio"
]
}
}
}Each arg is language:server-binary (comma-separate server args).
Step 5: Install skills
git clone https://github.com/blackwell-systems/agent-lsp.git /tmp/agent-lsp-skills
cd /tmp/agent-lsp-skills/skills && ./install.sh --copySkills are prompt files copied into your AI tool's configuration. --copy means the clone can be safely deleted afterward.
Skills are also available as MCP prompts: any MCP client can discover them via prompts/list and retrieve full workflow instructions via prompts/get, with no manual installation required. The install.sh path is for AgentSkills-compatible clients (Claude Code slash commands).
Step 6: Allow tool permissions (Claude Code)
For Claude Code, add mcp__lsp__* to your permissions allow list so all 65 tools are available without per-tool approval prompts:
// ~/.claude/settings.json
{
"permissions": {
"allow": ["mcp__lsp__*"]
}
}Without this, Claude Code will prompt for permission on each tool call. Other MCP clients handle permissions differently; check your client's documentation.
Skills are multi-tool workflows that encode reliable procedures: blast-radius check before edit, speculative preview before write, test run after change. See docs/guide/skills.md for the full list.
Step 7: Start working
Your AI agent calls tools automatically. The first call initializes the workspace:
start_lsp(root_dir="/your/project")This is what the agent does, not something you type. Then use any of the 65 tools. The session stays warm; no restart needed when switching files.
What's unique about agent-lsp
Capability | Details |
Tools | 65 |
Languages (CI-verified) | 30, end-to-end integration tests on every push |
Agent workflows (skills) | 24, named multi-step procedures, discoverable via MCP |
Speculative execution | 8 tools, simulate changes before writing to disk |
Phase enforcement | 4 skills, runtime blocks out-of-order tool calls with recovery guidance |
Connection model | persistent, warm index across files and projects |
Call hierarchy | ✓, single tool, direction param |
Type hierarchy | ✓, CI-verified |
Cross-repo references | ✓, multi-root workspace |
Auto-watch | ✓, always-on, debounced file watching |
HTTP+SSE transport | ✓, bearer token auth, non-root Docker |
Distribution | single Go binary, 10 install channels |
Use Cases
Multi-project sessions: point your AI at
~/code/, work across any project without reconfiguringPolyglot development: Go backend + TypeScript frontend + Python scripts in one session
Large monorepos: one server handles all languages, routes by file extension
Code migration: refactor across repos with full cross-repo reference tracking
CI pipelines: validate against real language server behavior
Niche language stacks: Gleam, Elixir, Prisma, Zig, Clojure, Nix, Dart, Scala, MongoDB, all CI-verified
Multi-Language Support
31 languages, CI-verified end-to-end against real language servers on every CI run. No other MCP-LSP implementation tests a single language in CI.
Go, Python, TypeScript, Rust, Java, C, C++, C#, Ruby, PHP, Kotlin, Swift, Scala, Zig, Lua, Elixir, Gleam, Clojure, Dart, Terraform, Nix, Prisma, SQL, MongoDB, JavaScript, YAML, JSON, Dockerfile, CSS, HTML.
See docs/reference/language-support.md for the full coverage matrix.
Tools
65 tools covering navigation, analysis, refactoring, symbol editing, composite exploration, safe editing, speculative execution, and session lifecycle. All CI-verified.
See docs/reference/tools.md for the full reference with parameters and examples.
Further reading
Documentation
Tools reference: full tool reference with parameters and examples
Skills reference: skill reference, workflows, use cases, and composition
Language support: language coverage matrix
Architecture: system design and internals
Speculative execution: simulate-before-apply workflows
LSP conformance: LSP 3.17 spec coverage
Docker: Docker tags, compose, and volume caching
Contributing
CI notes: CI quirks and test harness details
Distribution: install channels and release pipeline
Development
git clone https://github.com/blackwell-systems/agent-lsp.git
cd agent-lsp && go build ./...
go test ./... # unit tests
go test ./... -tags integration # integration tests (requires language servers)Library Usage
The pkg/lsp, pkg/session, and pkg/types packages expose a stable Go API for using agent-lsp's LSP client directly without running the MCP server.
import "github.com/blackwell-systems/agent-lsp/pkg/lsp"
client := lsp.NewLSPClient("gopls", []string{})
client.Initialize(ctx, "/path/to/workspace")
defer client.Shutdown(ctx)
locs, err := client.GetDefinition(ctx, fileURI, lsp.Position{Line: 10, Character: 4})See docs/architecture/architecture.md for the full package API.
License
MIT
Available Tools
50 toolsadd_workspace_folderA
Add a directory to the LSP workspace, enabling cross-repo references, definitions, and diagnostics. Useful when working across a library and its consumers — after adding the consumer repo, get_references on a library function returns call sites in both repos. Requires start_lsp to have been called first. Language servers that support multi-root workspaces (gopls, rust-analyzer, typescript-language-server) will re-index the new folder automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
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 adding a folder triggers automatic re-indexing for supported language servers, and implies it is non-destructive. Missing details on whether the folder must be valid or if it can be removed later, but the core behavior is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each adding value: purpose, use case with prerequisite, and automatic re-indexing behavior. Front-loaded with the key verb and resource. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has one parameter, no output schema, and no annotations. The description covers purpose, prerequisite, and a key behavioral trait (auto-reindexing). However, it omits edge cases like duplicate folders or invalid paths, and does not describe the return value or success/failure indicators.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% coverage (no parameter descriptions), so the description should compensate. It only mentions 'a directory' with no additional details about the 'path' parameter format (absolute/relative), validation, or consequences of invalid paths. This leaves the agent guessing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add a directory') and the resource ('LSP workspace'), explaining the benefit of enabling cross-repo references. It distinguishes from sibling tools like 'list_workspace_folders' and 'remove_workspace_folder' by focusing on adding and the cross-repo use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete use case ('working across a library and its consumers') with an example ('get_references on a library function returns call sites in both repos'). It also specifies a prerequisite ('Requires start_lsp to have been called first'). No explicit when-not-to-use or alternatives are given, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_editA
Apply an edit to a file. Two modes: (1) WorkspaceEdit mode — pass workspace_edit with positional changes returned by rename_symbol or format_document; (2) Text-match mode — pass file_path + old_text + new_text to find and replace text without needing line/column positions. Text-match tries exact match first, then whitespace-normalised line match (handles indentation differences). Use text-match when AI-generated positions would be imprecise.
| Name | Required | Description | Default |
|---|---|---|---|
| new_text | No | ||
| old_text | No | ||
| file_path | No | ||
| workspace_edit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the burden. It explains text-match tries exact match then whitespace-normalized line match, but lacks details on mutation, error handling, return values, or safety implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three well-structured sentences, front-loaded with purpose and modes. No redundant information, though the third sentence could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers modes and text-match behavior, but given 4 parameters and no annotations or output schema, it lacks details on failure cases, response format, or prerequisites like file existence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 clarifies that workspace_edit is used in one mode and file_path + old_text + new_text in the other, but does not fully specify formats or constraints, leaving some ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool applies an edit to a file and distinguishes two specific modes (WorkspaceEdit and Text-match). The description ties each mode to its use case, making it highly clear what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use each mode: WorkspaceEdit for positional changes from rename_symbol/format_document; Text-match when AI-generated positions are imprecise. Does not list alternatives or exclusions but gives practical context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
call_hierarchyB
Show call hierarchy for a symbol at a position. Returns callers (incoming), callees (outgoing), or both depending on the direction parameter. Direction defaults to "both". Use this to understand code flow -- which functions call this function and which functions it calls.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | ||
| column | Yes | ||
| direction | No | ||
| file_path | Yes | ||
| language_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It explains the default direction and return types (callers/callees) but does not disclose read-only nature, required LSP state, or behavior on missing positions. The description is adequate but lacks some common behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, with the core functionality in the first sentence and usage guidance in the second. No extraneous information, perfectly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters, no output schema, and no annotations, the description should be more comprehensive. It lacks details on how to specify position (line/column format), file path conventions, and the structure of the returned hierarchy. Significant gaps remain for a code navigation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, meaning no parameter descriptions in the schema. The description explains the 'direction' parameter and its default, but fails to describe 'file_path', 'line', 'column', and 'language_id'. With 5 parameters, this is insufficient compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it shows call hierarchy for a symbol, distinguishing callers and callees. However, it does not explicitly differentiate from sibling tools like 'type_hierarchy' or 'get_references', though the name 'call_hierarchy' provides some distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this to understand code flow', providing clear context. It does not mention when not to use it or alternatives, but the instruction is sufficient for basic guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_documentB
Close a file in the LSP server. Use this tool when you're done with a file to free up resources and reduce memory usage. It's good practice to close files that are no longer being actively analyzed, especially in long-running sessions or when working with large codebases.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must disclose all behavioral traits. It mentions freeing resources but omits critical details such as whether unsaved changes are discarded or if confirmation is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each serving a purpose: action, usage context, and best practice. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic purpose and usage scenario but lacks parameter details and behavioral transparency. For a simple tool, it is minimally adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should explain the parameter. It does not clarify that 'file_path' should be an absolute path, URI, or any format, leaving the agent uninformed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('close a file') and the resource ('in the LSP server'), making it distinct from sibling tools like open_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises when to use the tool ('when you're done with a file') and provides rationale (free up resources, reduce memory usage), though it does not mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
commit_sessionA
Commit a simulation session. With apply=true, writes changes to disk and notifies LSP servers. With apply=false, returns a unified diff patch. Use after evaluate_session confirms the changes are safe.
| Name | Required | Description | Default |
|---|---|---|---|
| apply | No | ||
| target | No | ||
| session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description reveals key behaviors: with apply=true, it writes to disk and notifies LSP servers; with apply=false, it returns a unified diff patch. It also implies this is a finalizing action. However, it does not mention whether the session is destroyed after commit or any potential side effects like notification to servers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose. Every sentence adds value: purpose, mode details, and usage guidance. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and 0% schema parameter coverage, the description provides essential behavior but omits details on the 'target' parameter and return type. It partially compensates by explaining the two modes and usage sequence, but gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains the 'apply' parameter well, clarifying its effect on behavior. However, it does not describe the 'target' parameter at all, and 'session_id' is only implicitly understood from context. With 0% schema coverage, more parameter guidance is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool commits a simulation session, with two distinct behaviors based on the apply parameter. This distinguishes it from siblings like evaluate_session (which confirms safety) and create_simulation_session (which creates the session).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use after evaluate_session confirms the changes are safe.' This clarifies the workflow sequence. However, it does not explicitly mention when not to use this tool or provide alternative tools for other scenarios, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_simulation_sessionA
Create a new speculative code session for simulating edits without committing to disk. Returns a session ID. Baseline diagnostics are captured lazily on first edit per file. Use this to explore what-if scenarios before applying changes.
| Name | Required | Description | Default |
|---|---|---|---|
| language | Yes | ||
| workspace_root | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers key behavioral traits: it's speculative (no disk commit), returns a session ID, and captures diagnostics lazily. However, it omits details like whether the session is temporary or how to clean up.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences front-load the core purpose, then add behavioral detail. No redundant words; each sentence delivers unique value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers purpose and behavior for a simple 2-parameter tool with no output schema. However, missing parameter details reduce completeness; the agent must guess valid inputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 the parameters 'language' or 'workspace_root' beyond their names. The description adds no semantic meaning, leaving the agent to infer acceptable values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a session for simulating edits without disk writes, returns a session ID, and mentions lazy diagnostics. It distinguishes from siblings like simulate_edit and commit_session by focusing on what-if scenarios.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this to explore what-if scenarios before applying changes,' providing clear context. It does not explicitly state when not to use it or name alternatives, but the sibling list implies other tools for direct application.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
destroy_sessionA
Destroy a simulation session and release all resources. Call this after commit or discard to clean up. Sessions in terminal states (committed, discarded, destroyed) cannot be reused.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral details. It mentions resource release and terminal states, but lacks information on side effects, permissions, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, concise, and front-loaded with the core purpose. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool (one parameter, no output schema, no annotations), the description covers the essential context: when to call it and constraints on session states. Missing details about response format or errors are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% coverage for parameter descriptions. The description does not add any additional meaning for the 'session_id' parameter beyond what the schema provides (name and type).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Destroy' and the resource 'simulation session', and explicitly mentions 'release all resources'. This distinguishes it from sibling tools like commit_session or discard_session.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies when to call this tool: 'after commit or discard to clean up', and warns that sessions in terminal states cannot be reused. However, it doesn't explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_lsp_serversA
Scan a workspace directory for source languages and check PATH for the corresponding LSP server binaries. Returns detected workspace languages (ranked by prevalence), installed servers with their paths, and a suggested_config array ready to paste into the agent-lsp MCP server args. Use this to set up agent-lsp for a new project or verify your configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_dir | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool scans the workspace directory, checks PATH for binaries, and returns a structured result. It does not mention side effects (likely none) or edge cases like missing directories, but for a read-only scan tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both substantive. The first sentence packs the core functionality and return values; the second provides a clear usage tip. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description sufficiently explains the return value (languages, servers, suggested_config). It does not cover error handling or what happens if the workspace_dir is invalid, but for a setup tool the description covers the typical use case well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description does not add any details about the single parameter 'workspace_dir' beyond its name. The parameter is self-explanatory, but the description could clarify expected format (e.g., absolute path) or constraints. This adds no value beyond the schema definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it scans a workspace directory for source languages and checks PATH for LSP server binaries. It specifies the return value: detected languages, installed servers, and a suggested_config. This differentiates it from sibling tools like 'restart_lsp_server' or 'get_server_capabilities'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this to set up agent-lsp for a new project or verify your configuration.' It provides clear context for when to use the tool, but does not mention when not to use it or name alternative siblings directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
did_change_watched_filesA
Notify the language server that files have changed on disk outside the editor (workspace/didChangeWatchedFiles). Use this after writing files directly to disk so the server refreshes its caches. Change types: 1=created, 2=changed, 3=deleted. File URIs must use the file:/// scheme.
| Name | Required | Description | Default |
|---|---|---|---|
| changes | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses change types and URI scheme requirement, but lacks details on error handling, side effects, or confirmation. Adequate for a simple notification tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with purpose, no filler. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, usage context, parameter details. No output schema needed. Could mention that changes array items should be objects with 'uri' and 'type' fields, but the description implies that structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema provides minimal information (array of any items). Description adds critical meaning by explaining the change types and URI scheme, which the schema lacks. Without description, agent would have no clue about expected structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool's purpose: notifying the language server of file changes on disk. Specifies the LSP method, and the description differentiates it from sibling tools like open_document or close_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use: after writing files directly to disk. This guides the agent on the appropriate context, though it doesn't mention when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discard_sessionA
Discard a simulation session and revert all in-memory changes by restoring baseline content. Use when simulation results show the changes would introduce errors.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It states 'revert all in-memory changes by restoring baseline content,' which is clear about the core action. However, it does not disclose side effects such as whether the session is permanently removed or if the session ID must be valid, leaving some 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero wasted words. Every sentence adds value: the first explains the action, the second gives usage context. Highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one param, no output schema, no annotations), the description covers the basic purpose and a usage condition. However, it lacks details about post-discard state (e.g., session reuse), error handling for invalid IDs, or any prerequisites. Slightly incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no parameter descriptions). The description does not elaborate on the session_id parameter beyond its name, so it adds no semantic value. For a tool with a single parameter, the description should clarify what session_id represents or where to obtain it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'discard' and resource 'simulation session', and explains the effect: reverting in-memory changes by restoring baseline content. It also provides a usage condition, distinguishing it from related siblings like commit_session or create_simulation_session.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use when simulation results show the changes would introduce errors,' providing a clear trigger. Does not explicitly mention when not to use or alternatives like commit_session, but the condition is sufficiently specific.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluate_sessionA
Evaluate a simulation session by comparing current diagnostics against baselines. Returns errors introduced, errors resolved, net delta, and confidence (high for file scope, eventual for workspace). Use after simulate_edit to assess impact before committing.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | ||
| session_id | Yes | ||
| timeout_ms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. It describes return values and confidence levels (high for file scope, eventual for workspace). However, it does not mention side effects, idempotency, or whether it mutates state, leaving some 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first defines purpose and output, second gives usage guidance. Extremely concise, front-loaded, and every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, usage, and return values adequately given no output schema. However, parameter details are missing, which is a gap for a tool with 3 parameters and no schema description. It is minimally complete but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 3 parameters with 0% description coverage in the schema. The description mentions file vs workspace scope in the context of confidence but does not explicitly document the 'scope' parameter or explain 'session_id' or 'timeout_ms'. Parameter semantics are underdeveloped.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: evaluating a simulation session by comparing diagnostics against baselines. It lists specific outputs (errors introduced, errors resolved, net delta, confidence) which distinguishes it from siblings like simulate_edit or simulate_chain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Use after simulate_edit to assess impact before committing.' This provides clear context and distinguishes from other tools in the session lifecycle.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_commandA
Execute a workspace command via LSP. Commands are server-defined identifiers returned by code actions (in the command field of a CodeAction). Use this after get_code_actions to trigger a server-side operation such as applying a refactoring, generating code, or running a server-specific action. Returns the server-defined result or null.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | ||
| arguments | No |
TDQS
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 mentions that the tool triggers a server-side operation and returns a server-defined result or null, but it does not disclose potential side effects, destructiveness, authentication requirements, or error behavior. The description is adequate but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at two sentences, each serving a clear purpose: the first states the action and links to code actions, the second provides usage context and return information. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (2 params, no output schema), the description covers the essential task, source of commands, and return type. It lacks details on error handling or edge cases, but for a command execution tool, the provided information is mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description partially compensates by explaining that the 'command' parameter is a server-defined identifier from code actions. The 'arguments' parameter is not elaborated beyond being optional and an array. Some value is added, but full parameter understanding still requires inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool executes a workspace command via LSP, explicitly linking it to code actions (command field of CodeAction). This distinguishes it from siblings like get_code_actions (which retrieves actions) and apply_edit (which applies edits). The verb 'execute' and resource 'workspace command' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises 'Use this after get_code_actions' and provides concrete examples of when to use it (refactoring, generating code, server-specific action). It also mentions the return type. However, it does not explicitly state when not to use it or mention alternatives among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
format_documentA
Get formatting edits for an entire document via LSP. Returns TextEdit[] describing the changes needed to format the file according to the language server's style rules. The edits are returned for inspection — they are NOT applied automatically. Use this to see what formatting changes a formatter would make.
| Name | Required | Description | Default |
|---|---|---|---|
| tab_size | No | ||
| file_path | Yes | ||
| language_id | No | ||
| insert_spaces | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It discloses that the tool is read-only (inspection only) and uses LSP, and that edits are returned but not applied. This provides sufficient behavioral context for safe usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. Front-loaded with the action and outcome. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters and no output schema or annotations, the description omits parameter explanations and return format details beyond TextEdit[]. It is complete for the core purpose but lacks context for correct parameter usage, making it minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%; the description does not explain any of the four parameters (tab_size, file_path, language_id, insert_spaces). The schema is the only source, and the description adds no semantic value beyond the parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Get formatting edits for an entire document via LSP', specifying the verb (get), resource (formatting edits), and context (document via LSP). It distinguishes from sibling tools like format_range which targets ranges.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this to see what formatting changes a formatter would make' and notes edits are not applied automatically, guiding the agent to choose this for preview rather than applying edits. However, it does not explicitly mention when not to use or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
format_rangeA
Get formatting edits for a specific range within a document via LSP (textDocument/rangeFormatting). Returns TextEdit[] for the selected lines/characters only. Use this when you want to format a function, block, or selection rather than the entire file. The edits are NOT applied automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| end_line | Yes | ||
| tab_size | No | ||
| file_path | Yes | ||
| end_column | Yes | ||
| start_line | Yes | ||
| language_id | No | ||
| start_column | Yes | ||
| insert_spaces | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool returns TextEdit[] and that edits are not applied automatically. It does not mention prerequisites like document openness or side effects, but given no annotations, it covers key behavioral traits adequately. Lacks details on permissions or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each adding distinct value: purpose, usage guidance, and behavioral note. No unnecessary words. Information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 parameters and no output schema, the description covers core functionality and usage context well. It lacks parameter documentation and prerequisites, but still provides sufficient context for an agent to understand when and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description provides no detailed explanation of parameters like file_path, start_line, etc. It only alludes to 'selected lines/characters' without mapping to the schema. With 8 parameters and no other documentation, the description fails to add meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get', the resource 'formatting edits for a specific range', and specifies it's via LSP (textDocument/rangeFormatting). It distinguishes from formatting the entire file by mentioning 'specific range' and implicitly from sibling tools like format_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this when you want to format a function, block, or selection rather than the entire file.' It also notes that edits are NOT applied automatically, guiding the user on the expected workflow. This provides clear context for when to choose this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_change_impactA
Enumerate all exported symbols in the specified files, resolve their references across the workspace, and partition callers into test vs non-test. Returns affected_symbols (name, file, line), test_callers (with enclosing test function names), and non_test_callers. Use before editing a file to understand blast radius. Set include_transitive=true to surface second-order callers (callers of callers).
| Name | Required | Description | Default |
|---|---|---|---|
| changed_files | Yes | ||
| include_transitive | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It details what the tool does (enumerate, resolve, partition) and what it returns. However, it does not discuss performance, side effects, or prerequisites (e.g., LSP running).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no wasted words: first defines core action, second lists returns, third provides use case and parameter guidance. Information is front-loaded and relevant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately describes return structure. It covers purpose, parameters, and usage. Missing are prerequisites (e.g., open workspace) but the sibling context implies LSP environment.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description adds meaning: it explains changed_files as 'specified files' and include_transitive as 'second-order callers.' This provides useful context beyond the schema definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly enumerates the tool's actions: it lists exported symbols, resolves references, and partitions callers into test/non-test. It also specifies return fields, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly suggests 'Use before editing a file to understand blast radius.' It explains the include_transitive parameter but does not explicitly mention when not to use or compare with siblings like get_references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_code_actionsA
Get code actions for a specific range in a file. Use this tool to obtain available refactorings, quick fixes, and other code modifications that can be applied to a selected code range. Examples include adding imports, fixing errors, or implementing interfaces.
| Name | Required | Description | Default |
|---|---|---|---|
| end_line | Yes | ||
| file_path | Yes | ||
| end_column | Yes | ||
| start_line | Yes | ||
| language_id | No | ||
| start_column | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavior. It clarifies the tool retrieves actions without applying them, but does not disclose potential side effects, permissions, or read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and includes useful examples. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, and 6 parameters with zero coverage, the description provides a basic understanding but leaves gaps about return values and parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description should explain parameters. It mentions 'specific range in a file' implying line/column and file_path, but ignores language_id and does not specify formats or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves code actions for a specific range in a file, with concrete examples like refactorings and quick fixes. It distinguishes itself from sibling tools such as get_completions or execute_command.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises when to use the tool (obtaining refactorings, quick fixes, etc.) and implies the context (a selected code range). However, it does not explicitly state when not to use it or suggest alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_completionsB
Get completion suggestions at a specific location in a file. Use this tool to retrieve code completion options based on the current context, including variable names, function calls, object properties, and more. Helpful for code assistance and auto-completion at a particular location. Use this when determining which functions you have available in a given package, for example when changing libraries.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | ||
| column | Yes | ||
| file_path | Yes | ||
| language_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. However, it only mentions that completions are context-based and does not explain read-only nature, error handling, or prerequisites like having an open document. The description lacks depth on behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with four sentences, starting with the core purpose and expanding with examples. No irrelevant information is present, though it could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters with no schema descriptions, no output schema, and no annotations, the description is incomplete. It does not explain return format, language support, or edge cases, leaving significant gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, meaning parameters like file_path, line, column, and language_id are not explained. The description only refers to location but does not specify formats, constraints, or which parameter is optional (language_id). This is insufficient for correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves completion suggestions at a specific location, listing examples like variable names and function calls. It distinguishes itself from sibling tools like get_code_actions or get_info_on_location, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool: for code completion options and determining available functions when changing libraries. It does not explicitly state when not to use it, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cross_repo_referencesA
Find all references to a library symbol across one or more consumer repositories. Adds each consumer_root as a workspace folder, waits for indexing, then calls get_references and partitions results by repo. Returns library_references (within the primary repo), consumer_references (map of root → locations), and warnings (roots that could not be indexed). Use before changing a shared library API to find all downstream callers.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | ||
| column | Yes | ||
| language_id | No | ||
| symbol_file | Yes | ||
| consumer_roots | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses key behaviors: adding consumer roots as workspace folders, waiting for indexing, calling get_references, and partitioning results by repo. It also specifies the return structure (library_references, consumer_references, warnings). However, it omits side effects like whether roots are removed after, permissions needed, or potential delays.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively concise (three sentences) with the main purpose front-loaded. It includes necessary behavioral details without excessive verbosity. Minor redundancy exists (e.g., 'partitions results by repo' and then listing the partitions), but overall it's well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (cross-repo search, indexing, partitioning) and no output schema, the description provides a basic outline but lacks details such as error handling, limitations (e.g., number of roots), prerequisites (e.g., LSP running), and behavior when consumer_roots is null. The return types are explained, but completeness is only moderate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 5 parameters with 0% coverage in the description. The description does not explain any parameter's meaning, format, or constraints. For example, it doesn't mention that 'line' and 'column' are 0-based or what 'language_id' refers to. The schema's property names are self-documenting but insufficient for complex tools. The description should compensate but fails.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the function: 'Find all references to a library symbol across one or more consumer repositories.' This specific verb-resource combination distinguishes it from siblings like get_references, which is limited to a single repo. The description also outlines the process (adding consumer roots, waiting for indexing, partitioning results), reinforcing purpose clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context for when to use this tool: 'Use before changing a shared library API to find all downstream callers.' This is helpful, but it does not explicitly state when not to use it or provide alternative tools (e.g., fallback to get_references for single-repo references). The guidance is present but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_diagnosticsA
Get diagnostic messages (errors, warnings) for files. Use this tool to identify problems in code files such as syntax errors, type mismatches, or other issues detected by the language server. When used without a file_path, returns diagnostics for all open files.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that without a file_path, diagnostics for all open files are returned. This is a key behavioral detail, though it does not cover error handling or return format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two well-structured sentences. The first states the purpose, the second elaborates on usage. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately explains the tool's purpose and parameter behavior. It could mention the structure of returned diagnostics, but it is sufficient for selection and basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by explaining the optional file_path parameter's effect: when omitted, diagnostics for all open files are returned. This adds meaning beyond the plain schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get diagnostic messages' and the resource 'for files'. It distinguishes from sibling tools like get_code_actions or get_completions by focusing specifically on errors and warnings from the language server.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool ('to identify problems in code files') and provides context for parameter usage. However, it does not explicitly mention when not to use it or list alternative tools for related tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_highlightsA
Find all occurrences of the symbol at a position within the same file via LSP (textDocument/documentHighlight). Returns ranges and kinds: 1=Text, 2=Read, 3=Write. File-scoped and instant — does not trigger a workspace-wide reference search. Use this to find all local usages of a variable, parameter, or field without the overhead of get_references.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | ||
| column | Yes | ||
| file_path | Yes | ||
| language_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description carries burden. It discloses instant, file-scoped, non-workspace behavior. Lacks mention of document-open requirement or LSP server state, but adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words, front-loaded with purpose and key constraints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema; description explains return ranges and kinds. Missing prerequisites like document must be open, but covers core behavior well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage 0%; description adds context ('at a position') but does not explain each parameter (especially language_id). Baseline 3 due to coverage gap, but partial explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Find all occurrences of the symbol at a position within the same file' and distinguishes from get_references by noting file-scoped vs workspace-wide.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'File-scoped and instant—does not trigger a workspace-wide reference search' and recommends use for local usages without overhead of get_references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_document_symbolsA
Get all symbols defined in a document via LSP (functions, classes, variables, methods, etc.). Returns a hierarchical DocumentSymbol tree or flat SymbolInformation list depending on server support. Use this to get a structural overview of a file. Pass format: "outline" for compact markdown output (name [Kind] :line) optimized for LLM consumption — ~5x fewer tokens than JSON for the same structural information.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | ||
| file_path | Yes | ||
| language_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that return format depends on server support (hierarchical vs flat) and that outline format reduces tokens. Missing details: whether the tool is read-only, triggers LSP communication, or has side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, efficiently covering purpose, return format, usage guidance, and optional format behavior. No filler or redundancy. Information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and 3 parameters, the description covers the core functionality well. It explains the return format variability and optimizes for LLM usage. Missing: description of language_id, expected side effects, or relationship to sibling tools beyond implicit differentiation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 explains the 'format' parameter with a concrete value ('outline') and its benefit, and implies file_path as the document. However, language_id is not mentioned at all, leaving its purpose unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets all symbols defined in a document via LSP, listing specific symbol types. It implicitly distinguishes from workspace-level siblings like get_workspace_symbols by focusing on a single file. The mention of hierarchical vs flat output adds precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage guidance: 'Use this to get a structural overview of a file.' It also promotes the outline format for LLM consumption. However, it does not explicitly exclude use cases like workspace-wide searches or navigation, which are covered by sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_info_on_locationC
Get information on a specific location in a file via LSP hover. Use this tool to retrieve detailed type information, documentation, and other contextual details about symbols in your code. Particularly useful for understanding variable types, function signatures, and module documentation at a specific location in the code. Use this whenever you need to get a better idea on what a particular function is doing in that context.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | ||
| column | Yes | ||
| file_path | Yes | ||
| language_id | No | ||
| position_pattern | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry full burden. It mentions retrieving information but does not disclose that it's a read-only operation, any side effects, or auth requirements. Assumes non-destructive behavior without stating it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with clear first sentence stating purpose. Usage guidance in subsequent sentences is helpful but could be slightly more concise. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 5 parameters, no output schema, and no annotations, the description is incomplete. It does not specify parameter details or describe the return format (hover content). Insufficient for reliable tool use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 any parameters beyond implying the need for file_path, line, column. No explanation of language_id or position_pattern. Agent cannot infer how to use these parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves hover information (type info, documentation) for a code location. It implicitly distinguishes from sibling tools like get_completions or get_signature_help by focusing on 'hover' context, but does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides guidance on when to use (understanding variable types, function signatures, module documentation) but lacks explicit when-not-to-use or alternatives among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inlay_hintsA
Get inlay hints for a range within a document via LSP (textDocument/inlayHint). Inlay hints are inline annotations that IDEs display in source code — typically inferred type names (e.g. : string) and parameter name labels (e.g. count:). Useful in languages with type inference (TypeScript, Rust, Go) to see what the compiler knows without reading every type annotation. Returns an array of InlayHint objects, each with a position, label, and optional kind (1=Type, 2=Parameter). Returns an empty array if the language server does not support inlay hints.
| Name | Required | Description | Default |
|---|---|---|---|
| end_line | Yes | ||
| file_path | Yes | ||
| end_column | Yes | ||
| start_line | Yes | ||
| language_id | No | ||
| start_column | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It states the return format (array of InlayHint objects with position, label, optional kind), includes failure behavior (empty array if server unsupported), and mentions the underlying protocol (LSP). However, it does not explicitly confirm the operation is read-only or side-effect free, which is implied by 'Get' but not made explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (4 sentences) and front-loaded with the action and resource. It efficiently covers what inlay hints are, their utility, and return structure. However, the explanatory sentence about inlay hints could be shortened or integrated with the rest.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and 0% parameter coverage, the description covers the return format (array of InlayHint objects) and a failure scenario but lacks detailed parameter semantics. The use case is mentioned, but critical details like coordinate system (0/1-indexed) and the optional language_id are omitted, leaving gaps for accurate invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 mentions 'range within a document' which broadly relates to start/end line/column parameters but provides no specific explanations or constraints for any of the 6 parameters (e.g., whether lines are 0-indexed, the role of language_id). The description adds minimal meaning beyond the parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'Get', resource 'inlay hints for a range within a document via LSP', and explains the specific LSP method (textDocument/inlayHint). The description distinguishes inlay hints from other LSP features by defining them as inline annotations for type names and parameter labels, which differentiates it from sibling tools like get_completions or get_diagnostics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage contexts ('useful in languages with type inference... to see what the compiler knows') but does not explicitly state when to use this tool versus alternatives or when not to use it. No 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.
get_referencesA
Find all references to a symbol at a specific location in a file via LSP. Returns every location in the codebase where the symbol is used. Use this to determine if a symbol is dead (zero references), to understand call sites before refactoring, or to trace data flow. Results include file path and line/column for each reference.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | ||
| column | Yes | ||
| file_path | Yes | ||
| language_id | No | ||
| position_pattern | No | ||
| include_declaration | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description reveals that results include file path and line/column, and implies LSP interaction. It does not mention prerequisites (e.g., active LSP server) or limitations, leaving some 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: first sentence defines action and method, second describes return, third gives use cases. No wasted words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters with zero schema descriptions and no output schema, the description covers purpose and usage well but fails to detail parameters. Completeness is adequate for basic understanding but incomplete for full agent autonomy.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage for 6 parameters. The description only implicitly references file_path, line, column but does not explain language_id, position_pattern, or include_declaration. This leaves a significant gap for agent understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Find all references to a symbol' with a specific verb and resource, and distinguishes from siblings like get_cross_repo_references and go_to_definition by focusing on LSP-based reference finding across the codebase.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases: 'determine if a symbol is dead', 'understand call sites before refactoring', 'trace data flow'. It lacks explicit when-not-to-use guidance, but the scenarios are clear and appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_semantic_tokensA
Get semantic tokens for a range in a file. Returns each token's type (function, variable, keyword, parameter, type, etc.) and modifiers (readonly, static, deprecated, etc.) with 1-based line/character positions. Use this to understand the syntactic role of code elements — distinct from hover which gives documentation. Only available when the language server supports textDocument/semanticTokens.
| Name | Required | Description | Default |
|---|---|---|---|
| end_line | Yes | ||
| file_path | Yes | ||
| end_column | Yes | ||
| start_line | Yes | ||
| language_id | No | ||
| start_column | Yes |
TDQS
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 return types, positions, and the dependency on language server capabilities. Read-only nature is implied. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each adding value: action/resource, return details, usage distinction and availability. No redundant information. Well-structured and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters and no output schema or annotations, the description covers core functionality, return data, and constraints. Could include note on error behavior, but overall provides sufficient context for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must explain parameters. It implicitly describes the range parameters (start/end line/column, file_path) and mentions 1-based positions. Missing explanation for 'language_id' parameter, leaving a gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get semantic tokens') and the resource ('for a range in a file'). It specifies what is returned (token type, modifiers, positions) and distinguishes from hover, making tool purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises when to use ('understand syntactic role of code elements') and distinguishes from hover. It also notes the availability constraint (language server support). Could be more explicit about alternatives, but the guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_server_capabilitiesA
Return the language server's capability map and classify every agent-lsp tool as supported or unsupported based on what the server advertised during initialization. Use this to determine which tools will return results before calling them — saves round trips on servers that don't support certain LSP features (e.g. not all servers support type_hierarchy or inlay_hints). Requires start_lsp to have been called first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Clearly explains it returns capability map and classification based on initialization. No side effects mentioned but implied read-only. Sufficiently transparent for a query tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, front-loaded with main action, then usage rationale, then prerequisite. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no parameters, description completely covers what the tool returns, why to use it, and what condition must be met.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters; schema coverage 100%. Description adds no parameter info but none needed. Baseline for no-parameter tool is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Return' and 'classify' with clear resource 'capability map and tool support status'. Distinguishes from sibling tools by being a meta-tool that checks LSP server capabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: to check tool support before calling to save round trips. Provides prerequisite 'Requires start_lsp to have been called first'. Lacks explicit when-not-to-use, but usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_signature_helpA
Get function signature help at a specific location in a file via LSP. Returns available overloads and highlights the active parameter. Use this when the cursor is inside a function call's argument list to understand what parameters the function expects.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | ||
| column | Yes | ||
| file_path | Yes | ||
| language_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the tool's behavior (returns overloads, highlights parameter) and mentions it uses LSP. Though no annotations are provided, the description adequately conveys the read-only nature and typical use, with no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The first sentence states purpose and mechanism; the second provides a usage tip. Perfectly sized for the task.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, and no annotations, the description is functional but incomplete. It lacks parameter details, return value format, and any mention of error conditions. Adequate for a simple LSP tool but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% with no parameter descriptions. The description implies file_path, line, column but does not explicitly map or describe any of the 4 parameters, including the optional language_id. The description adds minimal value over the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns function signature help at a location via LSP, specifying 'returns available overloads and highlights the active parameter'. It distinguishes usage context but does not explicitly differentiate from siblings like get_completions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises 'Use this when the cursor is inside a function call's argument list', providing clear context. However, no when-not or alternative tools are mentioned, such as suggesting get_completions for general completions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_symbol_documentationA
Fetch authoritative documentation for a named symbol from local toolchain sources (go doc, pydoc, cargo doc) without requiring an LSP hover response. Works on transitive dependencies not indexed by the language server. Returns the full doc text, extracted signature, and source tag. Falls back gracefully when the toolchain command fails or the language is unsupported.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | ||
| symbol | Yes | ||
| file_path | No | ||
| language_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Though no annotations are provided, the description details the tool's behavior: fetching from toolchain, returning doc text, signature, source tag, and graceful fallback on failure. This is sufficient for an agent to understand the tool's effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, with each sentence adding value: purpose, method, scope, return contents, and fallback behavior. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no annotations, and no output schema, the description covers the overall purpose and return structure but lacks explanation for format and file_path parameters, leaving some ambiguity for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description must explain parameters. It implicitly covers symbol and language_id, but does not describe format or file_path, leaving their meaning and purpose unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches authoritative documentation for a symbol using local toolchain docs, distinguishing it from LSP-based tools. It specifies supported languages (go, pydoc, cargo doc) and notes it works on transitive dependencies not indexed by the language server.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use this tool (without LSP hover, for transitive dependencies) and mentions graceful fallback, but does not explicitly compare to sibling tools like get_symbol_source or get_document_symbols or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_symbol_sourceA
Return the source code of the innermost symbol (function, method, class, struct, etc.) whose range contains the given cursor position. Calls textDocument/documentSymbol, walks the symbol tree to find the smallest enclosing symbol, then slices the file at that symbol's range. Returns symbol_name, symbol_kind, start_line (1-based), end_line (1-based), and source text. Use line+character or position_pattern (@@-syntax) to specify the cursor. character defaults to 1.
| Name | Required | Description | Default |
|---|---|---|---|
| line | No | ||
| character | No | ||
| file_path | Yes | ||
| language_id | No | ||
| position_pattern | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description discloses the algorithm (calls textDocument/documentSymbol, walks symbol tree, slices file at symbol range) and lists return fields (symbol_name, symbol_kind, start_line, end_line, source text). No annotations are provided, so the description carries full behavioral burden. It could mention error handling (e.g., if no symbol found) but otherwise is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences front-load the main purpose with no redundancy. Every sentence adds value, explaining mechanism, output, and parameter usage efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of LSP symbol resolution, description explains algorithm and output structure. However, it lacks information on error conditions (e.g., no symbol at position) and does not cover language_id parameter. With no output schema, describing return fields helps but is incomplete without error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It adds meaning by describing line, character, and position_pattern usage, including character default. However, language_id is not mentioned, and its purpose remains unclear. Overall, description adds significant value for position parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool returns source code of the innermost symbol at a cursor position, specifying the resource (symbol source) and verb (return). It distinguishes from siblings like get_document_symbols (returns all symbols) by focusing on a specific position-driven selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description explains how to specify cursor position using line+character or position_pattern and notes character defaults to 1. It does not explicitly state when not to use or recommend alternatives, but the context implies it is for retrieving source code of a symbol at a location, which is distinct from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tests_for_fileA
Given a source file path, return the test files that exercise it. Static lookup — no test execution. Go: test.go in same directory. Python: test.py / *_test.py in same dir and tests/ sibling. TypeScript/JS: *.test.ts, *.spec.ts etc. Rust: returns source file itself (tests inline). Does not require start_lsp.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses static nature and absence of test execution. Details language-specific patterns. No annotations provided, so description carries full burden. Does not mention error behavior or return format, but covers core behavior well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each purposeful. Front-loaded with core purpose, then details. No redundant or irrelevant content. Efficiently communicates all necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers input and behavior well with language-specific details. Missing explicit return format description (likely list of file paths), but without an output schema, this is a minor gap. Adequate for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single parameter 'file_path' has no schema description (0% coverage). The description defines it as the source file path, fully compensating for schema gap. Adds clear meaning beyond the type-only schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool finds test files for a given source file path. Specifies static lookup with no test execution. Language-specific patterns differentiate it from siblings like run_tests and detect_lsp_servers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly notes start_lsp is not required. Implies use when static test file discovery is needed, but does not explicitly advise against using when test execution or dynamic analysis is required. Lacks explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workspace_symbolsA
Search for symbols across the entire workspace via LSP. Returns all matching symbols with name, kind, and location. detail_level controls enrichment: omit or use "basic" for names/locations only; use "hover" to also return hover info (type signature + docs) for a paginated window of results. limit (default 3) and offset (default 0) control which symbols get enriched — use offset to step through results without re-running the search.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| offset | No | ||
| detail_level | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the read-only behavior of returning symbols with name, kind, location, and enrichment via detail_level. Since no annotations are provided, the description carries full burden; it does not explicitly state read-only nature or potential side effects, but the LSP context implies safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three efficient sentences: first states purpose and base return, second details detail_level behavior, third explains pagination with defaults. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately specifies return fields (name, kind, location) and enrichment results (hover info). Covers pagination behavior. Missing mention of result limits or handling of large sets, but overall sufficient for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description fully explains all four parameters: detail_level (with valid values 'omit', 'basic', 'hover'), limit (default 3), offset (default 0), and query (search term). It clarifies their effects and pagination usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search for symbols across the entire workspace via LSP' with verb and resource. It distinguishes from sibling tools like get_document_symbols (document-scoped) and go_to_symbol (single symbol) by specifying 'entire workspace' scope and returning multiple symbols with details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use different detail_level values ('omit'/'basic' for names/locations, 'hover' for type signature/docs) and how limit/offset control paginated enrichment. However, it does not contrast with other symbol tools like get_document_symbols for document-specific searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
go_to_declarationA
Jump to the declaration of a symbol at a specific location in a file via LSP. Completes the 'go to X' family alongside go_to_definition, go_to_type_definition, and go_to_implementation. Most useful for languages with separate declaration and definition (e.g., C/C++ header files). Returns the file path and position where the symbol is declared.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | ||
| column | Yes | ||
| file_path | Yes | ||
| language_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the mechanism (LSP) and return value (file path and position), but does not reveal side effects, authentication needs, rate limits, or prerequisites like requiring an open document. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: action/mechanism, family context, usage advice and return value. Front-loaded and to the point with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lacks parameter explanations and does not specify format (e.g., line/column indexing, language_id values). With no output schema, it mentions return value but is incomplete for a 4-parameter tool with zero schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (no parameter descriptions in schema), yet the description provides no explanation of parameters (file_path, line, column, language_id). It does not add value beyond parameter names, which is insufficient for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('jump to declaration') and resource ('symbol at a location in a file via LSP'). It also distinguishes itself from siblings by naming the 'go to X' family and specifying languages like C/C++ where declaration differs from definition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when the tool is most useful (languages with separate declaration/definition) and names the related sibling tools for context. However, it does not explicitly state when not to use it or provide direct comparison to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
go_to_definitionC
Jump to the definition of a symbol at a specific location in a file via LSP. Returns the file path and position where the symbol is defined. Useful for navigating to type declarations, function implementations, or variable assignments across the codebase.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | ||
| column | Yes | ||
| file_path | Yes | ||
| language_id | No | ||
| position_pattern | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must cover behavioral aspects. It mentions LSP and return values, but omits important details like prerequisites (LSP server), error handling, state changes, and performance implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose. No redundant words, but the second sentence could be merged or trimmed slightly without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and 5 parameters with 0% schema coverage, the description is under-specified. It fails to explain return format details, error conditions, or how parameters interact.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%. The description implicitly explains file_path, line, and column via 'symbol at a specific location', but entirely ignores the optional parameters language_id and position_pattern, leaving their purpose ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action ('jump to definition'), the resource ('symbol at a specific location'), and the outcome ('returns file path and position'). However, it does not explicitly differentiate from similar sibling tools like go_to_declaration or go_to_implementation, which is a missed opportunity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides broad usefulness ('navigating to type declarations, function implementations, or variable assignments') but no guidance on when NOT to use this tool or which alternative to choose from the many sibling navigation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
go_to_implementationA
Find all implementations of an interface or abstract method at a specific location in a file via LSP. Returns the file paths and positions of all concrete implementations. Use this to navigate from an interface declaration or abstract method to the concrete classes that implement it.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | ||
| column | Yes | ||
| file_path | Yes | ||
| language_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states it uses LSP and returns file paths and positions, but it does not disclose behavioral details such as whether the file must be open, if an LSP server is required, or how it handles cases with no implementations. With no annotations provided, the description carries the full burden but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long with no redundant information. The first sentence states the action and mechanism, the second provides a usage scenario. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (4 parameters, no output schema, no annotations), the description covers the tool's purpose, usage, and output format. It could be more complete by detailing edge cases or output behavior, but it is sufficient for basic understanding and use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 4 parameters with 0% description coverage. The description adds context that the tool uses a location (file_path, line, column) to find implementations, but does not explain the optional language_id parameter or provide syntax details. It adds some value but insufficiently compensates for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies 'Find all implementations of an interface or abstract method at a specific location in a file via LSP', which is a clear verb+resource combination. It distinguishes from sibling tools like go_to_definition or go_to_declaration by explicitly targeting implementations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage guidance: 'Use this to navigate from an interface declaration or abstract method to the concrete classes that implement it.' However, it does not mention when not to use it or suggest alternatives like get_references or type_hierarchy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
go_to_symbolA
Navigate to a symbol definition by dot-notation name (e.g. "LSPClient.GetReferences", "http.Handler") without needing file_path or line/column. Uses workspace symbol search to locate the definition. Useful when you know the symbol name but not its location.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | ||
| symbol_path | Yes | ||
| workspace_root | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It describes the mechanism ('workspace symbol search') but does not disclose side effects like whether the tool opens a file or changes cursor position. The behavior is partially transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The main purpose is front-loaded, and the description is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 params, no output schema, and many siblings, the description is adequate but could be more complete. It lacks explanation of all parameters and does not describe the return value or behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 implicitly explains the format of 'symbol_path' via examples. The 'language' and 'workspace_root' parameters are not mentioned, leaving gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Navigate to a symbol definition'), specifies the input format (dot-notation), and distinguishes it from siblings by noting it works without file_path or line/column.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool ('when you know the symbol name but not its location') and mentions the method (workspace symbol search). While it doesn't explicitly state when not to use it, the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
go_to_type_definitionA
Jump to the definition of the type of a symbol at a specific location in a file via LSP. Unlike go_to_definition (which goes to where the symbol itself is defined), this navigates to the type declaration. Useful for interface types, type aliases, and class definitions when working with instances or variables.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | ||
| column | Yes | ||
| file_path | Yes | ||
| language_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. While it mentions using LSP and navigating to type declaration, it does not explain prerequisites (e.g., document must be open), side effects (e.g., cursor movement), or return value (e.g., location). Critical behavioral details are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences that are front-loaded with the primary action and then provide context. Every sentence adds value; there is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters, no output schema, no annotations, and no parameter descriptions in the schema, the description should cover more. It lacks information on how to use the parameters (e.g., coordinate system, optionality of language_id), the expected behavior (e.g., does it open a document?), and whether the LSP server must be initialized. The description is insufficient for comprehensive understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the description must compensate. However, it adds no information about parameters beyond their names (file_path, line, column, language_id). The parameter names are self-explanatory to some extent, but the description does not clarify optionality of language_id or expected file path format. Baseline would be 3 for 0% coverage, but the lack of any parameter explanation reduces the score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool jumps to the type definition of a symbol via LSP and explicitly distinguishes it from go_to_definition, which goes to where the symbol itself is defined. The verb 'Jump to' combined with 'type definition' and the contrast with the sibling tool provides high clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by noting it is 'Useful for interface types, type aliases, and class definitions when working with instances or variables.' It contrasts with go_to_definition but does not explicitly state when not to use the tool or mention other alternatives beyond that one sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workspace_foldersA
List all currently active workspace folders. Use this to see which roots the language server is indexing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It accurately describes the tool as a read operation that lists 'currently active' folders. No claims of side effects are made, and the description is consistent with a safe, idempotent query. It could be slightly more explicit about being read-only, but the purpose is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two sentences, both of which add value. The first sentence states the core functionality, and the second provides usage context. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema, no annotations), the description is fully adequate. It explains what the tool does and why to use it. There is no missing information that would hinder an AI agent from selecting or invoking it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so no parameter documentation is needed. The description adds no parameter info, but that's acceptable since there are none. The schema coverage is 100% by default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('list'), the resource ('workspace folders'), and a distinguishing attribute ('currently active'). It also explains the purpose ('see which roots the language server is indexing'), which differentiates it from sibling tools like add_workspace_folder or remove_workspace_folder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool ('to see which roots the language server is indexing'). While it doesn't mention when not to use it or provide direct alternatives, the context of sibling tools implies that this is for inspection, not modification. A slight bonus for clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_documentA
Open a file in the LSP server for analysis. Use this tool before performing operations like getting diagnostics, hover information, or completions for a file. The file remains open for continued analysis until explicitly closed. The language_id parameter tells the server which language service to use (e.g., 'typescript', 'javascript', 'haskell'). The LSP server starts automatically on MCP launch.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| file_path | Yes | ||
| language_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states that 'The file remains open for continued analysis until explicitly closed' and that 'The LSP server starts automatically on MCP launch.' However, it does not mention idempotency, error handling for missing files, or whether reopening a file is allowed. Partial disclosure but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, approximately 70 words, with the most important information in the first sentence. No redundant or filler content. Each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description should cover usage, parameters, and behavior. It covers usage and behavior (file stays open) but does not explain the text parameter, return value, or error conditions. Moderately complete but with notable omissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 explains the language_id parameter with examples ('typescript', 'javascript', 'haskell'), which adds meaning. However, it does not describe the text parameter at all, and file_path is self-explanatory. Partial coverage, leaving one parameter unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Open') and resource ('a file in the LSP server for analysis'), and distinguishes the tool from siblings by noting it is a prerequisite for diagnostic, hover, and completion operations. The sibling list includes similar tools like close_document, making the differentiation effective.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this tool before performing operations like getting diagnostics, hover information, or completions for a file.' This provides clear context for when to use it. It does not mention when not to use or specific alternatives, but the usage guidance is sufficiently clear given the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_renameA
Validate that a rename is possible at the given position before committing to rename_symbol. Returns the range that would be renamed and a placeholder name suggestion, or a message indicating rename is not supported at this position. Use this before rename_symbol to avoid attempting invalid renames. Returns null if the server does not support prepareRename.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | ||
| column | Yes | ||
| file_path | Yes | ||
| language_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses return values and edge case (null if server doesn't support prepareRename). No annotations, so description carries full burden; no missing behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no fluff, efficient. Could be slightly more concise, but remains readable and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers core purpose and return info for a simple validation tool. Missing parameter details (language_id, coordinate system) but overall adequate given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage 0% (no param descriptions in JSON schema). Description does not explain any parameter individually (e.g., format of line/column, purpose of language_id).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool validates rename feasibility before rename_symbol, distinguishing it from the sibling rename_symbol. Describes return values: range, placeholder, or message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this before rename_symbol to avoid attempting invalid renames.' Context is clear, but no exclusions or alternatives provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_workspace_folderA
Remove a directory from the LSP workspace. The language server will stop indexing that folder.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the language server will stop indexing the folder, providing a key behavioral consequence. With no annotations, it partially satisfies transparency, though it could mention side effects or reversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler, front-loading the action and consequence efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers the core action and a key behavioral outcome, though parameter documentation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter 'path' is not described beyond its name. With 0% schema coverage, the description fails to add details on format, absolute vs relative, or constraints, leaving the agent to infer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states that the tool removes a directory from the LSP workspace and stops indexing, distinguishing it from sibling tools like add_workspace_folder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by indicating what the tool does, but lacks explicit guidance on when to use it versus alternatives like list_workspace_folders or conditions for removal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_symbolA
Get a WorkspaceEdit for renaming a symbol across the entire workspace via LSP. Returns the edit object — NOT applied automatically. Use dry_run=true to preview what would change (returns workspace_edit + note). Use position_pattern with @@ marker for reliable position targeting instead of line/column. Inspect the returned WorkspaceEdit then call apply_edit to commit. Optional exclude_globs (array of glob patterns, e.g. ["vendor/", "/*_gen.go"]) skips matching files from the rename — useful for generated code, vendored files, and test fixtures.
| Name | Required | Description | Default |
|---|---|---|---|
| line | No | ||
| column | No | ||
| dry_run | No | ||
| new_name | Yes | ||
| file_path | Yes | ||
| language_id | No | ||
| exclude_globs | No | ||
| position_pattern | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully carries burden. Discloses that edit is not applied automatically, dry_run returns workspace_edit+note, and that position_pattern provides reliable targeting. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is appropriately sized for a complex tool, front-loaded with core purpose, then methodically covers usage patterns. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters, no output schema, and no annotations, description covers all major aspects: core purpose, two usage paths (dry_run vs apply), position targeting, and exclusion patterns. Sufficient for agent to use tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, description adds meaning for key parameters: dry_run, position_pattern, exclude_globs. Explains purpose of position_pattern vs line/column, and how exclude_globs works. Provides guidance beyond raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns a WorkspaceEdit for renaming a symbol across the workspace via LSP. Distinguishes from sibling tools like apply_edit and prepare_rename by specifying it returns an edit object that is not automatically applied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly explains when to use dry_run to preview, recommends position_pattern with @@ marker instead of line/column, instructs to inspect the edit then call apply_edit to commit, and describes exclude_globs for skipping generated files.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restart_lsp_serverA
Restart the LSP server process. Use this if the LSP server becomes unresponsive or after making significant changes to the project structure. Optionally provide a new root_dir to restart with a different workspace root.
| Name | Required | Description | Default |
|---|---|---|---|
| root_dir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Covers action and optional parameter but lacks disclosure of side effects (e.g., loss of state, need to reinitialize).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the action, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Sufficient for a simple tool; covers purpose, use cases, and parameter. Could mention post-restart behavior but not necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has no description for root_dir; description explains it changes workspace root, adding necessary meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Restart the LSP server process' with specific use cases (unresponsive, after project changes), distinguishing from sibling tools like start_lsp.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use scenarios (unresponsive server, significant changes) but does not explicitly mention when not to use or compare with alternatives like start_lsp.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_buildA
Compile the project at workspace_dir using the detected workspace language. Language-specific dispatch (no arbitrary shell execution): go build ./..., cargo build, tsc --noEmit, mypy . (Python typecheck proxy). Optional path param narrows scope. Returns: { success: bool, errors: [{file, line, column, message}], raw: string }. Does not require start_lsp.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| language | No | ||
| workspace_dir | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers key behaviors: language dispatch, no shell execution, optional path narrowing, and return structure. However, potential side effects like build artifact creation are not mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences pack purpose, behavior, and output format with no redundancy. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description covers main use, parameters, and return type. Lacks details on language parameter interaction and path format, but still sufficient for a build tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has no descriptions (0% coverage). The description adds meaning to workspace_dir (project directory) and path (scope narrow), and implies language auto-detection. The 'language' parameter is not explicitly explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it compiles the project using language-specific build commands (go build, cargo build, tsc, mypy), distinguishing it from sibling tools like run_tests or start_lsp.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly notes no arbitrary shell execution and that start_lsp is not required, but does not contrast with other build-like tools or specify when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_testsA
Run the test suite for the detected workspace language. Language-specific dispatch: go test -json ./..., cargo test --message-format=json, pytest --tb=json, npm test. Optional path param narrows scope. Test failure locations are LSP-normalized — paste directly into go_to_definition. Returns: { passed: bool, failures: [{file, line, test_name, message, location}], raw: string }. Does not require start_lsp.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| language | No | ||
| workspace_dir | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers language-specific dispatch, return format, and a notable behavioral trait (LSP-normalized failure locations). It does not mention all side effects but is sufficient for a test runner.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with purpose, followed by key details. No wasted words, though it could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema or annotations, the description covers core functionality, return format, and a useful feature. It could address error cases but is largely complete for a test-running tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description only clarifies 'path' (optional path narrows scope). 'language' and 'workspace_dir' are not explained, leaving the agent to infer their roles from context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs the test suite for the detected workspace language, with specific commands per language. This distinguishes it from siblings like run_build and get_tests_for_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains that start_lsp is not required and that an optional path narrows scope, but does not explicitly compare to siblings or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_log_levelA
Set the server logging level. Use this tool to control the verbosity of logs generated by the LSP MCP server. Available levels from least to most verbose: emergency, alert, critical, error, warning, notice, info, debug. Increasing verbosity can help troubleshoot issues but may generate large amounts of output.
| Name | Required | Description | Default |
|---|---|---|---|
| level | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that higher verbosity generates more output, which is useful. However, it does not mention reversibility, persistence, or side effects beyond output volume.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each serving a purpose: purpose, usage context, and available values. No wasted words; front-loaded with the primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers the core function, parameter values, and a caution about output. No missing critical information for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema defines 'level' as a string with 0% description coverage and no enum values. The description compensates by listing all eight valid levels from least to most verbose, adding essential meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Set the server logging level' and explains it controls verbosity. It lists all available levels, leaving no ambiguity. No sibling tools overlap with this function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use it to control log verbosity and mentions troubleshooting context and potential large output. It lacks explicit when-not-to-use guidance, but the context is clear and adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_chainA
Apply a sequence of edits and evaluate after each step. Returns per-step diagnostics and identifies the safe-to-apply-through step (last step with net delta == 0). Use this to find the safest partial application of a multi-step change. All line/column positions in each edit are 1-indexed.
| Name | Required | Description | Default |
|---|---|---|---|
| edits | Yes | ||
| session_id | Yes | ||
| timeout_ms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses it returns per-step diagnostics and identifies safe-to-apply-through step, and mentions 1-indexed positions. Without annotations, it carries the burden but doesn't state whether it modifies state or other side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each essential: first explains function and output, second gives usage guidance and a critical positional detail. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Explains purpose and outputs, but lacks details on edit format structure and error handling. With no output schema, description should clarify more about return values and edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only the 'edits' parameter gets a hint about 1-indexed positions. No description for session_id or timeout_ms, and edits structure is undocumented despite schema having no descriptions. Schema coverage 0% makes the description insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it applies a sequence of edits and evaluates after each step, with a specific use case for finding the safest partial application. This distinguishes it from siblings like apply_edit and simulate_edit_atomic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using it to find the safest partial application of a multi-step change, implying when to use. However, it doesn't explicitly contrast with alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_editA
Apply a range edit to a file within a simulation session. Changes are held in-memory only. The session captures baseline diagnostics on first edit to each file, then tracks versions for subsequent edits. Returns the new version number after the edit. All line/column positions are 1-indexed (matching editor line numbers).
| Name | Required | Description | Default |
|---|---|---|---|
| end_line | Yes | ||
| new_text | Yes | ||
| file_path | Yes | ||
| end_column | Yes | ||
| session_id | Yes | ||
| start_line | Yes | ||
| start_column | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavioral traits: changes are in-memory only, baseline diagnostics captured on first edit, version tracking, return of new version number, and 1-indexed positions. This covers key aspects without contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences and 69 words, efficiently front-loading the main purpose. Every sentence adds value: the primary action, in-memory nature, diagnostics and versioning, return value, and indexing convention. No redundant or unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 required parameters, no output schema, and no annotations, the description explains the core behavior and return value. It does not cover error conditions or session prerequisites, but the sibling tools (create_simulation_session, commit_session) imply the needed context. Adequate for a tool in a larger suite.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 provides context like 'range edit' and '1-indexed' but does not individually describe each of the 7 parameters (e.g., session_id, file_path, start_line, etc.). The description adds partial meaning but insufficient for complete clarity without schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'apply' and the resource 'range edit to a file within a simulation session'. It distinguishes from siblings like 'apply_edit' by emphasizing the simulation session context and in-memory nature. The one-indexing detail further clarifies the tool's behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly suggests usage within simulation sessions by mentioning in-memory changes and baseline diagnostics, but it does not explicitly state when to use this tool over alternatives like 'simulate_edit_atomic' or 'apply_edit'. No when-not-to-use or exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_edit_atomicA
One-shot atomic operation: create session, apply edit, evaluate, and destroy. Returns evaluation result. Use for quick what-if checks without managing session lifecycle manually. Requires start_lsp to be called first. All line/column positions are 1-indexed. net_delta: 0 means the edit is safe to apply.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | ||
| end_line | Yes | ||
| language | No | ||
| new_text | Yes | ||
| file_path | Yes | ||
| end_column | Yes | ||
| session_id | No | ||
| start_line | Yes | ||
| timeout_ms | No | ||
| start_column | Yes | ||
| workspace_root | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the compound operation, return of evaluation result, 1-indexed positions, and meaning of net_delta:0. However, it omits error handling and side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences front-loaded with purpose. Efficient and no wasted words, though could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 parameters, no annotations, and no output schema, the description should provide detailed parameter explanations and return value format. It only covers positions and net_delta, leaving major gaps for a complex atomic operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 11 parameters with 0% description coverage. Description only clarifies that line/column positions are 1-indexed and mentions return field net_delta. No explanation for other parameters like workspace_root, language, scope, timeout_ms, leaving significant gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool performs an atomic operation: create session, apply edit, evaluate, and destroy. It distinguishes from siblings like simulate_edit and simulate_chain by emphasizing lifecycle management and one-shot nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use for quick what-if checks without managing session lifecycle manually' and 'Requires start_lsp to be called first', providing clear when-to-use and prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_lspA
Initialize or reinitialize the LSP server with a specific project root directory. Call this before using get_references, get_info_on_location, or get_diagnostics when working in a project different from the one the server was started with. root_dir should be the workspace root (directory containing go.mod, package.json, Cargo.toml, etc.). Optional language_id (e.g. "go", "typescript", "rust") selects a specific configured server in multi-server mode — use this when working in a mixed-language repo to ensure the correct server handles the workspace. If unsure which server is active, call get_server_capabilities first.
| Name | Required | Description | Default |
|---|---|---|---|
| root_dir | Yes | ||
| language_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry the burden. It explains that the tool initializes/reinitializes server state, which is a side effect, but doesn't detail error conditions, rate limits, or what happens on repeated calls. Adequate but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, front-loaded with purpose, and each sentence adds useful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description covers purpose, usage, and parameters well. It could mention return value or error handling, but the tool's role as an initializer makes the description reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, so description fully compensates. It explains root_dir as workspace root with concrete examples (go.mod, etc.) and language_id as optional for multi-server mode with usage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it initializes or reinitializes the LSP server with a specific root directory. It also lists dependent tools (get_references, get_info_on_location, get_diagnostics), distinguishing it from sibling tools that perform other operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it: before certain tools when changing projects. Provides guidance on root_dir and language_id, including when to use the latter (mixed-language repos) and the alternative get_server_capabilities if unsure.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
type_hierarchyA
Show type hierarchy for a type at a position. Returns supertypes (parent classes/interfaces), subtypes (subclasses/implementations), or both depending on the direction parameter. Direction defaults to "both". Use this to understand class and interface inheritance relationships.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | ||
| column | Yes | ||
| direction | No | ||
| file_path | Yes | ||
| language_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description explains direction parameter behavior and default, but no other behavioral details like side effects, prerequisites, or performance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundant words, front-loaded with the main action. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description at least mentions return types (supertypes/subtypes). Lacks error scenarios or prerequisites. Adequate but not thorough for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and description only explains 'direction' parameter. Does not clarify 'file_path', 'language_id', 'line', 'column', which are typical for positional tools but still undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Show' and resource 'type hierarchy', differentiating from sibling 'call_hierarchy' by specifying inheritance relationships.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states use case: 'use this to understand class and interface inheritance relationships.' Lacks explicit when-not-to-use or alternatives but context is clear.
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. Dates show when Glama detected each change.
45 tool updates
v0.16.0- Added
add_workspace_folder - Added
apply_edit - Added
call_hierarchy - Added
close_document - Added
commit_session - Added
create_simulation_session - Added
destroy_session - Added
detect_lsp_servers - Added
did_change_watched_files - Added
discard_session - Added
evaluate_session - Added
execute_command - Added
format_document - Added
format_range - Added
get_change_impact - Added
get_code_actions - Added
get_completions - Added
get_cross_repo_references - Added
get_diagnostics - Added
get_document_highlights - Added
get_document_symbols - Added
get_info_on_location - Added
get_inlay_hints - Added
get_references - Added
get_semantic_tokens - Added
get_server_capabilities - Added
get_signature_help - Added
get_symbol_documentation - Added
get_symbol_source - Added
get_tests_for_file - Added
get_workspace_symbols - Added
go_to_declaration - Added
go_to_definition - Added
go_to_implementation - Added
go_to_symbol - Added
go_to_type_definition - Added
list_workspace_folders - Added
open_document - Added
prepare_rename - Added
remove_workspace_folder - Added
rename_symbol - Added
restart_lsp_server - Added
run_build - Added
run_tests - Added
set_log_level
45 tool updates
v0.15.0- Removed
add_workspace_folder - Removed
apply_edit - Removed
call_hierarchy - Removed
close_document - Removed
commit_session - Removed
create_simulation_session - Removed
destroy_session - Removed
detect_lsp_servers - Removed
did_change_watched_files - Removed
discard_session - Removed
evaluate_session - Removed
execute_command - Removed
format_document - Removed
format_range - Removed
get_change_impact - Removed
get_code_actions - Removed
get_completions - Removed
get_cross_repo_references - Removed
get_diagnostics - Removed
get_document_highlights - Removed
get_document_symbols - Removed
get_info_on_location - Removed
get_inlay_hints - Removed
get_references - Removed
get_semantic_tokens - Removed
get_server_capabilities - Removed
get_signature_help - Removed
get_symbol_documentation - Removed
get_symbol_source - Removed
get_tests_for_file - Removed
get_workspace_symbols - Removed
go_to_declaration - Removed
go_to_definition - Removed
go_to_implementation - Removed
go_to_symbol - Removed
go_to_type_definition - Removed
list_workspace_folders - Removed
open_document - Removed
prepare_rename - Removed
remove_workspace_folder - Removed
rename_symbol - Removed
restart_lsp_server - Removed
run_build - Removed
run_tests - Removed
set_log_level
50 tool updates
v0.11.1- Added
add_workspace_folder - Added
apply_edit - Added
call_hierarchy - Added
close_document - Added
commit_session - Added
create_simulation_session - Added
destroy_session - Added
detect_lsp_servers - Added
did_change_watched_files - Added
discard_session - Added
evaluate_session - Added
execute_command - Added
format_document - Added
format_range - Added
get_change_impact - Added
get_code_actions - Added
get_completions - Added
get_cross_repo_references - Added
get_diagnostics - Added
get_document_highlights - Added
get_document_symbols - Added
get_info_on_location - Added
get_inlay_hints - Added
get_references - Added
get_semantic_tokens - Added
get_server_capabilities - Added
get_signature_help - Added
get_symbol_documentation - Added
get_symbol_source - Added
get_tests_for_file - Added
get_workspace_symbols - Added
go_to_declaration - Added
go_to_definition - Added
go_to_implementation - Added
go_to_symbol - Added
go_to_type_definition - Added
list_workspace_folders - Added
open_document - Added
prepare_rename - Added
remove_workspace_folder - Added
rename_symbol - Added
restart_lsp_server - Added
run_build - Added
run_tests - Added
set_log_level - Added
simulate_chain - Added
simulate_edit - Added
simulate_edit_atomic - Added
start_lsp - Added
type_hierarchy
50 tool updates
v0.10.0- Removed
add_workspace_folder - Removed
apply_edit - Removed
call_hierarchy - Removed
close_document - Removed
commit_session - Removed
create_simulation_session - Removed
destroy_session - Removed
detect_lsp_servers - Removed
did_change_watched_files - Removed
discard_session - Removed
evaluate_session - Removed
execute_command - Removed
format_document - Removed
format_range - Removed
get_change_impact - Removed
get_code_actions - Removed
get_completions - Removed
get_cross_repo_references - Removed
get_diagnostics - Removed
get_document_highlights - Removed
get_document_symbols - Removed
get_info_on_location - Removed
get_inlay_hints - Removed
get_references - Removed
get_semantic_tokens - Removed
get_server_capabilities - Removed
get_signature_help - Removed
get_symbol_documentation - Removed
get_symbol_source - Removed
get_tests_for_file - Removed
get_workspace_symbols - Removed
go_to_declaration - Removed
go_to_definition - Removed
go_to_implementation - Removed
go_to_symbol - Removed
go_to_type_definition - Removed
list_workspace_folders - Removed
open_document - Removed
prepare_rename - Removed
remove_workspace_folder - Removed
rename_symbol - Removed
restart_lsp_server - Removed
run_build - Removed
run_tests - Removed
set_log_level - Removed
simulate_chain - Removed
simulate_edit - Removed
simulate_edit_atomic - Removed
start_lsp - Removed
type_hierarchy
50 tool updates
v0.1.0- First observed
add_workspace_folder - First observed
apply_edit - First observed
call_hierarchy - First observed
close_document - First observed
commit_session - First observed
create_simulation_session - First observed
destroy_session - First observed
detect_lsp_servers - First observed
did_change_watched_files - First observed
discard_session - First observed
evaluate_session - First observed
execute_command - First observed
format_document - First observed
format_range - First observed
get_change_impact - First observed
get_code_actions - First observed
get_completions - First observed
get_cross_repo_references - First observed
get_diagnostics - First observed
get_document_highlights - First observed
get_document_symbols - First observed
get_info_on_location - First observed
get_inlay_hints - First observed
get_references - First observed
get_semantic_tokens - First observed
get_server_capabilities - First observed
get_signature_help - First observed
get_symbol_documentation - First observed
get_symbol_source - First observed
get_tests_for_file - First observed
get_workspace_symbols - First observed
go_to_declaration - First observed
go_to_definition - First observed
go_to_implementation - First observed
go_to_symbol - First observed
go_to_type_definition - First observed
list_workspace_folders - First observed
open_document - First observed
prepare_rename - First observed
remove_workspace_folder - First observed
rename_symbol - First observed
restart_lsp_server - First observed
run_build - First observed
run_tests - First observed
set_log_level - First observed
simulate_chain - First observed
simulate_edit - First observed
simulate_edit_atomic - First observed
start_lsp - First observed
type_hierarchy
TDQS
Each tool targets a distinct LSP operation or workflow step. Navigation tools (go_to_definition, go_to_declaration, go_to_implementation, go_to_type_definition, go_to_symbol) are clearly differentiated by which aspect of the symbol they resolve. Simulation tools form a clear pipeline (create, edit, evaluate, commit/discard/destroy) with no overlap. All tools have unique purposes.
Tool names consistently follow a verb_noun pattern (e.g., open_document, get_references, rename_symbol). Some use 'get_' vs 'simulate_' but the pattern is uniform. Even compound names like simulate_edit_atomic follow the same convention. No mixed cases or unrelated verbs.
50 tools is high but justified by the comprehensive coverage of LSP features and additional utilities (simulation, build, test, cross-repo references). A few tools could potentially be merged (e.g., simulate_edit and simulate_edit_atomic) but overall the count reflects the server's ambition and the complexity of code analysis.
The tool set covers the full lifecycle of code interaction: document management, navigation, diagnostics, editing (with simulation), formatting, refactoring, testing, and building. It also includes workspace management, cross-repo references, and server introspection. No obvious gaps for an LSP-based code agent.
Maintenance
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
MCP server for building and testing AI agents with multi-model experimentation and insights.
Real-time chat for AI agents. Claude Code, Cursor, Cline and Codex join channels over MCP.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server that combines Read+Edit file operations into single tool calls. 80-95% fewer tool calls formulti-file refactoring across Claude, Cursor, Windsurf, and more.3213MIT
- AlicenseNot gradedqualityBmaintenanceLocal-first code intelligence and safety layer for AI coding agents. MCP server exposes dependency graph, impact analysis, and AST-compressed repo context, backed by typed local memory, patch-scope safety gates, and git-independent transaction rollback.1MIT
- AlicenseNot gradedqualityAmaintenanceLocal-first MCP server that provides project context, verification gates, and structured tools for coding agents to discover knowledge, run diagnostics, and execute allowlisted commands within a repository.35MIT
- AlicenseNot gradedqualityAmaintenanceA persistent code-intelligence MCP server that builds a queryable knowledge graph of your codebase, enabling AI assistants to perform cross-file structural reasoning, dependency analysis, and blast radius detection.6MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/blackwell-systems/agent-lsp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server