sharplens-mcp
SharpLensMcp is a Model Context Protocol (MCP) server providing 67 AI-optimized, compiler-accurate tools for deep semantic analysis, navigation, refactoring, and code generation in .NET/C# projects using Microsoft Roslyn.
Navigation & Discovery
Go to definitions, find all references (classified as read/write/invocation/cast), find implementations of interfaces/abstract members
Search symbols with glob patterns (e.g.,
*Handler,Get*) or complex semantic filters (async status, accessibility, attributes)Get type hierarchies, base/derived types, callers, call graphs, method overloads, and attribute usages
Inspect external NuGet/BCL assembly types with XML docs
Semantic Analysis
Get compiler errors, warnings, and analyzer diagnostics (StyleCop, Roslynator, etc.)
Analyze data flow (variable assignments/reads/writes) and control flow (branching, reachability)
Detect unused/dead code, measure complexity metrics (cyclomatic, nesting, LOC, cognitive), find circular dependencies
Check type compatibility, analyze change impact (what breaks if you rename/modify a symbol), validate code snippets without writing to disk
Refactoring
Safely rename symbols across the entire solution, change method signatures (add/remove/reorder parameters)
Extract methods, extract variables, inline variables, extract interfaces, encapsulate fields into properties
Organize/remove unused
usingdirectives and format documents (single or batch)Access and apply 100+ built-in Roslyn code actions and fixes at any position
Code Generation
Generate constructors,
Equals/GetHashCode/==/!=operators, andArgumentNullExceptionnull-check guardsGenerate stub implementations for missing interface/abstract members
Project & Solution Insights
Load
.sln/.slnxsolutions, sync file changes, view project structure and dependency graphs (JSON or Mermaid)List NuGet dependencies, scan DI registrations (
AddScoped/AddTransient/AddSingleton), detect reflection/dynamic usageList active source generators and view their generated output
Get composite project health dashboards (diagnostics + unused code + coupling), detect god objects, find untested public surface
Compound & Infrastructure Tools
Single-call type overviews, method analyses, and file summaries
Batch operations for method sources, members, and usings to reduce round trips
Health check server status
Enables comprehensive .NET/C# code analysis through Microsoft Roslyn, providing semantic understanding of C# codebases including navigation, refactoring, diagnostics, and code generation capabilities.
Provides tools to analyze NuGet package dependencies across .NET projects, listing packages per project and detecting dependency relationships within the solution.
SharpLensMcp
A Model Context Protocol (MCP) server providing 92 AI-optimized tools for .NET/C# semantic code analysis, navigation, refactoring, and code generation using Microsoft Roslyn.
Built for AI coding agents - provides compiler-accurate code understanding that AI cannot infer from reading source files alone.
Installation
Via NuGet (Recommended)
dotnet tool install -g SharpLensMcpThen run with:
sharplensVia npm
npx -y sharplens-mcpBuild from Source
dotnet build -c Release
dotnet publish -c Release -o ./publishRelated MCP server: LSP-MCP
Claude Code Setup
Install the tool (pick one):
dotnet tool install -g SharpLensMcp
# or
npx -y sharplens-mcpCreate
.mcp.jsonin your project root:
{
"mcpServers": {
"sharplens": {
"type": "stdio",
"command": "npx",
"args": ["-y", "sharplens-mcp"],
"env": {
"DOTNET_SOLUTION_PATH": "/path/to/your/Solution.sln (or .slnx)"
}
}
}
}Restart Claude Code to load the MCP server
Verify by asking Claude to run a health check on the Roslyn server
Why Use This with Claude Code?
Claude Code has native LSP support for basic navigation (go-to-definition, find references). SharpLensMcp adds deep semantic analysis:
Capability | Native LSP | SharpLensMcp |
Go to definition | ✅ | ✅ |
Find references | ✅ | ✅ |
Find async methods missing CancellationToken | ❌ | ✅ |
Impact analysis (what breaks?) | ❌ | ✅ |
Dead code detection | ❌ | ✅ |
Complexity metrics | ❌ | ✅ |
Safe refactoring with preview | ❌ | ✅ |
Batch operations | ❌ | ✅ |
Configuration
Environment Variable | Description | Default |
| Path to | None (must call |
| Use absolute paths instead of relative |
|
| Logging verbosity: |
|
| Timeout for long-running operations |
|
| Maximum diagnostics to return |
|
| Enable semantic model caching |
|
The pre-1.6.0 ROSLYN_* spellings of the last four variables are still read as a fallback for one release; the SHARPLENS_* spelling wins when both are set.
If DOTNET_SOLUTION_PATH is not set, you must call the load_solution tool before using other tools.
Migrating from 1.5.x tool names
Tool names no longer carry the roslyn: prefix — the colon violates the MCP tool-name pattern (^[a-zA-Z0-9_-]{1,64}$), which some clients enforce. Every tool keeps its name minus the prefix:
1.5.x name | 1.6.0 name |
|
|
|
|
|
|
...same rule for all tools... | drop the |
tools/list publishes only the new names. Calls using the old prefixed names are still accepted as aliases for one release and will be removed in the following one.
AI Agent Configuration Tips
AI models may have trained bias toward using their native tools (Grep, Read, LSP) instead of MCP server tools, even when SharpLensMcp provides better capabilities.
To ensure optimal tool usage:
Claude Code: Add to your project's
CLAUDE.md:For C# code analysis, prefer SharpLensMcp tools over native tools: - Use `search_symbols` instead of Grep for finding symbols - Use `get_method_source` instead of Read for viewing methods - Use `find_references` for semantic (not text) referencesOther MCP clients: Configure tool priority in your agent's system prompt
The semantic analysis from Roslyn is more accurate than text-based search, especially for overloaded methods, partial classes, and inheritance hierarchies.
Agent Responsibility: Document Synchronization
Important: SharpLensMcp maintains an in-memory representation of your solution for fast queries. When files are modified externally (via Edit/Write tools), the agent is responsible for synchronizing changes.
When to call sync_documents:
Action | Call sync_documents? |
Used Edit tool to modify .cs files | ✅ Yes |
Used Write tool to create new .cs files | ✅ Yes |
Deleted .cs files | ✅ Yes |
Used SharpLensMcp refactoring tools (rename, extract, etc.) | ❌ No (auto-updated) |
Modified .csproj files | ❌ No (use |
Usage:
# After editing specific files
sync_documents(filePaths: ["src/MyClass.cs", "src/MyService.cs"])
# After bulk changes - sync all documents
sync_documents()Why this design?
This mirrors how LSP (Language Server Protocol) works - the client (editor) notifies the server of changes. This approach:
Eliminates race conditions (agent controls timing)
Avoids file watcher complexity and platform quirks
Is faster than full solution reload
Gives agents explicit control over workspace state
If you don't sync: Queries may return stale data (old method signatures, missing new files, etc.)
Features
92 Semantic Analysis Tools - Navigation, refactoring, code generation, diagnostics, discovery, audit/quality
AI-Optimized Descriptions - Clear USAGE/OUTPUT/WORKFLOW patterns
Structured Responses - Consistent
success/error/dataformat withsuggestedNextToolsZero-Based Coordinates - Clear warnings to prevent off-by-one errors
Preview Mode - Safe refactoring with preview before apply
Batch Operations - Multiple lookups in one call to reduce context usage
Tool Categories
Navigation & Discovery (24 tools)
Tool | Description |
| Semantic info at position |
| Jump to symbol definition |
| All references; each classified read/write/invocation/cast/typeof/nameof/attribute; optional |
| Interface/abstract implementations |
| Impact analysis - who calls this? |
| Multi-hop callers/callees graph with depth bound + cycle detection |
| Reachability + the connecting call path(s) between two methods; follows dispatch, with barriers and a checkpoint |
| Inheritance chain |
| Glob pattern search ( |
| Multi-filter search (async, public, etc.) |
| All members by type name |
| Multiple types in one call |
| Detailed signature by name |
| Find all subclasses |
| Full inheritance chain |
| List attributes on a symbol |
| Enclosing symbol at position |
| All overloads of a method |
| Find types/members by attribute |
| Inspect NuGet/BCL/external assembly types — members + XML docs |
| Map a pasted stack trace to file/line/symbol, mangling undone |
| Extensions applying to a type — classic and C# 14 blocks |
| Full XML docs for a symbol with |
| Navigate to the base member / interface members a member implements |
Analysis (17 tools)
Tool | Description |
| Compiler errors/warnings + configured analyzer findings (StyleCop, Roslynator, NetAnalyzers); matches CI |
| Public-API breaking-change report vs a git ref |
| Which exceptions can escape a method, and where they're caught |
| Structural similarity search (token-shingle fingerprints) |
| Compute dead-code removals + newly unused usings (generation-only) |
| Unreachable basic blocks per method (real CFG, not heuristics) |
| Compute the usings that fix CS0246/CS0103 (generation-only) |
| Variable assignments and usage |
| Branching/reachability |
| What breaks if changed? |
| Can A assign to B? |
| What does this method call? |
| Dead code detection |
| Compile check without writing |
| Cyclomatic, nesting, LOC, cognitive |
| Project and namespace cycle detection |
| Unimplemented interface/abstract members |
Refactoring (16 tools)
Tool | Description |
| Safe rename across solution |
| Add/remove/reorder parameters |
| Extract with data flow analysis |
| Generate interface from class |
| From fields/properties |
| Compute the contents to move a type into its own file (generation-only) |
| Compute a partial-class split for selected members (generation-only) |
| Sort and remove unused |
| Batch organize multiple files |
| Batch format files in project |
| All Roslyn refactorings at position |
| Apply any refactoring by title |
| Generate interface stubs |
| Field to property |
| Inline temp variable |
| Extract expression to variable |
Code Generation (3 tools)
Tool | Description |
| Generate ArgumentNullException guards |
| Equals/GetHashCode/operators |
| Compilable test skeleton for a method (framework auto-detected) |
Compound Tools (7 tools)
Tool | Description |
| Full type info in one call |
| Signature + callers + outgoing calls + location |
| File summary with diagnostics |
| Source code by name |
| Multiple method sources in one call |
| How to create a type |
| Composite audit dashboard: diagnostics + unused + coupling + coverage per project |
Audit & Quality (10 tools)
Tool | Description |
| Detect over-coupled types via efferent + afferent coupling + member-count thresholds |
| Find public surface not reached by any [Fact]/[Theory]/[Test]/[TestMethod] |
| Which tests cover a symbol — the inverse of find_untested_code |
| Where a type is constructed ( |
| Where a type appears in is/as/pattern matches |
| Where an exception type is thrown (optionally derived) |
| Where an exception type is caught (optionally via a base clause) |
| async void / blocking-on-async / unforwarded CancellationToken |
| Enforce namespace/project dependency rules over the type graph |
| Naming audit honoring .editorconfig rules, with conventional defaults |
Discovery (3 tools)
Tool | Description |
| Scan DI service registrations |
| Detect reflection/dynamic usage |
| Surface [InterceptsLocation] call rerouting, generated code included |
Infrastructure (12 tools)
Tool | Description |
| Server status + load fidelity ( |
| PackageReferences/ProjectReferences the compiler never needs |
| Compute the fix for every instance of a diagnostic id (generation-only) |
| Load .sln/.slnx; reports partial loads ( |
| Sync file changes into loaded solution |
| Solution structure |
| Project dependencies |
| Available fixes for a diagnostic |
| Apply a specific code fix |
| NuGet package listing per project |
| List active source generators |
| View generated source code |
Other MCP Clients
For MCP clients other than Claude Code, add to your configuration:
{
"mcpServers": {
"sharplens": {
"command": "sharplens",
"args": [],
"env": {
"DOTNET_SOLUTION_PATH": "/path/to/your/Solution.sln (or .slnx)"
}
}
}
}Usage
Load a solution: Call
load_solutionwith path to.slnor.slnxfile (or setDOTNET_SOLUTION_PATH)Analyze code: Use any of the 92 tools for navigation, analysis, refactoring, audit
Refactor safely: Preview changes before applying with
preview: true
Architecture
MCP Client (AI Agent)
| stdin/stdout (JSON-RPC 2.0)
v
SharpLensMcp
- Protocol handling
- 92 AI-optimized tools
|
v
Microsoft.CodeAnalysis (Roslyn)
- MSBuildWorkspace
- SemanticModel
- SymbolFinderRequirements
.NET 8.0 SDK or later — works with .NET 8, 9, 10, and future versions. Analyzes any .NET 8+ project/solution.
MCP-compatible AI agent
FAQ
Why does the tool target net8.0 — can it analyze my .NET 9 / .NET 10 project?
Yes. net8.0 is the tool's own runtime floor — the Roslyn 5.x packages it builds on require it — not a ceiling on what it can analyze. RollForward lets the installed tool run on newer .NET runtimes, and MSBuildWorkspace loads each project's real target framework from its csproj, so one install analyzes solutions targeting .NET 8, 9, 10, and beyond.
Development
Adding New Tools
Add the method to the matching
src/RoslynService.*.cspartial (Navigation, Analysis, Refactoring, CallAnalysis, …) and return through the shared response envelope:
public async Task<object> YourToolAsync(string param1, int? param2 = null,
CancellationToken cancellationToken = default)
{
EnsureSolutionLoaded();
// Your logic...
return CreateSuccessResponse(
data: new { /* results */ },
suggestedNextTools: new[] { "next_tool_hint" }
);
}Register one
ToolDefinitioninsrc/ToolRegistry.cs— its name, description, input schema, theReadOnlyflag (mutating tools passReadOnly: falseand receive adestructiveHintannotation), and a handler that binds arguments throughJsonRpcParametersand calls your method. The registry drives bothtools/listand dispatch; there is no separate switch to edit. Two tests keep it honest:ToolsListGoldenTestslocks the published schema byte-for-byte (re-capture the golden when a schema change is intentional), andToolSchemaParityTestsasserts every parameter the handler reads is declared in the schema.Build and publish:
dotnet build -c Release
dotnet publish -c Release -o ./publishAdd both test levels — a unit test of the
RoslynServicemethod against a deterministic fixture, AND a wire test through the MCP dispatcher (intests/SharpLensMcp.Tests/Mcp/) with exact value locks plus an error path. This is non-negotiable; see Testing.
Testing
Every test must satisfy the Testing Charter (C1–C9) in tests/SharpLensMcp.Tests/TESTING.md — the standing contract. The headline rules:
Lock exact values (C1): assert a concrete name / count / substring / error code /
(line, column)— neverNotBeNull/> 0/ a type-only check as the sole assertion.Both levels per tool (C4): a unit test against a
Fixtures/*.csfixture and a dispatcher (wire) test that unwrapscontent[0].text, plus an error path.Right casing (C3): in-process Newtonsoft yields PascalCase
error.Code/meta.TotalCount; the MCP wire yields camelCase. Read the casing your test's path actually produces.Deterministic (C7): the suite is serialized via
xunit.runner.json; fixture mutators always restore; the timeout test uses a forced-cancellation seam, not a timing race.Out-of-process spine (C6):
StdioIntegrationTestsvalue-pins one tool per category over the real binary and runs thetools/listgolden over the stdio pipe.Pre-commit gate (C9): build-clean + green is necessary but not sufficient — re-read each changed test and confirm it fails on a wrong answer.
Run the suite:
dotnet test -c ReleaseKey Files
File | Purpose |
| Tool implementations split by concern across ~30 partials (Navigation, Analysis, Refactoring, Inspection, Validation, TypeDiscovery, Discovery, ExternalApi, Quality, Metrics, CodeActions, CodeGeneration, Compound, CallAnalysis, ExceptionFlow, StackTrace, ApiSurface, SimilarCode, …) — each file's name predicts its contents |
| MCP protocol mechanics: JSON-RPC parse loop, |
| The tool surface: one |
| Typed JSON-RPC argument accessors and the |
| Typed records used by the audit composite, constructor generator, and signature-change parser (one type per file) |
License
MIT - See LICENSE for details.
Available Tools
62 toolsroslyn:add_null_checksA
Add ArgumentNullException.ThrowIfNull guard clauses for nullable parameters.
USAGE: Position cursor on a method with reference type parameters. OUTPUT: Generated guard clauses inserted at method start. IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number on the method | |
| column | Yes | Zero-based column number | |
| preview | No | Preview mode (default: true) | |
| filePath | Yes | Absolute path to source file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the full burden. It discloses zero-based coordinates (important) and indicates output is guard clauses inserted at method start. Could mention if existing checks are overwritten, but overall adequate for a simple insertion 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?
Concise at three sentences, structured with USAGE, OUTPUT, IMPORTANT. Every sentence serves a purpose without 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?
Lacks explanation of return value (no output schema). Ambiguous about 'nullable parameters' vs 'reference type parameters'. Missing details on handling parameters with existing checks. For a simple tool, mostly adequate but could be expanded.
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 100% and already describes parameters as zero-based. The description restates the zero-base hint but adds no new meaning for filePath or preview. Default baseline score of 3 applies because schema does the heavy lifting.
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 adds ArgumentNullException.ThrowIfNull guard clauses for nullable parameters. It includes usage instructions and distinguishes from sibling tools that perform other refactorings like change_signature or extract_method.
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?
Usage is clearly described: 'Position cursor on a method with reference type parameters.' It does not explicitly mention when not to use, but the context is sufficient for an AI agent. No sibling tool performs the same function, so alternatives are not needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:analyze_change_impactA
Analyze what would break if you change a symbol. Identifies breaking changes before you make them.
USAGE: analyze_change_impact(filePath, line, column, changeType="rename|changeType|addParameter|removeParameter") OUTPUT: List of impacted locations, whether change is safe, and specific issues at each location. IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number of the symbol | |
| column | Yes | Zero-based column number | |
| filePath | Yes | Absolute path to source file | |
| newValue | No | Optional: new value for rename/changeType | |
| changeType | Yes | Type of change: rename, changeType, addParameter, removeParameter, changeAccessibility, delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses zero-based coordinates, output structure (list of impacted locations, safety, issues), and the purpose. It does not explicitly state it is non-destructive, but 'analyze' implies read-only. Sufficient for agent understanding.
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 plus a usage line, front-loaded with purpose. Every sentence adds value, no fluff. The important note about zero-based coordinates is prominent.
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?
Describes output adequately given no output schema. Could mention prerequisites like symbol existence or error handling. Otherwise, it provides sufficient context for a moderately complex analysis 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 100%, so baseline is 3. The description adds emphasis on zero-based coordinates and enumerates changeType options, but these are already in the schema. Marginal added value.
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 analyzes what would break if a symbol is changed, using a specific verb and resource. It distinguishes from sibling tools like rename_symbol or change_signature that actually perform changes, by emphasizing analysis before making changes.
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 when considering a change to identify breaking changes, but does not explicitly state when not to use it or name alternative tools for performing the actual change. Provides a clear usage pattern with parameter examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:analyze_control_flowA
Analyze branching and reachability in a code region.
Returns: entryPoints, exitPoints, returnStatements, endPointIsReachable.
USAGE: analyze_control_flow("path/to/file.cs", startLine=10, endLine=25)
| Name | Required | Description | Default |
|---|---|---|---|
| endLine | Yes | End line (0-based) | |
| filePath | Yes | Absolute path to source file | |
| startLine | Yes | Start line (0-based) |
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 only states it returns specific fields but does not disclose potential side effects, prerequisites (e.g., code must be compilable), or 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?
The description is short, front-loaded with purpose, lists returns, and provides an example. 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, the description lists return fields. It covers purpose, parameters, and usage. However, constraints like file existence or line range validity are not mentioned, but overall adequate for a simple analysis 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 100% and the description adds a concrete usage example, clarifying how to specify line numbers. This goes beyond the schema alone.
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 analyzes branching and reachability, and lists return fields. This distinguishes it from siblings like analyze_data_flow which focuses on data flow.
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?
An example usage is provided but no explicit guidance on when to use vs alternatives like analyze_data_flow or analyze_method. The context is implied but not fully directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:analyze_data_flowB
Analyze variable assignments and usage in a code region.
Returns: variablesDeclared, alwaysAssigned, dataFlowsIn/Out, readInside/Outside, writtenInside/Outside, captured.
USAGE: analyze_data_flow("path/to/file.cs", startLine=10, endLine=25)
| Name | Required | Description | Default |
|---|---|---|---|
| endLine | Yes | End line (0-based) | |
| filePath | Yes | Absolute path to source file | |
| startLine | Yes | Start line (0-based) |
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 lists return values, indicating a read-only analysis, but does not explicitly state that it does not modify code or require special permissions. This is adequate but not thorough.
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?
Very concise: two sentences plus a usage example. The purpose is front-loaded. Every part earns its place without unnecessary detail.
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, so the description must explain return values. It lists names like 'variablesDeclared' and 'dataFlowsIn/Out' but does not describe their semantics or structure, leaving ambiguity. More detail is needed for completeness.
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 100%, so the description does not need to add much. The usage example illustrates syntax but does not provide additional semantic meaning beyond the schema. Baselines at 3.
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 analyzes variable assignments and usage, and lists specific return fields. It differentiates from siblings by focusing on data flow as opposed to control flow or change impact, though not explicitly.
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?
A usage example is provided, but there is no guidance on when to use this tool versus alternatives like analyze_control_flow. An explicit when-to-use or when-not-to-use statement is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:analyze_methodA
Get comprehensive method analysis in ONE CALL: signature + callers + outgoing calls + location.
USAGE: analyze_method("MyService", "ProcessData") or analyze_method("MyClass", "Calculate", includeCallers=true, includeOutgoingCalls=true)
| Name | Required | Description | Default |
|---|---|---|---|
| typeName | Yes | Containing type name | |
| maxCallers | No | Max callers to return (default: 20) | |
| methodName | Yes | Method name | |
| includeCallers | No | Include caller analysis (default: true) | |
| maxOutgoingCalls | No | Max outgoing calls to return (default: 50) | |
| includeOutgoingCalls | No | Include methods/properties this method calls (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the output includes signature, callers, outgoing calls, and location, but does not mention that the tool is read-only, any performance implications, or the exact format of the location. It provides adequate but not comprehensive behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences plus a usage line. It front-loads the key value proposition and example, with 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, the description explains what is returned (signature, callers, outgoing calls, location). For a tool with 6 parameters and no nested objects, this is largely sufficient. It could be slightly improved by mentioning return structure or error conditions, but it is already complete enough for an agent to understand.
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 already describes all parameters (100% coverage). The description adds value by showing a usage example (analyze_method('MyService', 'ProcessData')) and clarifying defaults (includeCallers=true, includeOutgoingCalls=false), which enriches understanding beyond the schema alone.
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 provides a comprehensive method analysis including signature, callers, outgoing calls, and location in one call. This distinguishes it from sibling tools like 'find_callers' or 'get_outgoing_calls' that offer only individual aspects.
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 gives a concrete usage example and indicates optional parameters, but does not explicitly state when to use this tool versus alternatives. The context implies combining multiple analyses, but lacks 'when to use' or 'when not to use' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:apply_code_action_by_titleA
Apply a code action by its title. Supports exact and partial matching.
USAGE: apply_code_action_by_title(filePath, line, column, title) OUTPUT: Changed files with preview or applied changes WORKFLOW: (1) Call get_code_actions_at_position first, (2) Apply with preview=true, (3) Apply with preview=false IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number | |
| title | Yes | Action title (exact or partial match) | |
| column | Yes | Zero-based column number | |
| endLine | No | Optional: end line for selection | |
| preview | No | Preview mode (default: true). Set to false to apply. | |
| filePath | Yes | Absolute path to source file | |
| endColumn | No | Optional: end column for selection |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses zero-based coordinates and preview mode behavior but omits details on safety (e.g., is the change reversible, permissions required). The added value is moderate.
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 well-structured with clear sections (USAGE, OUTPUT, WORKFLOW, IMPORTANT) and is concise. No unnecessary sentences, though minor reorganization could improve front-loading.
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 parameters, no output schema, and no annotations, the description covers workflow, coordinate system, preview mode, and title matching. It lacks details on error handling but is fairly 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 100% (baseline 3). The description adds context: 'Supports exact and partial matching' for title, and reinforces zero-based coordinates and preview mode usage, enhancing parameter 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 'Apply a code action by its title' and mentions exact and partial matching. It does not explicitly differentiate from sibling tool apply_code_fix, but the purpose is clear.
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 a multi-step workflow: call get_code_actions first, then apply with preview=true, then apply with preview=false. This gives explicit context on when and how to use the tool, though alternatives are not discussed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:apply_code_fixA
Apply automated code fix for a diagnostic. WORKFLOW: (1) Call with no fixIndex to list available fixes, (2) Call with fixIndex and preview=true to preview changes, (3) Call with preview=false to apply. IMPORTANT: Uses ZERO-BASED coordinates.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number (editor line - 1) | |
| column | Yes | Zero-based column number (editor column - 1) | |
| preview | No | Preview mode (default: true). Set to false to apply changes to disk. ALWAYS preview first! | |
| filePath | Yes | Absolute path to source file | |
| fixIndex | No | Index of fix to apply (omit to list available fixes). Call without this parameter first to see available fixes. | |
| diagnosticId | Yes | Diagnostic ID (e.g., CS0168, CS1998, CS4012) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. Discloses listing, previewing, and applying, but omits side effects (e.g., disk writes), permissions, or error behavior. Zero-based coordinate warning is helpful.
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 plus a clear workflow list. No redundancy, front-loaded with purpose. 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?
Despite no output schema, description omits return format (what does listing/preview return?). Could also mention error scenarios. Workflow is described but not fully 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 100%, but description adds value: fixIndex can be omitted to list, preview defaults to true, and always preview first. Emphasizes zero-based coordinates beyond 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?
States 'Apply automated code fix for a diagnostic' and outlines a multi-step workflow. Could better distinguish from siblings like roslyn:apply_code_action_by_title or roslyn:get_code_fixes.
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 an explicit three-step workflow: list, preview, apply. Emphasizes to always preview and uses zero-based coordinates. Does not explicitly state when not to use this tool or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:change_signatureA
Change a method signature and preview impact on all call sites.
ACTIONS: add (new param), remove, rename, reorder parameters. WORKFLOW: (1) Call with preview=true (default) to see affected call sites, (2) Review changes, (3) Call with preview=false to apply. OUTPUT: oldSignature, newSignature, list of call sites needing updates. IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number on the method | |
| column | Yes | Zero-based column number | |
| changes | Yes | Array of changes to apply | |
| preview | No | Preview mode (default: true). Set to false to apply changes. | |
| filePath | Yes | Absolute path to source file containing the method |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: two-step preview/apply process, zero-based coordinates, and output structure (oldSignature, newSignature, call sites). It implies mutation but doesn't detail reversibility or permissions.
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 well-structured with clear sections (ACTIONS, WORKFLOW, OUTPUT, IMPORTANT) and is concise, using minimal sentences to convey essential 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 explains return values (oldSignature, newSignature, call sites) and the preview workflow, making it complete for a refactoring tool with a required preview step.
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 100%, so baseline is 3. The description adds meaningful context beyond the schema: workflow for preview, zero-based coordinate requirement, and enumeration of actions (add, remove, rename, reorder) which clarifies the changes array parameter.
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 modifies a method signature and previews call site impact, listing specific actions (add, remove, rename, reorder) which differentiates it from sibling tools like rename_symbol or extract_method.
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 clear workflow: preview first (preview=true), review changes, then apply (preview=false). However, it does not explicitly mention when not to use or compare to alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:check_type_compatibilityA
Check if one type can be assigned to another. Use before generating assignments or casts.
USAGE: check_type_compatibility(sourceType="MyDerivedClass", targetType="MyBaseClass") OUTPUT: compatible (bool), requiresCast (bool), conversionKind, and explanation of why/why not.
| Name | Required | Description | Default |
|---|---|---|---|
| sourceType | Yes | The source type name (e.g., 'MyDerivedClass') | |
| targetType | Yes | The target type name (e.g., 'MyBaseClass') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden. It discloses the output fields (compatible, requiresCast, conversionKind, explanation), which is useful. However, it does not mention side effects or prerequisites, but given its read-only nature, this is acceptable.
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 extremely concise: two sentences plus a usage example and output fields. Every element is purposeful 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?
Given the tool's simplicity, the description covers the key aspects: what it does, when to use it, and what it returns. No output schema exists, but the description compensates by listing output fields.
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 100%, with both parameters having clear descriptions. The tool description does not add additional meaning beyond the schema, so a baseline score of 3 is appropriate.
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: 'Check if one type can be assigned to another.' It specifies the verb 'check' and the resource 'type compatibility,' distinguishing it from sibling tools that analyze code structure or apply refactorings.
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 before generating assignments or casts.' It also includes a usage example, though 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.
roslyn:dependency_graphA
Visualize project dependencies as a graph. Shows which projects reference which, detects circular dependencies.
OUTPUT: format="json" returns structured data with nodes/edges. format="mermaid" returns diagram syntax. USE CASE: Understand solution architecture, find circular dependencies, plan refactoring.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: 'json' (default) returns structured data, 'mermaid' returns Mermaid diagram syntax |
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 discloses the tool is read-only ('visualize'), returns structured data or diagram syntax, and detects circular dependencies. While it could mention prerequisites like the solution must be loaded, the description provides adequate transparency for the tool's 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 three sentences, front-loaded with purpose, then output details and use cases. Every sentence adds value with no redundancy. It is concise and well-structured for quick parsing.
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 is largely complete. It covers purpose, output format, and use cases. Missing prerequisites (e.g., solution must be loaded) is a minor gap, but overall sufficient for an agent to decide when 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?
The schema has 100% coverage, so baseline is 3. The description adds value by specifying the default format ('json') and clarifying that JSON returns 'structured data', which goes beyond the schema's description. This extra detail helps an agent understand the parameter's effect.
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 (visualize as a graph), the resource (project dependencies), and what it provides (shows references, detects circular dependencies). It distinguishes itself from sibling tools like find_circular_dependencies which likely return a list, and get_project_structure which gives structure, not graph visualization.
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 lists use cases (understand architecture, find circular dependencies, plan refactoring) which imply when to use it. However, it does not explicitly mention when not to use or compare to alternative siblings. The context is clear but lacks explicit differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:encapsulate_fieldA
Convert a field to a property with getter/setter.
USAGE: Position cursor on a field declaration. OUTPUT: Generated property wrapping the field. IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number on the field | |
| column | Yes | Zero-based column number | |
| preview | No | Preview mode (default: true) | |
| filePath | Yes | Absolute path to source file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It mentions conversion and output, but lacks details on whether the tool modifies the file in-place, what the return format is, or how preview mode affects behavior. The zero-based coordinate warning adds useful context.
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 extremely concise: three short sentences covering purpose, usage, output, and an important note. No unnecessary 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 the simple refactoring with 4 parameters and no output schema, the description covers the core action and critical coordinate detail. However, it omits what the tool actually returns (e.g., a code action or modified code) and does not mention side effects or preview behavior, leaving minor 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 100% (baseline 3). The description adds the 'ZERO-BASED coordinates' emphasis, which is not fully captured in schema descriptions, providing extra value. However, it does not explain the 'preview' parameter or other semantics beyond coordinates.
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 'Convert a field to a property with getter/setter', which is a specific verb+resource. It distinguishes from sibling tools like 'rename_symbol' or 'extract_method'.
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 actionable usage: 'Position cursor on a field declaration' and a critical note about zero-based coordinates. However, it does not explicitly state when not to use this tool or compare with alternatives like 'change_signature'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:extract_interfaceA
Generate an interface from a class or struct. Extracts all public instance members (methods, properties, events).
USAGE: Position on class declaration, provide interfaceName="IMyService". OUTPUT: Generated interface code ready to insert. Useful for dependency injection and testability. IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number (editor line - 1) | |
| column | Yes | Zero-based column number (editor column - 1) | |
| filePath | Yes | Absolute path to source file containing the class | |
| interfaceName | Yes | Name for the new interface (e.g., 'IMyService') | |
| includeMemberNames | No | Optional: specific member names to include (omit to include all public members) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses zero-based coordinate requirement and describes output as generated code ready to insert. However, with no annotations, it does not explicitly state whether the tool is read-only or has side effects, leaving behavioral traits partially inferred.
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?
Extremely concise: three brief sentences covering purpose, usage, output, and an important note. Each sentence adds value with no 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 5 parameters with full schema coverage, the description adequately explains purpose, output format, coordinate system, and a use case. The optional includeMemberNames is not elaborated but schema covers 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 coverage is 100%, so baseline is 3. The description adds an example for interfaceName and reiterates zero-based coordinates, but does not significantly deepen understanding 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 the tool generates an interface from a class or struct, extracting public instance members. Distinguishes from siblings like extract_method or extract_variable by specifying the output type and context.
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 usage instructions: position on class declaration and provide interfaceName. Mentions usefulness for dependency injection and testability, giving context. Lacks explicit when-not-to-use or alternative sibling comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:extract_methodA
Extract selected statements into a new method. Uses data flow analysis to determine parameters and return type.
USAGE: Specify startLine/endLine range containing complete statements inside a method. OUTPUT: extractedCode (the new method), replacementCode (the call to insert), detected parameters and return type. WORKFLOW: (1) Preview with preview=true, (2) Apply with preview=false. IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| endLine | Yes | Zero-based end line of selection | |
| preview | No | Preview mode (default: true). Set to false to apply. | |
| filePath | Yes | Absolute path to source file | |
| startLine | Yes | Zero-based start line of selection | |
| methodName | Yes | Name for the new method | |
| accessibility | No | Accessibility: private, public, internal (default: private) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Mentions data flow analysis and zero-based coordinates, but does not disclose that the tool modifies files, requires a loaded solution, or any potential side effects. The output fields are mentioned but not detailed.
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?
Five sentences covering purpose, usage, output, workflow, and a crucial note. Well-structured and front-loaded. Could be slightly condensed but overall 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 provided, but description covers key output fields (extractedCode, replacementCode). Missing prerequisites (e.g., solution loaded) and error conditions. Sufficient for basic usage but not exhaustive.
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 100%, baseline 3. Description adds value by clarifying that startLine/endLine must contain complete statements, preview flag defaults to true, and coordinates are zero-based. This goes beyond schema field 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 identifies the verb 'extract' and the resource 'selected statements into a new method'. It distinguishes itself from siblings like 'extract_variable' by specifying data flow analysis for parameters and return type.
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 usage requirements ('Specify startLine/endLine range containing complete statements inside a method') and a two-step workflow ('Preview then Apply'). Does not explicitly contrast with alternative tools or state when not to use, but the workflow is helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:extract_variableA
Extract an expression to a local variable.
USAGE: Position cursor on or select an expression. OUTPUT: Expression extracted to a new local variable. IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number | |
| column | Yes | Zero-based column number | |
| endLine | No | Optional: end line for selection | |
| preview | No | Preview mode (default: true) | |
| filePath | Yes | Absolute path to source file | |
| endColumn | No | Optional: end column for selection |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full responsibility. It discloses a critical behavioral trait: 'Uses ZERO-BASED coordinates (editor line - 1).' This prevents coordinate errors. No mention of side effects, but for extraction, safety is implied.
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 (three sentences) and front-loaded with the action. It includes an 'OUTPUT' line and a crucial note. Each sentence serves a purpose, but the 'OUTPUT' line could be more specific about return 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?
Despite no output schema, the description only says 'Expression extracted to a new local variable,' lacking details on what the tool returns (e.g., success message, diff, or code action). With 6 parameters and no return info, completeness is adequate 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 coverage is 100%, so baseline is 3. The description adds minimal parameter meaning beyond the schema. It implies the 'line' and 'column' relate to cursor position, but no extra detail on optional parameters like 'preview'.
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 'Extract an expression to a local variable', which is a specific verb and resource. Among siblings, it distinguishes itself from 'extract_method' and 'inline_variable', 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?
The description provides explicit usage guidance: 'Position cursor on or select an expression.' This tells the agent when and how to invoke the tool, though it lacks explicit when-not-to-use or alternative suggestions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:find_attribute_usagesA
Find all types and members decorated with a specific attribute.
USAGE: find_attribute_usages(attributeName: "Authorize") USAGE: find_attribute_usages(attributeName: "HttpGet", projectName: "MyApi")
OUTPUT: List of symbols with the attribute, their kind, arguments, and source location. Use for: finding all API endpoints, authorization points, serialization config, test fixtures.
| Name | Required | Description | Default |
|---|---|---|---|
| maxResults | No | Maximum results (default: 100) | |
| projectName | No | Filter to specific project | |
| attributeName | Yes | Attribute name (e.g. 'Authorize', 'HttpGet', 'Obsolete') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses output details: list of symbols, kind, arguments, source location. No mention of side effects, but appropriate for a read-only search 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?
Concise, well-structured with usage examples and output description. Every sentence provides 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?
With 3 params, no output schema, and no annotations, description covers purpose, usage, and output adequately. Could be more detailed on output format but sufficient.
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 100%, baseline 3. Description adds usage examples demonstrating how to use parameters, which adds value beyond 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?
Description clearly states it finds all types and members decorated with a specific attribute. Examples and use cases make purpose unambiguous and distinct from siblings.
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 use cases like finding API endpoints, authorization points, etc. Lacks explicit when-not-to-use or alternative tools, but 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.
roslyn:find_callersA
Find all methods/properties that call or reference a specific symbol (inverse of find_references). Essential for impact analysis: 'If I change this method, what code will be affected?' IMPORTANT: Uses ZERO-BASED coordinates.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number (editor line - 1) | |
| column | Yes | Zero-based column number (editor column - 1) | |
| filePath | Yes | Absolute path to source file | |
| maxResults | No | Maximum number of call sites to return (default: 100). Results are truncated with a hint if limit is exceeded. |
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 mentions zero-based coordinates but does not disclose read-only nature, authentication, or performance characteristics, which are important 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?
Two concise sentences plus an important note; front-loaded with purpose and 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, the description explains purpose and usage well but lacks details on return format or truncation behavior beyond maxResults hint.
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 100% and each parameter has descriptions. The description adds critical context about zero-based coordinates for line and column, adding value beyond 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 'Find all methods/properties that call or reference a specific symbol' and explicitly distinguishes it as the inverse of find_references, providing a specific verb and resource.
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 gives a clear use case ('impact analysis') and differentiates from find_references, but does not explicitly state when not to use or list alternative sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:find_circular_dependenciesA
Detect cycles in project or namespace dependency graphs.
USAGE: find_circular_dependencies() — project-level cycles USAGE: find_circular_dependencies(level: "namespace") — namespace-level cycles
OUTPUT: Dependency graph with any detected cycles listed. Use for: architecture analysis, identifying tightly coupled components.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | 'project' (default) or 'namespace' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description mentions output format but does not explicitly state it's read-only or disclose any side effects. Behavioral transparency is adequate for a simple detection tool but could be improved.
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?
Very concise: main purpose, two usage lines, output and use case. No unnecessary words. Information is front-loaded 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 and lack of output schema, the description covers what the tool does, how to use it, and what to expect. Could mention read-only nature or behavior when no cycles found, but generally 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 100% for the only parameter 'level'. Description adds usage context beyond schema, showing examples for both values and clarifying default behavior.
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 detects cycles in dependency graphs. Distinguishes from sibling roslyn:dependency_graph by focusing on cycle detection. Uses specific verb 'detect' and resource 'cycles in project or namespace dependency graphs'.
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 two explicit usage patterns (default and with level parameter) and states use case (architecture analysis). Does not mention when not to use or alternatives, but guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:find_implementationsA
Find all implementations of an interface or abstract class. Returns implementing types with their locations. IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number | |
| column | Yes | Zero-based column number | |
| filePath | Yes | Absolute path to source file | |
| maxResults | No | Maximum number of implementations to return (default: 50). Results are truncated with a hint if limit is exceeded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description adds an important behavioral note about zero-based coordinates, but lacks details on search scope, performance, or handling of no results.
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 focused sentences with no fluff; the critical coordinate warning is highlighted with IMPORTANT.
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?
Lacks a description of return format beyond 'types with locations' and no comparison to similar sibling tools, but given the tool's simplicity and no output schema, it is nearly 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 100%, so the description need not add much; it reiterates the zero-based coordinate note already in the schema, adding marginal value.
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 finds implementations of interfaces or abstract classes and returns types with locations, which distinguishes it from siblings like get_derived_types or find_references.
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?
No guidance on when to use this tool vs alternatives (e.g., find_references, get_derived_types) or when not to use it. The description only states the basic function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:find_referencesA
Find all references to a symbol across the entire solution. Returns file paths, line numbers, and code context for each reference. IMPORTANT: Uses ZERO-BASED coordinates (editor line 10 = pass line 9).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number (editor line - 1) | |
| column | Yes | Zero-based column number (editor column - 1) | |
| filePath | Yes | Absolute path to source file containing the symbol | |
| maxResults | No | Maximum number of references to return (default: 100). Results are truncated with a hint if limit is exceeded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the important behavioral trait of zero-based coordinates and states the return format (file paths, line numbers, code context). With no annotations provided, it carries the full burden and does so adequately, though it could mention further behavioral aspects like performance expectations.
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 two sentences and a bolded important note. Every part adds value without 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 moderate complexity and lack of output schema, the description covers purpose, coordinate system, and return content. It could be more explicit about response structure, but overall it is complete enough for agent 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 coverage is 100%, providing a baseline of 3. The description adds extra context by emphasizing zero-based coordinates for line and column, and elaborates on the maxResults parameter with default and truncation behavior, going beyond the 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 tool finds all references to a symbol across the entire solution, specifying the verb, resource, and scope. This distinguishes it from siblings like roslyn:find_callers and roslyn:find_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 lacks guidance on when to use this tool versus alternatives such as find_callers or find_implementations. It does not mention when not to use it or provide context for choosing it over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:find_reflection_usageA
Detect dynamic/reflection-based type and method usage that is invisible to static reference searches.
USAGE: find_reflection_usage() USAGE: find_reflection_usage(projectName: "MyApp", maxResults: 50)
OUTPUT: List of reflection API calls with the API used, context, and location. Use for: finding hidden dependencies before refactoring, security audits, understanding dynamic behavior.
| Name | Required | Description | Default |
|---|---|---|---|
| maxResults | No | Maximum results (default: 100) | |
| projectName | No | Filter to specific project |
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 describes the tool as a detector/reader of reflection usage, outputting a list of calls. It does not mention side effects, destructiveness, or permissions. While likely a safe read, the lack of explicit non-destructive statement and absence of any behavioral nuance (e.g., rate limits) keeps this adequate but not exceptional.
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 extremely concise yet complete. It front-loads the core action, then provides usage examples, output description, and use cases in a well-structured format. Every sentence earns its place with no 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?
The description covers purpose, usage, and output format despite lacking an output schema. It gives clear use cases. However, it omits potential limitations (e.g., can it detect all reflection? performance implications?) and does not specify error conditions. Still, it provides sufficient context for a simple analysis 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 100% with both parameters having descriptions ('Filter to specific project', 'Maximum results (default: 100)'). The description provides usage examples showing both parameters but does not add meaning beyond the schema. Baseline 3 is appropriate.
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 'Detect dynamic/reflection-based type and method usage that is invisible to static reference searches', which is a specific verb+resource. It differentiates itself from static search tools like find_references. Usage examples and output format further clarify its purpose.
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 includes a 'Use for:' section listing contexts like refactoring, security audits, and understanding dynamic behavior. It implies it is complementary to static searches but does not explicitly name sibling tools or state when not to use it. Still, the guidance is clear and context-rich.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:find_unused_codeA
Find unused types, methods, properties, and fields in a project or entire solution. Returns symbols with zero references (excluding their declaration).
USAGE: find_unused_code() for entire solution, or find_unused_code(projectName="MyProject") for specific project. OUTPUT: List of unused symbols with location, kind, and accessibility. Default limit: 50 results.
| Name | Required | Description | Default |
|---|---|---|---|
| maxResults | No | Maximum results to return (default: 50, helps manage large outputs) | |
| projectName | No | Optional: analyze specific project by name, omit to analyze entire solution | |
| includePrivate | No | Include private members (default: true) | |
| includeInternal | No | Include internal members (default: false - usually want to keep internal APIs) | |
| symbolKindFilter | No | Optional: filter by symbol kind (Class, Method, Property, Field) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description covers key behavioral traits: it returns symbols with zero references excluding declarations, includes a default limit of 50 results, and lists output fields (location, kind, accessibility). It does not mention performance implications but is otherwise 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?
Extremely concise: two sentences plus a usage line and output description. No filler, front-loaded with the core purpose. 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?
For a tool with 5 parameters, no output schema, and no annotations, the description provides adequate context: what it does, how to use it, and what it returns. It could mention handling of large results or edge cases, but is generally 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 description coverage is 100%, so baseline is 3. The description adds value by demonstrating the projectName parameter usage and noting the default maxResults, but does not elaborate on other parameters like includePrivate or symbolKindFilter beyond their 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 defines the tool's purpose: finding unused types, methods, properties, and fields in a project or solution. It specifies the scope (entire solution or specific project) and differentiates from sibling tools like find_references and find_callers by focusing on zero references.
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 usage examples with and without a project name, guiding the agent on invocation. While it doesn't explicitly state when not to use it or compare to alternatives, the examples and context are sufficient for typical scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:format_document_batchB
Format multiple documents in a project using Roslyn's NormalizeWhitespace. Ensures consistent indentation, spacing, and line breaks. PREVIEW mode by default - set preview=false to apply changes.
| Name | Required | Description | Default |
|---|---|---|---|
| preview | No | Preview mode (default: true). Set to false to apply changes to disk. ALWAYS preview first! | |
| projectName | No | Optional: Project name to format. If omitted, formats all projects in solution. | |
| includeTests | No | Include test projects (default: true). Set to false to skip projects with 'Test' in the name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits fully. It mentions preview mode and that it applies changes when preview=false, but omits critical details such as side effects on files, required permissions, error handling, or what happens when preview mode returns (e.g., no mention of diff output). This leaves agents underinformed about a mutation operation.
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 extremely concise with two sentences and a clear notice about preview mode. Every sentence adds value, with no unnecessary words. It is well-structured and front-loads the core 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 no output schema and the tool's batch mutation nature, the description should clarify return behavior (e.g., what preview mode returns) and scope (e.g., works on whole solution vs open documents). It mentions project filtering via parameter but not error conditions or performance implications. Adequate but incomplete for an agent to fully trust the 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?
All three parameters have schema descriptions, so baseline is 3. The description does not add any additional meaning beyond the schema; it merely restates the preview constraint already in the parameter description. Schema coverage is 100%, so no extra value from description.
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 formats multiple documents using Roslyn's NormalizeWhitespace, focusing on indentation, spacing, and line breaks. However, it does not explicitly differentiate from sibling tools like organize_usings_batch which also modify whitespace, though the specific mention of NormalizeWhitespace helps narrow the purpose.
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 for whitespace formatting but provides no guidance on when to choose this tool over alternatives like organize_usings_batch or validate_code. The preview mode warning offers some usage context, but lacks explicit when-to-use/when-not-to-use criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:generate_constructorA
Generate a constructor from fields and/or properties of a type.
USAGE: Position on class/struct declaration. Use includeProperties=true for auto-properties. OUTPUT: constructorCode string ready to paste, parameter list, and field assignments. IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number on the type declaration | |
| column | Yes | Zero-based column number | |
| filePath | Yes | Absolute path to source file containing the type | |
| includeProperties | No | Include properties with setters (default: false) | |
| initializeToDefault | No | Use ?? default for nullable types (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, but description adds key behavioral info: output format and zero-based coordinate system. Could mention side effects or permissions, but adequate for a code generator.
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 three-part structure with clear 'USAGE', 'OUTPUT', 'IMPORTANT' sections. No redundancy, but could be slightly more scannable.
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, output, and coordinate system for all 5 parameters. Lacks error handling details but sufficient 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?
Schema covers all 5 parameters. Description adds context for includeProperties and notes zero-based coordinates, adding value beyond 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?
Description clearly states it generates a constructor from fields/properties, with specific action and resource. Differentiates from sibling generation tools like 'generate_equality_members'.
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 usage: position on class/struct declaration and use includeProperties for auto-properties. Lacks exclusions or alternatives but sufficient for intended use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:generate_equality_membersA
Generate Equals, GetHashCode, and == / != operators for a type.
USAGE: Position cursor on a class or struct declaration. OUTPUT: Generated equality members comparing all instance fields and properties. IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number on the type | |
| column | Yes | Zero-based column number | |
| preview | No | Preview mode (default: true) | |
| filePath | Yes | Absolute path to source file | |
| includeOperators | No | Include == and != operators (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description discloses the key behavioral detail of zero-based coordinates. It notes the output compares all instance fields and properties. However, it does not mention any side effects (e.g., file modification) or the behavior of preview mode.
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 very concise, using short sentences and clear sections (USAGE, OUTPUT, IMPORTANT). Every sentence adds necessary 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 the complexity of 5 parameters and no output schema, the description adequately covers the purpose, usage coordinates, and generated output. It could mention error conditions (e.g., if not on a type declaration) but is otherwise 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 100%, so parameters are documented. The description adds clarifying context about zero-based coordinates for line and column, which is crucial for correct invocation. This adds value 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 generates equality members (Equals, GetHashCode, ==/!=) for a type. The verb 'Generate' and resource 'equality members' are specific. While it doesn't explicitly differentiate from sibling tools like generate_constructor, the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises positioning the cursor on a class or struct declaration and uses zero-based coordinates. It implies the context for use but does not explicitly state when to use this tool versus alternatives or provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_attributesB
Find all symbols with specific attributes.
USAGE:
Find obsolete: get_attributes("Obsolete")
Find serializable: get_attributes("Serializable")
Scope to project: get_attributes("Obsolete", scope="project:MyProject")
Scope to file: get_attributes("Obsolete", scope="file:MyClass.cs")
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | 'solution' (default), 'project:Name', or 'file:path' | |
| maxResults | No | Maximum results (default: 100) | |
| attributeName | Yes | Attribute name (e.g., 'Obsolete', 'Serializable', 'JsonProperty') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description lacks behavioral context such as impact on solution, required permissions, or rate limits. It does not disclose any traits beyond the basic operation described in the schema.
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 extremely concise: a single purpose sentence followed by four succinct usage examples. Every sentence adds value, and the most critical 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?
For a simple query tool with complete parameter schema, the description provides adequate context through examples. However, it lacks information about return structure, pagination, or error handling, which would be valuable for a 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 coverage is 100%, so the schema already describes each parameter. The description adds example values (e.g., 'project:MyProject') which clarify the expected format for the 'scope' parameter, but does not provide additional semantic depth 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 finds symbols with specific attributes, and provides concrete examples (e.g., 'Obsolete', 'Serializable'). It is a specific verb-resource combination, but does not explicitly differentiate from the sibling 'find_attribute_usages', which may serve a similar purpose.
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?
Usage is implied through examples showing different scopes (solution, project, file) and attribute names. However, there is no explicit guidance on when to use this tool over alternatives like 'find_attribute_usages' or conditions 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.
roslyn:get_base_typesA
Get full inheritance chain BY NAME.
USAGE: get_base_types("MyService") returns: MyService → BaseService → ... → Object
| Name | Required | Description | Default |
|---|---|---|---|
| typeName | Yes | Type name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description alone should disclose behavioral traits. It only says 'Get full inheritance chain' with a basic example, lacking details on edge cases, included types (e.g., interfaces), error behavior, 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 extremely concise with two clear lines, front-loading the purpose. Every element earns its place with 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?
For a simple tool with one parameter and no output schema, the description is adequate but leaves gaps: no mention of return format (example implies a string chain), handling of missing type, or whether interfaces are included. It covers the core function but not exhaustively.
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 100%, and the parameter 'typeName' has a generic description. The description adds little beyond confirming the parameter's role; it does not clarify format (e.g., full namespace) or provide 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 verb 'Get' and the resource 'full inheritance chain BY NAME', which is specific and distinguishes it from sibling tools like get_derived_types. The usage example reinforces this.
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 via the example but does not explicitly state when to use this tool versus alternatives like get_type_hierarchy, nor does it provide when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_code_actions_at_positionA
Get ALL available code actions (fixes + refactorings) at a position. This is the master tool that exposes 100+ Roslyn refactorings.
USAGE: get_code_actions_at_position(filePath, line, column) or with selection: add endLine, endColumn OUTPUT: List of actions with title, kind (fix/refactoring), equivalenceKey WORKFLOW: (1) Call this to see available actions, (2) Use apply_code_action_by_title to apply one IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number | |
| column | Yes | Zero-based column number | |
| endLine | No | Optional: end line for selection | |
| filePath | Yes | Absolute path to source file | |
| endColumn | No | Optional: end column for selection | |
| includeCodeFixes | No | Include fixes for diagnostics (default: true) | |
| includeRefactorings | No | Include refactorings (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It discloses the zero-based coordinate behavior and that it returns all actions. However, it does not state whether the operation is read-only, has side effects, or requires specific permissions. Given the lack of annotations, more behavioral detail would be beneficial.
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 well-structured with sections (USAGE, OUTPUT, WORKFLOW, IMPORTANT) and is front-loaded with the purpose. It is concise but retains necessary details. Minor improvement: could be slightly more compact without losing clarity.
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 the return format (title, kind, equivalenceKey). It covers all 7 parameters implicitly through usage patterns and schema coverage. It mentions the 100+ refactorings for context. Could mention error handling or pagination, but overall sufficient for an agent to use effectively.
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 100%, so baseline is 3. The description adds a usage pattern but does not provide additional meaning beyond what the schema already offers (e.g., zero-based coordinates are already in schema). It does not elaborate on the boolean flags or the optional selection parameters 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'), resource ('ALL available code actions'), and scope ('at a position'). It distinguishes itself from siblings like 'apply_code_action_by_title' and 'get_code_fixes' by positioning itself as the master tool that returns both fixes and refactorings.
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 patterns (filePath, line, column) and a workflow: call this first, then use apply_code_action_by_title. It also highlights the zero-based coordinate requirement. However, it doesn't explicitly distinguish when to use 'get_code_fixes' instead, though it is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_code_fixesA
Get available code fixes for a specific diagnostic. Returns list of fix titles and descriptions. WORKFLOW: (1) get_diagnostics to find issues, (2) get_code_fixes to see options, (3) apply_code_fix to fix.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number | |
| column | Yes | Zero-based column number | |
| filePath | Yes | Absolute path to source file | |
| diagnosticId | Yes | Diagnostic ID (e.g., CS0246) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It only states the return type (list of fix titles and descriptions) but does not mention that it is a read-only operation, any side effects, error conditions, or prerequisites (e.g., solution must be loaded). This is insufficient for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: two sentences plus a numbered workflow list. It front-loads the purpose and uses structured steps. 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?
The description covers the basic purpose and workflow but lacks details on edge cases (e.g., no fixes available, invalid parameters). Since there is no output schema, the return format is only superficially described. Adequate for a simple tool but not comprehensive.
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 100%, with each parameter described in the schema. The description adds no extra meaning beyond the schema. Baseline is 3, and there is no additional value, so score remains 3.
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 available code fixes for a specific diagnostic and returns a list of fix titles and descriptions. It distinguishes itself from siblings like apply_code_fix (which applies a fix) and get_diagnostics (which finds issues) through the explicit workflow.
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 clear workflow: use get_diagnostics first, then get_code_fixes to see options, then apply_code_fix. This tells the agent when to use this tool in the sequence, though it doesn't explicitly state when not to use it or exclude alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_complexity_metricsA
Get complexity metrics for a method or entire file.
METRICS: cyclomatic (decision points), nesting (max depth), loc (lines), parameters (count), cognitive (Sonar-style) USAGE: get_complexity_metrics(filePath) for file, or add line/column for specific method OUTPUT: Per-method breakdown with all requested metrics IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line | No | Optional: zero-based line for specific method | |
| column | No | Optional: zero-based column | |
| metrics | No | Optional: specific metrics [cyclomatic, nesting, loc, parameters, cognitive] | |
| filePath | Yes | Absolute path to source file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that coordinates are zero-based and describes the output as per-method breakdown. It does not mention performance or limitations, but the key behavioral aspects are 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?
The description is very concise and well-structured: purpose, metrics list, usage, output, important note. Every sentence adds value and there is no 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 high schema coverage and no output schema, the description provides essential context: usage patterns, zero-based coordinates, and output format (per-method breakdown). It is fully adequate for agent usage.
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 100%, but the description adds value by explaining how to differentiate file-level vs method-level use and listing the metrics. This goes beyond the schema descriptions which only provide types.
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 retrieves complexity metrics for a method or entire file, lists the available metrics, and distinguishes between file-level and method-level usage. This is specific and unique among sibling tools.
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 patterns: 'get_complexity_metrics(filePath) for file, or add line/column for specific method'. It also notes zero-based coordinates. However, it does not explicitly mention when not to use or compare to alternatives, 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.
roslyn:get_containing_memberA
Get information about the containing method/property/class at a position. Returns the enclosing symbol's name, kind, and signature. Useful for understanding context. IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number | |
| column | Yes | Zero-based column number | |
| filePath | Yes | Absolute path to source file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It correctly discloses the zero-based coordinate requirement, but does not mention other behavioral traits like read-only nature, performance, or error handling. The disclosure is adequate 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 concise: two sentences plus an important note. It is front-loaded with the core purpose and immediately provides critical coordinate 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?
No output schema exists, but the description specifies the expected return fields (name, kind, signature). For a simple query tool with three descriptive parameters and a clear return description, the context is sufficient for safe and correct 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 coverage is 100%, but the description adds value by emphasizing the zero-based coordinate system, which is critical for correct usage. This goes beyond the schema's description and reduces 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?
The description clearly states the verb 'Get' and the resource 'containing member at a position', and specifies the return values (name, kind, signature). It distinguishes from sibling tools by focusing on the enclosing symbol rather than other code analysis tasks, though not explicitly comparing.
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?
No guidance is provided on when to use this tool versus alternatives like get_symbol_info or get_method_signature. The description just says 'useful for understanding context', which is vague and does not help the agent decide when to choose it over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_derived_typesA
Find all types inheriting from a base type BY NAME.
USAGE:
Find all subclasses: get_derived_types("BaseService")
Direct children only: get_derived_types("BaseClass", includeTransitive=false)
| Name | Required | Description | Default |
|---|---|---|---|
| maxResults | No | Maximum results (default: 100) | |
| baseTypeName | Yes | Base type name | |
| includeTransitive | No | Include indirect descendants (default: true) |
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. It reveals that the tool returns all types inheriting by name, with transitive inclusion by default (controlled by includeTransitive). However, it lacks details on error behavior, performance implications, or handling of edge cases like non-existent base types. The transparency is adequate 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 extremely concise: a one-line purpose followed by a USAGE section with two examples. No superfluous words. The structure front-loads the key action and then provides immediate, practical examples. Every sentence is earned.
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 (find derived types by name), the description covers the essential behavior and usage. It mentions the key parameter includeTransitive with default. However, it omits any mention of the maxResults parameter or what happens if no types are found. With no output schema, a brief note on return format would improve completeness, but it remains largely 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?
The input schema has 100% description coverage, so baseline is 3. The description adds value by showing usage examples: e.g., includeTransitive=false to get direct children only, clarifying the default behavior (true). This goes beyond the schema's brief descriptions, particularly for includeTransitive, and provides context for usage. maxResults is not mentioned, but the schema covers 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 'Find all types inheriting from a base type BY NAME.' It specifies the verb (Find) and resource (types inheriting from a base type), differentiating itself from siblings like get_base_types which do the reverse. The purpose is unambiguous and distinct.
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 USAGE section provides concrete examples showing how to call the tool with and without the includeTransitive parameter. This gives practical guidance on parameter use. However, it does not explicitly compare with sibling tools like get_type_hierarchy or specify when to choose this tool over alternatives, which would elevate the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_diagnosticsA
Get compiler errors, warnings, and info messages for a file or entire project. Returns: list of diagnostics with id, message, severity, and location. Use before committing to catch issues.
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | No | Optional: path to specific file, omit for all files | |
| severity | No | Optional: filter by severity (Error, Warning, Info) | |
| projectPath | No | Optional: path to specific project | |
| includeHidden | No | Include hidden diagnostics (default: false) |
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. It states the tool returns a list of diagnostics with details, but does not disclose potential side effects, prerequisites (e.g., loaded solution), or whether it triggers compilation. The 'use before committing' hint suggests a read-only check, but this is not 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?
Two concise sentences: the first covers purpose and return format, the second gives usage guidance. No unnecessary words, and the core 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 four optional parameters, the description is fairly complete. It explains what is returned and when to use it. However, it does not address cases like overlapping parameters or what happens if no diagnostics are found. Still adequate for most use 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?
Schema description coverage is 100%, so the description itself does not add significant meaning beyond what the parameters already convey. The main description does not elaborate on parameter usage; it relies on the schema, making a baseline score of 3 appropriate.
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 compiler diagnostics (errors, warnings, info) for a file or project. It distinguishes from sibling tools like analyze_control_flow or analyze_data_flow, which are more specific analyses.
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 using the tool 'before committing to catch issues,' providing a clear usage context. It does not explicitly say when not to use it or mention alternatives, but the context of sibling tools implies alternatives for more targeted analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_di_registrationsA
Scan for dependency injection service registrations (AddScoped, AddTransient, AddSingleton, etc.).
USAGE: get_di_registrations() USAGE: get_di_registrations(projectName: "MyApi")
OUTPUT: List of DI registrations with lifetime, service type, implementation type, and location. Use for: understanding service wiring, finding missing registrations, auditing lifetimes.
| Name | Required | Description | Default |
|---|---|---|---|
| projectName | No | Filter to specific project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description details the output (list with lifetime, service type, etc.) and implies a read-only scan. It lacks explicit side-effect disclosure but is adequately transparent for a scanning 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?
The description is well-structured with usage examples and output details. It is concise yet informative, though the USAGE lines could be integrated into prose.
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 explains what the tool returns. It covers purpose, usage, output, and use cases, making it complete for a tool with one optional parameter.
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 100%, so baseline is 3. The description shows usage with projectName but does not add significant meaning beyond the schema's 'Filter to specific project'.
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 scans for DI service registrations with specific examples (AddScoped, AddTransient, etc.). This differentiates it from sibling tools that focus on other code analysis tasks.
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 usage examples and lists use cases (understanding service wiring, finding missing registrations, auditing lifetimes). Does not mention when to avoid using it or alternatives, 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.
roslyn:get_file_overviewA
Get comprehensive file overview in ONE CALL: diagnostics summary + type declarations + namespace + line count.
USAGE: get_file_overview("path/to/MyClass.cs")
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | Absolute path to source file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the transparency burden. It discloses that the tool returns diagnostics, types, namespace, and line count, indicating a read-only operation. However, it lacks details on error handling, file existence behavior, and explicit read-only confirmation.
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 extremely concise, with two sentences that front-load the purpose and provide an example. 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 the tool's simplicity (one parameter, no output schema), the description adequately covers its return components. However, it could elaborate on the scope of 'type declarations' (e.g., top-level only) for full completeness.
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 already fully describes the single parameter 'filePath' as 'Absolute path to source file' (100% coverage). The description's usage example does not add further semantic meaning.
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: 'Get comprehensive file overview in ONE CALL' and lists specific components (diagnostics summary, type declarations, namespace, line count). This differentiates it from siblings like get_diagnostics or get_type_overview which provide only subsets.
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 includes a usage example, implying when to use the tool. However, it does not explicitly state when to prefer this over individual sibling tools, nor does it mention any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_generated_codeA
View the source code produced by a source generator.
USAGE: get_generated_code(projectName: "MyApp", generatedFileName: "MyType.g.cs")
OUTPUT: Full source code of the generated file. Use get_source_generators first to discover available generated files.
| Name | Required | Description | Default |
|---|---|---|---|
| projectName | Yes | Project containing the generated file | |
| generatedFileName | Yes | Name of the generated file |
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 states the output is full source code, but does not explicitly mention that the operation is read-only or any side effects. The name 'get' implies read-only, but more transparency would be beneficial.
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, front-loaded with the purpose, and includes a usage example and output hint in a structured format. Every sentence adds value without unnecessary repetition.
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 two simple string parameters and no output schema, the description is fairly complete: it states purpose, usage, output, and prerequisite. It could mention that the generated file must exist, but that is implied. Lacking annotations, it still provides adequate context.
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 covers both parameters with descriptions (100% coverage). The description adds a usage example with parameter names, but does not enrich the meaning beyond what the schema already provides. Baseline 3 is appropriate.
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: 'View the source code produced by a source generator.' It includes a usage example with concrete parameter values and specifies the output is full source code. This distinguishes it from sibling tools like get_source_generators.
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 to 'Use get_source_generators first to discover available generated files,' providing clear guidance on the prerequisite workflow. It doesn't list when not to use this tool, but the sibling differentiation is helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_instantiation_optionsA
Get all ways to create an instance of a type: constructors, factory methods, and builder patterns.
USAGE: get_instantiation_options(typeName="HttpClient") OUTPUT: List of constructors with signatures, static factory methods, and hints (e.g., "implements IDisposable").
| Name | Required | Description | Default |
|---|---|---|---|
| typeName | Yes | The type name to check (e.g., 'HttpClient') |
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 discloses that the tool returns constructors, factory methods, builder patterns, and hints (e.g., IDisposable). It also shows output format. However, it does not mention side effects, required permissions, or edge cases like static classes.
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 extremely concise, with two sentences plus usage and output examples. Every part adds value with no 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?
For a simple tool with one parameter and no output schema, the description adequately outlines the output content (constructors, factory methods, hints). It could be more complete by noting limitations (e.g., types without public constructors) but is sufficient for an agent to understand the tool's value.
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 parameter 'typeName' is already described in the schema (100% coverage). The description adds a usage example but no new semantic constraints or meaning beyond the schema. Baseline 3 is appropriate.
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 retrieves all ways to create an instance of a type, listing constructors, factory methods, and builder patterns. It uses a specific verb 'get' and a unique resource 'instantiation_options', distinguishing it from sibling tools like 'get_method_signature' or 'get_method_overloads'.
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 usage example (typeName='HttpClient'), showing how to call the tool. However, it does not explicitly state when to use this tool versus alternatives, nor does it mention prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_method_overloadsA
Get all overloads of a method. Returns list of signatures with parameter details. Use when you need to choose between overloads. IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number | |
| column | Yes | Zero-based column number | |
| filePath | Yes | Absolute path to source file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the basic operation, it notes the important behavioral detail that coordinates are zero-based. Without annotations, this disclosure adds value. Does not cover safety or permissions, but the read-only nature is implied.
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: purpose, return value, usage hint with critical coordinate warning. No unnecessary words, front-loaded 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?
Fully describes what the tool does, what it returns, and key usage details. For a simple tool with no output schema, this is complete and sufficient for an agent to use 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?
Schema coverage is 100% and descriptions are already explicit (e.g., 'Zero-based line number'). The description reiterates the zero-based constraint but adds no new semantic 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 it retrieves all overloads of a method and returns signatures with parameter details. Differentiates from siblings like get_method_signature by focusing on overloads, and includes usage context.
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 when you need to choose between overloads', providing a clear context for use. Does not include when-not or alternatives, but the positive use case is well defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_method_signatureB
Get detailed method signature BY NAME including parameters, return type, nullability, and modifiers.
USAGE: get_method_signature("MyClass", "ProcessData") or with overload selection: get_method_signature("MyClass", "ProcessData", overloadIndex=1)
| Name | Required | Description | Default |
|---|---|---|---|
| typeName | Yes | Containing type name | |
| methodName | Yes | Method name | |
| overloadIndex | No | Which overload (0-based, default: 0) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided. The description mentions output contents but does not disclose behavior for missing methods, invalid overload indices, or other edge cases. Minimal behavioral context beyond the tool's basic function.
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: the first defines the output, the second shows usage. Extremely concise, front-loaded, and 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?
Adequate for a simple retrieval tool with 3 parameters and no output schema. The description explains what is returned, but lacks details on output structure or error handling, which could be helpful given the complexity of method signatures.
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 100%. The description adds value by providing a concrete usage example that illustrates parameter ordering and the optional overloadIndex, aiding the agent beyond the schema alone.
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 gets a detailed method signature by name, including parameters, return type, nullability, and modifiers. This distinguishes it from siblings like get_method_source or get_method_overloads, though it does not explicitly highlight differences.
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 usage example but offers no guidance on when to use this tool versus alternatives such as get_method_source or change_signature. There is no explicit context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_method_sourceA
Get the actual source code of a method by type and method name. Eliminates need for file Read.
USAGE: get_method_source(typeName="MyService", methodName="ProcessData") OUTPUT: Full method source including signature, body, location (file + line numbers), and line count.
| Name | Required | Description | Default |
|---|---|---|---|
| typeName | Yes | The containing type name (e.g., 'MyService', 'MyController') | |
| methodName | Yes | The method name (e.g., 'ProcessData') | |
| overloadIndex | No | Which overload to get (0-based, default: 0) |
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 mentions it returns source code and eliminates file reads, but lacks details on error handling or performance implications. No contradiction with annotations.
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 plus a usage example. Efficiently front-loads the purpose and provides essential context without extraneous content.
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, so the description compensates by detailing the return content (signature, body, location, line count). It covers key aspects for a read-only retrieval tool, though error scenarios are not mentioned.
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 100%, so baseline is 3. The description adds value by showing a usage example with parameters and describing the output (signature, body, location, line count), helping the agent understand what each parameter leads to.
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 the actual source code of a method by type and method name. It provides a usage example and distinguishes from siblings like get_method_signature.
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 says 'Eliminates need for file Read,' implying a direct source retrieval alternative. However, it does not explicitly compare to sibling tools 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.
roslyn:get_method_source_batchA
Get source code for multiple methods in a single call (batch optimization).
USAGE: get_method_source_batch(methods: [{typeName: 'ServiceA', methodName: 'Process'}, {typeName: 'ServiceB', methodName: 'Handle'}]) OUTPUT: Results array with source for each method, plus errors array for any that failed. BENEFIT: One call instead of multiple - reduces round trips when tracing code flows.
| Name | Required | Description | Default |
|---|---|---|---|
| methods | Yes | Array of method requests | |
| maxMethods | No | Maximum methods to process (default: 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description carries full burden. Discloses output format (Results array with source, errors array) and optimization benefit. However, does not mention read-only nature, auth needs, rate limits, or side effects. Adequate 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?
Extremely concise: uses sections for USAGE and BENEFIT, provides a clear example. No wasted words; 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?
Given simple 2-param tool with no output schema and no annotations, description covers input format, output structure, and usage benefit. Lacks error handling details but sufficient 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?
Schema coverage is 100%, so baseline is 3. Description adds a concrete example for 'methods' but does not clarify 'maxMethods' beyond repeating schema default. Marginal added value over 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 'Get source code for multiple methods in a single call (batch optimization).' The verb 'Get' and resource 'source code for multiple methods' are specific, and the batch nature distinguishes it from siblings like get_method_source.
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 a USAGE example and mentions BENEFIT ('One call instead of multiple - reduces round trips when tracing code flows.'). Implies when to use it, but does not explicitly state when not to or compare to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_missing_membersA
Get all interface and abstract members that must be implemented for a type.
USAGE: Position on a class that implements interfaces or extends abstract classes. OUTPUT: List of missing members with exact signatures ready to copy. Use before implementing interfaces. IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number on the type declaration | |
| column | Yes | Zero-based column number | |
| filePath | Yes | Absolute path to source file |
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 coordinates are zero-based, which is critical for invocation. However, it does not mention side effects (though unlikely) or handling of invalid inputs.
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 extremely concise, using clear headings (USAGE, OUTPUT, IMPORTANT) and front-loading the purpose. Every sentence adds unique value with no redundancy or 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 no output schema, the description explains the output format ('List of missing members with exact signatures ready to copy'), which is helpful. It does not cover error cases, but it is adequately complete for a simple, read-only 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?
The schema already describes all 3 parameters with 100% coverage. The description adds valuable context by emphasizing zero-based coordinates and that line and column refer to the type declaration, enhancing understanding 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 'Get all interface and abstract members that must be implemented for a type.' This distinguishes it from sibling tools like roslyn:implement_missing_members, which actually implements them, and roslyn:get_base_types, which retrieves base types.
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 includes 'USAGE: Position on a class that implements interfaces or extends abstract classes.' and 'Use before implementing interfaces,' providing clear context. It lacks explicit alternatives or when-not-to-use, but the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_nuget_dependenciesA
List NuGet package references per project with versions.
USAGE: get_nuget_dependencies() USAGE: get_nuget_dependencies(projectName: "MyApp")
OUTPUT: List of projects with their NuGet packages, versions, and asset settings. Use for: dependency audits, version checks, understanding external dependencies.
| Name | Required | Description | Default |
|---|---|---|---|
| projectName | No | Filter to specific project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the full burden. It describes the output (list of projects with packages, versions, asset settings) and implies it is a read-only query. For a simple listing tool, this is adequate behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with the main action stated first, followed by succinct usage examples and output description. Every sentence is functional and avoids 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 (single optional parameter, no output schema), the description covers the essential aspects: what it does, how to call it, and what the response contains. It does not discuss error handling or limitations, but the context is sufficient for correct 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 100% with the 'projectName' parameter already described as 'Filter to specific project'. The description adds usage examples that demonstrate how to use the parameter, but does not add significant new meaning beyond the schema. Baseline 3 is appropriate.
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 lists NuGet package references per project with versions. This is a specific verb-resource pairing that distinguishes it from sibling tools like 'find_circular_dependencies' or 'dependency_graph' which have 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?
Provides two usage examples (with and without the optional parameter) and lists explicit use cases: dependency audits, version checks, understanding external dependencies. It does not mention when not to use or alternatives, but the examples sufficiently guide an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_outgoing_callsA
Get all methods and properties that a method calls. Helps understand method dependencies and behavior. Returns list of called symbols with locations. IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number inside the method | |
| column | Yes | Zero-based column number | |
| filePath | Yes | Absolute path to source file | |
| maxDepth | No | How deep to trace calls (1 = direct only, default: 1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that coordinates are zero-based (a critical behavioral detail), and that it returns a list of called symbols with locations. Despite no annotations, this provides good transparency, though it omits specifics like handling of async methods or lambdas.
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 extremely concise, with two sentences and a critical note. Every sentence adds value: the first explains the tool's purpose, the second adds context about return values, and the note warns about coordinate systems.
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 that the tool returns a list of called symbols with locations and warns about zero-based coordinates. However, it could benefit from specifying the structure of each returned symbol (e.g., name, kind, exact position).
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 already fully documents all 4 parameters (100% coverage). The description adds no additional meaning beyond the schema, such as clarifying how the coordinates relate to the method's body or how maxDepth affects results.
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 retrieves methods and properties called by a method, using specific verbs ('Get all methods and properties that a method calls'). It distinguishes from siblings like find_callers (which finds callers) and dependency_graph (broader scope), by focusing on outgoing calls from a specific method.
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 for understanding method dependencies but does not explicitly state when to use this tool versus alternatives like find_callers or dependency_graph. 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.
roslyn:get_project_structureA
Get solution/project structure. IMPORTANT: For large solutions (100+ projects), use summaryOnly=true or projectNamePattern to avoid token limit errors. Maximum output is limited to 25,000 tokens.
| Name | Required | Description | Default |
|---|---|---|---|
| maxProjects | No | Maximum number of projects to return (e.g., 10 for large solutions) | |
| summaryOnly | No | Return only project names and counts (default: false, recommended for large solutions) | |
| includeDocuments | No | Include document lists (default: false, limited to 500 per project) | |
| includeReferences | No | Include package references (default: true, limited to 100 per project) | |
| projectNamePattern | No | Filter projects by name pattern (supports * and ? wildcards, e.g., '*.Application' or 'MyApp.*') |
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 the 25,000-token output limit, default parameter values, and per-project limits for references (100) and documents (500). This is strong behavioral context, though it could explicitly state the tool is read-only.
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: the first states the purpose, the second gives a critical usage warning. Every word adds value; no fluff. It is 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 no output schema, the description covers input constraints (token limits, defaults) and performance tips. It lacks details about the output structure (e.g., whether it returns a hierarchical JSON), but the summaryOnly hint partially addresses this. Overall, it is sufficiently complete for a parameterized query 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 100%, but the description adds significant value beyond the schema by revealing default behaviors (e.g., 'includeReferences' defaults to true) and practical constraints (e.g., 'includeDocuments' limited to 500 per project). This aids the agent in parameter selection.
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 'Get solution/project structure' is a clear verb+resource pair that distinguishes this tool from siblings like 'get_file_overview' or 'get_type_hierarchy' by focusing on top-level structure.
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 using 'summaryOnly=true' or 'projectNamePattern' for large solutions to avoid token limit errors, providing practical when-to-use guidance. However, it does not mention when NOT to use this tool (e.g., preferring a more specific sibling).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_source_generatorsA
List active source generators and their generated output per project.
USAGE: get_source_generators() USAGE: get_source_generators(projectName: "MyApp")
OUTPUT: List of generators with their assembly info and generated files. Use for: understanding generated code, debugging generator issues.
| Name | Required | Description | Default |
|---|---|---|---|
| projectName | No | Filter to specific project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It states the output format but does not mention prerequisites (e.g., solution must be loaded) or performance implications. For a read-only listing tool, this is adequate but could be more 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?
The description is concise with a front-loaded main statement, followed by clear usage examples and output description. No superfluous 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?
For a simple list tool with one optional parameter and no output schema, the description covers purpose, usage, and output. It lacks mention of preconditions like solution loading, but given common context among roslyn tools, it 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 description coverage is 100%, so baseline is 3. The description adds a usage example with a concrete string value and reinforces that the parameter filters per project, adding value 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 'list' and the resource 'active source generators and their generated output per project'. It distinguishes from the sibling tool 'get_generated_code' which likely returns specific code, while this lists generators and their output.
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 usage examples with and without parameters, and states the use case ('understanding generated code, debugging generator issues'). However, it does not explicitly mention when NOT to use this tool or suggest alternatives like 'get_generated_code'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_symbol_infoA
Get detailed semantic information about a symbol at a specific position. IMPORTANT: Uses ZERO-BASED coordinates. If your editor shows 'Line 14, Column 5', pass line=13, column=4. Returns symbol kind, type, namespace, documentation, and location.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number (Visual Studio line 14 = line 13 here) | |
| column | Yes | Zero-based column number (Visual Studio col 5 = col 4 here) | |
| filePath | Yes | Absolute path to source file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It lists returned information (kind, type, namespace, documentation, location) but does not disclose side effects, permissions, or performance traits. Mediocre transparency.
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?
Single sentence plus an important warning and output summary. Front-loaded with purpose. Efficient but could be more structured with bullet points or sections.
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, so description compensates by listing return fields. It explains coordinate convention but omits error conditions or prerequisites. Adequate for a simple info tool but not fully comprehensive.
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 already describes each parameter (100% coverage). Description adds value by clarifying the zero-based coordinate conversion, reinforcing practical usage beyond 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?
Clearly states the verb 'Get' and the resource 'detailed semantic information about a symbol at a specific position'. It lacks explicit distinction from other info-retrieval sibling tools like 'get_type_overview', but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides critical usage guidance on zero-based coordinates with a concrete example. Does not explicitly state when to use this tool over alternatives, but the context of needing detailed symbol info at a position is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_type_hierarchyA
Get the inheritance hierarchy (base types and derived types) for a type. Returns baseTypes chain and derivedTypes list. IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number | |
| column | Yes | Zero-based column number | |
| filePath | Yes | Absolute path to source file | |
| maxDerivedTypes | No | Maximum number of derived types to return (default: 50). Results are truncated with a hint if limit is exceeded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description partially covers behavioral traits: it mentions the return format (baseTypes chain, derivedTypes list) and notes that results are truncated with a hint if the maxDerivedTypes limit is exceeded. However, it does not disclose whether the tool is read-only, performance implications, 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 extremely concise at two sentences plus a bolded note. It front-loads the purpose and provides critical context efficiently without 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 output schema, the description briefly describes the return values but omits details about error cases (e.g., type not found, invalid file) and performance considerations. It is adequate but not fully complete for a tool with 4 parameters and 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 is 100%, but the description adds value by emphasizing the zero-based coordinate requirement and explaining the truncation behavior for maxDerivedTypes. This goes beyond the schema's basic 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 tool's purpose: 'Get the inheritance hierarchy (base types and derived types) for a type.' It uses a specific verb and resource, and distinguishes from siblings like get_base_types and get_derived_types by combining both.
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 lacks guidance on when to use this tool versus alternatives like get_base_types or get_derived_types. It does not specify prerequisites or exclusion criteria, only mentioning the zero-based coordinate requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_type_membersA
Get all members (methods, properties, fields, events) of a type BY NAME.
USAGE PATTERNS:
Basic: get_type_members("MyClass") - list all members
With inheritance: get_type_members("MyService", includeInherited=true)
Filter by kind: get_type_members("MyClass", memberKind="Method")
Verbosity control: verbosity="summary" (names only), "compact" (default, + signatures), "full" (+ docs, attrs)
WORKS WITH: Fully-qualified ("MyNamespace.MyClass"), simple ("MyClass"), or partial names.
| Name | Required | Description | Default |
|---|---|---|---|
| typeName | Yes | Type name (e.g., 'MyClass', 'MyNamespace.MyService') | |
| verbosity | No | 'summary' (names only), 'compact' (default), 'full' (+ docs, attrs) | |
| maxResults | No | Maximum members to return (default: 100) | |
| memberKind | No | Filter: 'Method', 'Property', 'Field', 'Event' | |
| includeInherited | No | Include members from base classes (default: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes the operation as reading members and mentions verbosity control, but lacks details on constraints (e.g., ambiguous names, performance, error handling) and assumes a read-only behavior without explicit statement.
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 a clear first-line purpose, followed by well-organized usage patterns and a note on name forms. Every sentence adds value without 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 lack of an output schema, the description covers usage patterns and parameter behavior well, but does not explain the return structure or clarify that maxResults limits output, which could be confusing when stating 'Get all members'.
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 100%, but the description adds value by explaining name forms (fully-qualified, simple, partial) and illustrating verbosity levels with examples, which goes beyond the 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 'Get all members (methods, properties, fields, events) of a type BY NAME.' This distinguishes it from siblings like get_type_members_batch and get_method_signature, providing a specific verb+resource.
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?
Usage patterns are given (basic, with inheritance, filter by kind, verbosity control) and the tool works with fully-qualified, simple, or partial names. However, it doesn't explicitly state when not to use or mention alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_type_members_batchA
Get members for multiple types in a single call (batch optimization).
USAGE: get_type_members_batch(typeNames: ['ServiceA', 'ServiceB', 'ControllerC']) OUTPUT: Results for each type with members, or error if type not found BENEFIT: One call instead of multiple - reduces context usage for AI agents
| Name | Required | Description | Default |
|---|---|---|---|
| typeNames | Yes | Array of type names to look up | |
| verbosity | No | 'summary', 'compact' (default), or 'full' | |
| memberKind | No | Filter: 'Method', 'Property', 'Field', 'Event' | |
| includeInherited | No | Include inherited members (default: false) | |
| maxResultsPerType | No | Max members per type (default: 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It mentions output format (results/error) and benefit, but does not disclose read-only nature, rate limits, or other behavioral traits beyond what is implied.
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?
Extremely concise: a single sentence followed by a code block and bullet points. Every element adds value, with no 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?
Covers batch optimization aspect well, but lacks detail on the return structure (e.g., format of members). However, given 5 parameters and no output schema, the description is largely complete for its niche.
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 100% with 5 parameters fully described. The description adds a usage example but no additional parameter meaning beyond what the schema already provides.
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 'gets members for multiple types in a single call', with a specific verb and resource. It distinguishes itself from the singular sibling 'get_type_members' by highlighting the batch optimization.
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 a usage example and explicitly mentions the benefit of reducing context usage, giving agents clear context for when to use this batch variant over the single-type alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:get_type_overviewA
Get comprehensive type overview in ONE CALL: type info + base types (first 3) + member counts.
USAGE: get_type_overview("MyService") - returns everything you need to understand a type quickly.
| Name | Required | Description | Default |
|---|---|---|---|
| typeName | Yes | Type name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses that the tool returns 'type info, base types (first 3), and member counts' but does not elaborate on what 'type info' includes (e.g., namespace, visibility, location). It also does not mention any side effects (none expected) or authentication requirements. Adequate but lacks detail.
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 extremely concise: two sentences total, with the key information front-loaded. The example is embedded in a code block. No fluff or unnecessary details. 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?
Given the tool's simplicity (1 parameter, no output schema, no annotations), the description provides a reasonable summary of outputs: type info, base types (first 3), member counts. It covers the main purpose. Minor gap: not specifying if 'type info' includes namespace or modifiers, but overall complete for a quick overview 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?
The input schema covers the single parameter 'typeName' with description 'Type name' (100% coverage). The description adds an example usage 'get_type_overview("MyService")' but no additional semantics like case sensitivity or format requirements. Baseline 3 since schema already defines the parameter well.
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 states the purpose: 'Get comprehensive type overview in ONE CALL: type info + base types (first 3) + member counts.' It clearly specifies the resource ('type overview') and the verb ('Get'). It distinguishes from siblings like get_type_hierarchy or get_base_types by combining multiple aspects in a single call. However, 'type info' is somewhat vague, missing a detailed breakdown.
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 an example usage: 'get_type_overview("MyService")' and implies it's for quick understanding. However, it lacks explicit guidance on when to use this tool versus more specialized siblings (e.g., get_type_hierarchy for deep hierarchy, get_type_members for members list). No when-not-to-use or alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:go_to_definitionA
Fast navigation to symbol definition. Returns the definition location without finding all references. IMPORTANT: Uses ZERO-BASED coordinates (editor line 10 = pass line 9).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number (editor line - 1) | |
| column | Yes | Zero-based column number (editor column - 1) | |
| filePath | Yes | Absolute path to source file containing the symbol |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. It clearly discloses zero-based coordinate system, which is critical for correct usage. However, it omits other behavioral traits like error behavior or performance expectations.
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 purposeful: first states action and key differentiator, second explains critical coordinate aspect. 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?
Tool has no output schema, but description does not specify return value format (e.g., file path, line, column). While simple, the return details are needed for agent to interpret results. Incomplete for a 3-param tool with 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 has 100% coverage with clear descriptions for all 3 parameters. Description reinforces zero-based coordinate usage but adds no additional semantics beyond what the schema already provides.
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 ('navigate to symbol definition'), resource ('definition'), and key distinction ('without finding all references'). Differentiates from sibling by emphasizing it does not find all references, which is a sibling 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?
Description implies usage when only definition location is needed, via 'without finding all references', but no explicit when-to-use, when-not-to-use, or alternative tools mentioned. Lacks guidance on prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:health_checkA
Check the health and status of the Roslyn MCP server and workspace. Returns: server status, solution loaded state, project count, and memory usage. Call this first to verify the server is ready.
| 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 bears full burden. It implies a read-only operation by stating 'check' and 'returns,' which is sufficient transparency. However, could explicitly state no 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, no wasted words. First sentence states purpose, second lists returns. Front-loaded and concise.
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 zero-parameter, no-output-schema tool, description adequately covers purpose and return values. Could specify return format but is sufficient given tool simplicity.
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 exist; schema description coverage is 100%. Description adds no parameter info but none 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?
Description clearly states the tool checks health and status, and lists specific return values (server status, solution loaded state, project count, memory usage). Among siblings focused on code analysis, this tool's unique verification role is well-defined.
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 to 'Call this first to verify the server is ready,' providing clear timing guidance. No exclusions or alternatives needed for a simple health check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:implement_missing_membersA
Generate stub implementations for interface/abstract members.
USAGE: Position cursor on class declaration that implements interface or extends abstract class. OUTPUT: Generated stub code for all missing members. IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number on the class declaration | |
| column | Yes | Zero-based column number | |
| preview | No | Preview mode (default: true) | |
| filePath | Yes | Absolute path to source file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so description must fully disclose behavior. It mentions zero-based coordinates and output of stub code, but does not cover edge cases (e.g., no missing members), side effects, or permission requirements for a code modification 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 with clear front-loading: purpose, usage, and important coordinate detail. 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 description is adequate for a code generation tool but lacks details on output format, error handling, or behavior when no missing members exist. No output schema to supplement.
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 covers all 4 parameters (100%), so baseline is 3. Description adds value by emphasizing zero-based coordinates and implicitly linking cursor position to line/column parameters, reinforcing 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?
Description clearly states 'Generate stub implementations for interface/abstract members,' which is a specific verb+resource. It distinguishes from sibling 'get_missing_members' (retrieval vs. generation).
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 instructs to position cursor on class declaration implementing interface or extending abstract class, providing clear usage context. However, it does not mention when not to use or point to alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:inline_variableA
Inline a variable, replacing all usages with its value.
USAGE: Position cursor on a variable declaration or usage. OUTPUT: Variable removed and all usages replaced with the expression. IMPORTANT: Uses ZERO-BASED coordinates (editor line - 1).
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number | |
| column | Yes | Zero-based column number | |
| preview | No | Preview mode (default: true) | |
| filePath | Yes | Absolute path to source file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes output (variable removed, usages replaced) and coordinate system, but does not mention preview behavior or destructive nature. Without annotations, this 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?
Extremely concise and well-structured with clear sections (USAGE, OUTPUT, IMPORTANT). 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 usage, output, and critical coordinate detail. Lacks mention of preview parameter and file modification, but is fairly complete for a refactoring 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 100%, so baseline 3. Description adds only coordinate system hint beyond schema descriptions, providing marginal additional value.
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 (Inline a variable) and its effect (replacing all usages with its value), distinguishing it from sibling tools like extract_variable or rename_symbol.
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 instructs to position cursor on a variable declaration or usage, and notes zero-based coordinates. Lacks exclusions 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.
roslyn:load_solutionA
Load a .NET solution for analysis. MUST be called before using any other analysis tools. Returns: projectCount, documentCount, and load time. Use health_check to verify current state.
| Name | Required | Description | Default |
|---|---|---|---|
| solutionPath | Yes | Absolute path to .sln or .slnx file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It discloses return values (projectCount, documentCount, load time) but does not mention error handling or side effects. Adequate for a load operation.
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 with front-loaded action. Every sentence adds value: action, prerequisite, return values, follow-up suggestion.
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 parameter, no output schema), the description covers core purpose, usage order, and returned data. Lacks error conditions but sufficient 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?
Schema coverage is 100%, baseline 3. Description repeats path requirement but adds 'absolute path to .sln or .slnx file', adding no new meaning beyond 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 'Load a .NET solution for analysis' with a specific verb and resource. It distinguishes itself from sibling tools by noting it must be called before using any other analysis tools.
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 'MUST be called before using any other analysis tools' and suggests using health_check to verify state, providing clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:organize_usingsA
Sort and remove unused using directives in a file. Returns the modified file content. Automatically removes unused usings and sorts alphabetically.
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | Absolute path to source file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description provides core behavioral info: modifies file content and returns modified content. However, it does not specify whether the file is saved to disk, if it requires the file to be part of a loaded solution, or if the operation is reversible. These gaps limit transparency.
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 redundancy. The most critical information is front-loaded, and 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 no annotations and no output schema, the description adequately states the function but omits details like return format, idempotency, and side effects on disk. It is sufficient for a simple tool but not fully 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 100% for the single parameter (filePath) with a clear description. The tool description adds no additional meaning beyond the schema, so baseline score applies.
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 specifies the action ('Sort and remove unused using directives') and the resource ('in a file'). It distinguishes from sibling tools like 'organize_usings_batch' and other code modification tools.
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?
No guidance on when to use this tool versus alternatives (e.g., organize_usings_batch). Does not mention prerequisites or context. A user might benefit from knowing that this is for a single file, and the batch version for multiple files.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:organize_usings_batchA
Organize using directives for multiple files in a project. Supports file pattern filtering (e.g., '.cs', 'Services/.cs'). PREVIEW mode by default - set preview=false to apply changes.
| Name | Required | Description | Default |
|---|---|---|---|
| preview | No | Preview mode (default: true). Set to false to apply changes to disk. ALWAYS preview first! | |
| filePattern | No | Optional: Glob pattern to filter files (e.g., '*.cs', 'Services/*.cs', '*Repository.cs'). Matches against file names, not full paths. | |
| projectName | No | Optional: Project name to process. If omitted, processes all projects in solution. |
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 the default preview behavior, the ability to apply changes, and file pattern support. This is transparent for a batch modification 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?
The description is extremely concise: two sentences covering purpose, parameters, and critical preview guidance. Every sentence adds value with 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?
The description omits any mention of what the tool returns (output). Given no output schema, an agent lacks understanding of whether the tool returns a diff, status, or list of changes. This is a notable gap for a batch 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 coverage is 100%, so baseline is 3. The description adds value by emphasizing the preview mode with 'ALWAYS preview first!', which reinforces safe usage. It also contextualizes filePattern as a glob pattern filtering file 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?
The description clearly states the action ('Organize using directives'), the scope ('multiple files in a project'), and the key feature (file pattern filtering). It implicitly distinguishes from the sibling 'roslyn:organize_usings' by specifying batch processing.
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 mentions preview mode and provides a warning to always preview first. However, it does not explicitly contrast with the single-file 'roslyn:organize_usings' or provide when-to-use vs alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:rename_symbolA
Safely rename a symbol (type, method, property, etc.) across the entire solution. Uses Roslyn's semantic analysis to ensure all references are updated. SUPPORTS PREVIEW MODE - always preview first! IMPORTANT: Uses ZERO-BASED coordinates. Default shows first 20 files with summary verbosity.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Zero-based line number (editor line - 1) | |
| column | Yes | Zero-based column number (editor column - 1) | |
| newName | Yes | New name for the symbol | |
| preview | No | Preview changes without applying (default: true). ALWAYS preview first! | |
| filePath | Yes | Absolute path to source file containing the symbol | |
| maxFiles | No | Max files to show in preview (default: 20, prevents large outputs) | |
| verbosity | No | Output detail level: 'summary' (default, file paths + counts only ~200 tokens/file), 'compact' (add locations ~500 tokens/file), 'full' (include old/new text ~3000+ tokens/file) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers safety (semantic analysis), preview mode, coordinate system, and output defaults. It discloses behavioral traits like always previewing and zero-based inputs. Could mention limitations (e.g., cross-assembly renaming constraints) but is reasonably 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?
Description is concise and well-structured: first sentence states core purpose, then preview mode warning, coordinate system explanation, and default values. No redundant or irrelevant 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 the tool's complexity (renaming across solution, 7 parameters, no output schema), the description explains the process and parameter usage effectively. It mentions preview output shows files with summary verbosity but doesn't detail the return structure or potential failure modes (e.g., ambiguous symbol). Still fairly 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 100%, but the description adds significant value: explains importance of preview, zero-based coordinates, default maxFiles (20), and verbosity options with token counts. This goes beyond the 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 (rename), resource (symbol), scope (entire solution), and method (semantic analysis). It distinguishes from sibling tools like change_signature or extract_method by specifying it renames symbols safely across the solution.
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 usage tips: 'always preview first!' and 'Uses ZERO-BASED coordinates'. Also explains defaults for maxFiles and verbosity. However, it does not explicitly state when not to use this tool (e.g., for simple text replacements) or compare to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:search_symbolsA
Search for types, methods, properties, etc. by name across the solution. Supports glob patterns (e.g., 'Handler' finds classes ending with 'Handler', 'Get' finds symbols starting with 'Get'). Use ? for single character wildcard. PAGINATION: Returns totalCount and hasMore. Use offset to paginate through results.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Optional: filter by symbol kind. For types use: Class, Interface, Struct, Enum, Delegate. For members use: Method, Property, Field, Event. Other: Namespace. Case-insensitive. | |
| query | Yes | Search query - supports wildcards: * (any characters), ? (single character). Examples: 'Handler', '*Handler', 'Get*', 'I?Service'. Case-insensitive. | |
| offset | No | Offset for pagination (default: 0). Use pagination.nextOffset from previous response to get next page. | |
| maxResults | No | Maximum number of results per page (default: 50) | |
| namespaceFilter | No | Optional: filter by namespace (supports wildcards). Examples: 'MyApp.Core.*', '*.Services', 'MyApp.*.Handlers'. Case-insensitive. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses wildcard support and pagination behavior (totalCount, hasMore, offset) but lacks details on performance, search scope, or return format. The description adds moderate value beyond the schema.
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 well-structured: starts with purpose, then wildcard details, then pagination. Every sentence is essential and adds value. 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 5 parameters, no output schema, and no annotations, the description covers main purpose and pagination but omits details on return fields (e.g., symbol kind, location) and search scope. Generally adequate but lacks output format clarity.
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 100%, so baseline is 3. The description adds marginal value by mentioning wildcard patterns and pagination concepts (totalCount, hasMore), but the schema already describes parameters well. No significant extra 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: 'Search for types, methods, properties, etc. by name across the solution.' It distinguishes from sibling tools (e.g., find_references, get_symbol_info) by emphasizing name-based search with wildcard support and pagination.
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 on when to use the tool (name-based symbol search with wildcards) and includes details on pagination and wildcard syntax. However, it does not explicitly contrast with alternatives like find_references or get_symbol_info, nor does it 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.
roslyn:semantic_queryA
Advanced semantic code query with multiple filters. Find symbols based on their semantic properties.
EXAMPLES:
Async methods without CancellationToken: isAsync=true, parameterExcludes=["CancellationToken"]
Public static methods: accessibility="Public", isStatic=true
Classes with [Obsolete]: kinds=["Class"], attributes=["ObsoleteAttribute"]
FILTERS: All specified filters are combined with AND logic. Omit a filter to skip it. Returns symbol details with locations.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Optional: filter fields/properties by their type. Partial match. Example: 'ILogger' finds all ILogger fields/properties | |
| kinds | No | Optional: filter by symbol kinds (can specify multiple). For types: Class, Interface, Struct, Enum, Delegate. For members: Method, Property, Field, Event. Example: ['Class', 'Interface'] | |
| isAsync | No | Optional: filter methods by async/await (true for async methods, false for sync methods) | |
| isStatic | No | Optional: filter by static modifier (true for static, false for instance) | |
| attributes | No | Optional: filter by attributes (must have ALL specified). Example: ['ObsoleteAttribute', 'EditorBrowsableAttribute'] | |
| maxResults | No | Maximum number of results (default: 100) | |
| returnType | No | Optional: filter methods by return type. Partial match. Example: 'Task' finds all methods returning Task | |
| accessibility | No | Optional: filter by accessibility. Values: Public, Private, Internal, Protected, ProtectedInternal, PrivateProtected | |
| namespaceFilter | No | Optional: filter by namespace (supports wildcards). Examples: 'MyApp.Core.*', '*.Services' | |
| parameterExcludes | No | Optional: filter methods that must NOT have these parameter types (partial match). Example: ['CancellationToken'] | |
| parameterIncludes | No | Optional: filter methods that MUST have these parameter types (partial match). Example: ['CancellationToken'] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description implies a read-only query but does not explicitly state safety, performance limits, or max results default. Adequate but could be more 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?
Well-structured with intro, examples, and filter section. Somewhat verbose but efficient for the complexity. No unnecessary sentences.
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 11 optional parameters and no output schema, the description provides examples and explains combining filters, which is sufficient for querying. Minor lack of return format 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?
Schema covers all parameters (100%). Description adds value with examples and filter combination logic, though it doesn't deeply elaborate on edge cases. Above baseline.
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 performs advanced semantic code querying with multiple filters, distinguishing it from simpler siblings like 'search_symbols' and 'get_symbol_info'. The examples solidify its purpose.
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?
Examples and filter logic (AND) provide usage guidance, but there is no explicit comparison to alternatives or when not to use this tool. Slight gap given 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.
roslyn:sync_documentsA
Synchronize document changes from disk into the loaded solution. Call this after using Edit/Write tools to ensure Roslyn has fresh content.
USAGE:
sync_documents(filePaths: ["src/Foo.cs", "src/Bar.cs"]) - sync specific files
sync_documents() - sync ALL documents (refresh entire solution)
WHEN TO CALL:
After using Edit tool to modify .cs files
After using Write tool to create new .cs files
After deleting .cs files
NOT needed after using SharpLensMcp refactoring tools (they auto-update)
HANDLES: Modified files (updates content), new files (adds to solution), deleted files (removes from solution). Much faster than load_solution - only updates documents, doesn't re-parse projects.
| Name | Required | Description | Default |
|---|---|---|---|
| filePaths | No | Optional: specific file paths to sync. If omitted, syncs ALL documents from disk. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes handling of modified, new, and deleted files. Since no annotations exist, description fully discloses behavior. Also notes performance relative to load_solution.
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?
Well-structured with sections, no wasted words. 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?
Complete for a sync tool; no output schema needed. Could mention return value but not essential. Sibling context is clear.
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 filePaths with schema description coverage 100%. Description adds usage examples, slightly exceeding baseline of 3.
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 states 'Synchronize document changes from disk into the loaded solution' with clear verb and resource. It distinguishes from siblings like load_solution by noting speed advantage.
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?
Explicit 'WHEN TO CALL' section tells when to use (after Edit/Write tools, deletions) and when not needed (after SharpLensMcp tools). Usage examples with optional filePaths further clarify.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roslyn:validate_codeA
Check if code would compile without writing to disk. Use to validate generated code before applying.
USAGE: validate_code(code="public void Foo() {}", contextFilePath="path/to/file.cs") to check with existing usings. OUTPUT: compiles (bool), errors list with line numbers. Essential before inserting AI-generated code.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | C# code to validate | |
| standalone | No | If true, treat code as complete file (default: false) | |
| contextFilePath | No | Optional: file to use for context (usings, namespace) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses that the tool checks compilation without writing to disk, a key non-destructive behavior. It also outlines the output format, providing transparency about results.
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 extremely concise, front-loading the purpose, then providing a clear usage example and output details. Every sentence earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 return values and usage. For a 3-parameter tool with one required parameter, the description covers all necessary context for correct 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 coverage is 100%, but the description adds value by showing a concrete usage example and explaining how contextFilePath provides usings context, going beyond the schema's basic 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 tool checks if code compiles without writing to disk, and emphasizes its use for validating generated code. This distinguishes it from other roslyn tools like analysis or refactoring tools.
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 usage example and states it is essential before inserting AI-generated code, giving clear context for when to use it. However, it does not explicitly exclude other scenarios or mention alternatives.
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.
62 tool updates
v1.5.0- First observed
roslyn:add_null_checks - First observed
roslyn:analyze_change_impact - First observed
roslyn:analyze_control_flow - First observed
roslyn:analyze_data_flow - First observed
roslyn:analyze_method - First observed
roslyn:apply_code_action_by_title - First observed
roslyn:apply_code_fix - First observed
roslyn:change_signature - First observed
roslyn:check_type_compatibility - First observed
roslyn:dependency_graph - First observed
roslyn:encapsulate_field - First observed
roslyn:extract_interface - First observed
roslyn:extract_method - First observed
roslyn:extract_variable - First observed
roslyn:find_attribute_usages - First observed
roslyn:find_callers - First observed
roslyn:find_circular_dependencies - First observed
roslyn:find_implementations - First observed
roslyn:find_references - First observed
roslyn:find_reflection_usage - First observed
roslyn:find_unused_code - First observed
roslyn:format_document_batch - First observed
roslyn:generate_constructor - First observed
roslyn:generate_equality_members - First observed
roslyn:get_attributes - First observed
roslyn:get_base_types - First observed
roslyn:get_code_actions_at_position - First observed
roslyn:get_code_fixes - First observed
roslyn:get_complexity_metrics - First observed
roslyn:get_containing_member - First observed
roslyn:get_derived_types - First observed
roslyn:get_di_registrations - First observed
roslyn:get_diagnostics - First observed
roslyn:get_file_overview - First observed
roslyn:get_generated_code - First observed
roslyn:get_instantiation_options - First observed
roslyn:get_method_overloads - First observed
roslyn:get_method_signature - First observed
roslyn:get_method_source - First observed
roslyn:get_method_source_batch - First observed
roslyn:get_missing_members - First observed
roslyn:get_nuget_dependencies - First observed
roslyn:get_outgoing_calls - First observed
roslyn:get_project_structure - First observed
roslyn:get_source_generators - First observed
roslyn:get_symbol_info - First observed
roslyn:get_type_hierarchy - First observed
roslyn:get_type_members - First observed
roslyn:get_type_members_batch - First observed
roslyn:get_type_overview - First observed
roslyn:go_to_definition - First observed
roslyn:health_check - First observed
roslyn:implement_missing_members - First observed
roslyn:inline_variable - First observed
roslyn:load_solution - First observed
roslyn:organize_usings - First observed
roslyn:organize_usings_batch - First observed
roslyn:rename_symbol - First observed
roslyn:search_symbols - First observed
roslyn:semantic_query - First observed
roslyn:sync_documents - First observed
roslyn:validate_code
TDQS
Most tools have distinct purposes, but some pairs like find_references and find_callers could be confused without reading descriptions. Overall, the descriptions help differentiate.
Tools use a consistent snake_case verb_noun pattern, with minor exceptions like 'go_to_definition' instead of 'get_definition'. The pattern is mostly uniform.
With 62 tools, the surface is overly large. Many specialized and batch tools could be consolidated. This exceeds the typical well-scoped range of 3-15 tools.
The tool set covers a broad range of Roslyn features including analysis, refactoring, navigation, and diagnostics. Minor gaps exist (e.g., no individual add-using tool), but overall coverage is strong.
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
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
The Cortex MCP server provides read-only access to real-time engineering context from the Cortex developer portal, allowing AI coding assistants to answer natural language questions about your organization's catalog (microservices, libraries, domains, teams, infrastructure), scorecards (engineering standards and best practices), initiatives (goals and deadlines), and Engineering Intelligence metrics. It includes tools for querying documentation, tracking personal entities, and accessing AI-assisted insights across the entire Cortex ecosystem.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
A Model Context Protocol server for Wix AI tools
Related MCP Servers
- AlicenseAqualityAmaintenanceRoslyn-based MCP server providing semantic code intelligence for .NET codebases — type hierarchies, call sites, DI registrations, and reflection usage for Claude Code6748MIT
- FlicenseAqualityDmaintenanceMinimal MCP server bridging a Roslyn C# language server to AI agents, exposing tools for diagnostics, call hierarchy, and type hierarchy.1-
- AlicenseNot gradedqualityAmaintenanceA semantic map of your .NET solution for AI coding agents. Analyzes a solution with Roslyn into a queryable code graph exposing 11 read-only tools (find_symbol, impact_analysis, find_implementations, etc.) over MCP. 100% local, no telemetry, MIT licensed.23MIT
- AlicenseNot gradedqualityAmaintenanceLocal-first MCP server for semantic C# analysis, navigation, validation, and refactoring using Roslyn on real .NET workspaces.1MIT
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/pzalutski-pixel/sharplens-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server