SharpLensMcp 1.6.0
dotnet tool install --global SharpLensMcp --version 1.6.0
dotnet new tool-manifest
dotnet tool install --local SharpLensMcp --version 1.6.0
#tool dotnet:?package=SharpLensMcp&version=1.6.0
nuke :add-package SharpLensMcp --version 1.6.0
SharpLensMcp
A Model Context Protocol (MCP) server providing 91 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 SharpLensMcp
Then run with:
sharplens
Via npm
npx -y sharplens-mcp
Build from Source
dotnet build -c Release
dotnet publish -c Release -o ./publish
Claude Code Setup
- Install the tool (pick one):
dotnet tool install -g SharpLensMcp
# or
npx -y sharplens-mcp
- Create
.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 |
|---|---|---|
DOTNET_SOLUTION_PATH |
Path to .sln or .slnx file to auto-load on startup |
None (must call load_solution) |
SHARPLENS_ABSOLUTE_PATHS |
Use absolute paths instead of relative | false (relative paths save tokens) |
SHARPLENS_LOG_LEVEL |
Logging verbosity: Trace, Debug, Information, Warning, Error |
Information |
SHARPLENS_TIMEOUT_SECONDS |
Timeout for long-running operations | 30 |
SHARPLENS_MAX_DIAGNOSTICS |
Maximum diagnostics to return | 100 |
SHARPLENS_ENABLE_SEMANTIC_CACHE |
Enable semantic model caching | true (set to false to disable) |
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 |
|---|---|
roslyn:load_solution |
load_solution |
roslyn:get_diagnostics |
get_diagnostics |
roslyn:rename_symbol |
rename_symbol |
| ...same rule for all 91 tools... | drop the roslyn: prefix |
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 load_solution instead) |
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
- 91 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 withsuggestedNextTools - Zero-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 (23 tools)
| Tool | Description |
|---|---|
get_symbol_info |
Semantic info at position |
go_to_definition |
Jump to symbol definition |
find_references |
All references; each classified read/write/invocation/cast/typeof/nameof/attribute; optional kind filter |
find_implementations |
Interface/abstract implementations |
find_callers |
Impact analysis - who calls this? |
get_call_graph |
Multi-hop callers/callees graph with depth bound + cycle detection |
get_type_hierarchy |
Inheritance chain |
search_symbols |
Glob pattern search (*Handler, Get*) |
semantic_query |
Multi-filter search (async, public, etc.) |
get_type_members |
All members by type name |
get_type_members_batch |
Multiple types in one call |
get_method_signature |
Detailed signature by name |
get_derived_types |
Find all subclasses |
get_base_types |
Full inheritance chain |
get_attributes |
List attributes on a symbol |
get_containing_member |
Enclosing symbol at position |
get_method_overloads |
All overloads of a method |
find_attribute_usages |
Find types/members by attribute |
get_external_type_info |
Inspect NuGet/BCL/external assembly types — members + XML docs |
resolve_stack_trace |
Map a pasted stack trace to file/line/symbol, mangling undone |
get_extension_methods |
Extensions applying to a type — classic and C# 14 blocks |
get_documentation |
Full XML docs for a symbol with <inheritdoc> expanded |
get_super_method |
Navigate to the base member / interface members a member implements |
Analysis (17 tools)
| Tool | Description |
|---|---|
get_diagnostics |
Compiler errors/warnings + configured analyzer findings (StyleCop, Roslynator, NetAnalyzers); matches CI |
diff_api_surface |
Public-API breaking-change report vs a git ref |
get_exception_flow |
Which exceptions can escape a method, and where they're caught |
find_similar_code |
Structural similarity search (token-shingle fingerprints) |
remove_unused_code |
Compute dead-code removals + newly unused usings (generation-only) |
find_dead_branches |
Unreachable basic blocks per method (real CFG, not heuristics) |
add_missing_imports |
Compute the usings that fix CS0246/CS0103 (generation-only) |
analyze_data_flow |
Variable assignments and usage |
analyze_control_flow |
Branching/reachability |
analyze_change_impact |
What breaks if changed? |
check_type_compatibility |
Can A assign to B? |
get_outgoing_calls |
What does this method call? |
find_unused_code |
Dead code detection |
validate_code |
Compile check without writing |
get_complexity_metrics |
Cyclomatic, nesting, LOC, cognitive |
find_circular_dependencies |
Project and namespace cycle detection |
get_missing_members |
Unimplemented interface/abstract members |
Refactoring (16 tools)
| Tool | Description |
|---|---|
rename_symbol |
Safe rename across solution |
change_signature |
Add/remove/reorder parameters |
extract_method |
Extract with data flow analysis |
extract_interface |
Generate interface from class |
generate_constructor |
From fields/properties |
move_type_to_file |
Compute the contents to move a type into its own file (generation-only) |
split_type |
Compute a partial-class split for selected members (generation-only) |
organize_usings |
Sort and remove unused |
organize_usings_batch |
Batch organize multiple files |
format_document_batch |
Batch format files in project |
get_code_actions_at_position |
All Roslyn refactorings at position |
apply_code_action_by_title |
Apply any refactoring by title |
implement_missing_members |
Generate interface stubs |
encapsulate_field |
Field to property |
inline_variable |
Inline temp variable |
extract_variable |
Extract expression to variable |
Code Generation (3 tools)
| Tool | Description |
|---|---|
add_null_checks |
Generate ArgumentNullException guards |
generate_equality_members |
Equals/GetHashCode/operators |
generate_test_stub |
Compilable test skeleton for a method (framework auto-detected) |
Compound Tools (7 tools)
| Tool | Description |
|---|---|
get_type_overview |
Full type info in one call |
analyze_method |
Signature + callers + outgoing calls + location |
get_file_overview |
File summary with diagnostics |
get_method_source |
Source code by name |
get_method_source_batch |
Multiple method sources in one call |
get_instantiation_options |
How to create a type |
get_project_health |
Composite audit dashboard: diagnostics + unused + coupling + coverage per project |
Audit & Quality (10 tools)
| Tool | Description |
|---|---|
find_god_objects |
Detect over-coupled types via efferent + afferent coupling + member-count thresholds |
find_untested_code |
Find public surface not reached by any [Fact]/[Theory]/[Test]/[TestMethod] |
find_tests |
Which tests cover a symbol — the inverse of find_untested_code |
find_type_instantiations |
Where a type is constructed (new T) |
find_pattern_usages |
Where a type appears in is/as/pattern matches |
find_throw_sites |
Where an exception type is thrown (optionally derived) |
find_catch_blocks |
Where an exception type is caught (optionally via a base clause) |
find_async_issues |
async void / blocking-on-async / unforwarded CancellationToken |
check_architecture |
Enforce namespace/project dependency rules over the type graph |
find_naming_violations |
Naming audit honoring .editorconfig rules, with conventional defaults |
Discovery (3 tools)
| Tool | Description |
|---|---|
get_di_registrations |
Scan DI service registrations |
find_reflection_usage |
Detect reflection/dynamic usage |
find_interceptors |
Surface [InterceptsLocation] call rerouting, generated code included |
Infrastructure (12 tools)
| Tool | Description |
|---|---|
health_check |
Server status |
find_unused_dependencies |
PackageReferences/ProjectReferences the compiler never needs |
fix_all |
Compute the fix for every instance of a diagnostic id (generation-only) |
load_solution |
Load .sln/.slnx for analysis |
sync_documents |
Sync file changes into loaded solution |
get_project_structure |
Solution structure |
dependency_graph |
Project dependencies |
get_code_fixes |
Available fixes for a diagnostic |
apply_code_fix |
Apply a specific code fix |
get_nuget_dependencies |
NuGet package listing per project |
get_source_generators |
List active source generators |
get_generated_code |
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 91 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
- 91 AI-optimized tools
|
v
Microsoft.CodeAnalysis (Roslyn)
- MSBuildWorkspace
- SemanticModel
- SymbolFinder
Requirements
- .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 ./publish
- Add 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 Release
Key Files
| File | Purpose |
|---|---|
src/RoslynService.cs + the src/RoslynService.*.cs partials |
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 |
src/McpServer.cs |
MCP protocol mechanics: JSON-RPC parse loop, initialize negotiation, per-call timeout, in-band vs protocol error mapping |
src/ToolRegistry.cs + src/ToolDefinition.cs |
The tool surface: one ToolDefinition record per tool (name, schema, ReadOnly flag, handler). Drives tools/list order and dispatch lookup |
src/JsonRpcParameters.cs + JsonRpcInvalidParamsException.cs |
Typed JSON-RPC argument accessors and the -32602 Invalid params exception they raise |
src/*Data.cs / *Entry.cs records, ConstructorMember.cs, SignatureChange.cs |
Typed records used by the audit composite, constructor generator, and signature-change parser (one type per file) |
License
MIT - See LICENSE for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
This package has no dependencies.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.6.0 | 383 | 7/3/2026 |
| 1.5.3 | 741 | 5/20/2026 |
| 1.5.2 | 679 | 4/17/2026 |
| 1.5.1 | 245 | 4/16/2026 |
| 1.5.0 | 319 | 4/8/2026 |
| 1.4.2 | 139 | 4/8/2026 |
| 1.4.1 | 115 | 4/8/2026 |
| 1.4.0 | 127 | 4/4/2026 |
| 1.3.2 | 163 | 3/26/2026 |
| 1.3.1 | 109 | 3/26/2026 |
| 1.3.0 | 108 | 3/25/2026 |
| 1.2.5 | 621 | 1/12/2026 |
| 1.2.4 | 154 | 1/1/2026 |
| 1.2.3 | 139 | 12/29/2025 |
| 1.2.2 | 149 | 12/28/2025 |
| 1.2.1 | 137 | 12/27/2025 |
| 1.2.0 | 130 | 12/27/2025 |
| 1.1.1 | 136 | 12/27/2025 |
| 1.1.0 | 137 | 12/27/2025 |
| 1.0.0 | 131 | 12/27/2025 |
v1.6.0
Added (24 tools, 67 -> 91):
- move_type_to_file / split_type - move a type into its own file, or split members into a new partial
- remove_unused_code - bulk preview-first cleanup of find_unused_code results
- add_missing_imports - the using directives that resolve a file's CS0246/CS0103
- fix_all - apply a code fix to every instance of a diagnostic across a file, project, or solution
- generate_test_stub - a compilable test skeleton with the test framework detected
- diff_api_surface - public-API breaking-change report against a git ref
- get_exception_flow - which exceptions can escape a method and where each is caught
- find_similar_code - structurally similar methods (anti-duplication)
- resolve_stack_trace - map a .NET stack trace to source with compiler mangling undone
- check_architecture - enforce dependency rules over the type-dependency graph
- find_unused_dependencies - PackageReference/ProjectReference entries the compiler never needs
- find_dead_branches - unreachable blocks from the real control-flow graph
- find_naming_violations - naming-convention audit honoring .editorconfig, with defaults
- find_async_issues - async void, blocking-on-async, and unforwarded CancellationToken
- get_super_method - navigate to the overridden or implemented member
- get_extension_methods - extension members applicable to a type (classic and C# 14)
- get_documentation - full XML docs with <inheritdoc> resolved recursively
- find_interceptors - surface [InterceptsLocation] call rerouting
- find_tests - which tests cover a symbol
- find_type_instantiations / find_pattern_usages / find_throw_sites / find_catch_blocks - fine-grained usage searches for a type
Changed:
- Upgraded Roslyn to 5.3.0 with C# 14 readiness (extension blocks, the field keyword, null-conditional assignment)
- rename_symbol, change_signature, add_null_checks, generate_constructor, generate_equality_members, extract_interface accept typeName/memberName name-based addressing as an alternative to file/line/column
- search_symbols adds matchMode "fuzzy" (camel-hump matching)
- get_file_overview lists per-type members
- find_references / find_callers / find_implementations now include references inside generated code
- Tool names dropped the "roslyn:" prefix to satisfy the MCP name pattern; the prefixed spellings stay accepted as aliases for one release
- Environment variables rebranded to SHARPLENS_* (the ROSLYN_* spellings still read for one release); Trace log level added
- Tools carry readOnlyHint/destructiveHint annotations; SHARPLENS_TIMEOUT_SECONDS is enforced per call
- The code-generation tools build syntax instead of concatenating strings
Fixed:
- format_document_batch default mode preserves the author's structure; the whole-tree canonical re-printer is opt-in via mode "canonical"
- Unified atomic apply path: a rejected apply leaves files untouched; rename and apply-by-title no longer leave stale state; refactors no longer need a follow-up sync_documents
- Unexpected tool-handler errors return an in-band error result instead of a JSON-RPC -32603
- initialize negotiates the client's protocol version instead of answering with a hardcoded one
- get_diagnostics counts errors/warnings before the result cap; an invalid severity returns INVALID_PARAMETER
- organize_usings removes CS8019 usings and sorts the rest; the single-file variant gains preview/apply parity
- get_code_fixes returns real provider fixes with manual fallback suggestions
- extract_method drops nested-block duplication and emits an async Task signature when the selection awaits
- add_null_checks skips already-annotated and already-guarded parameters
- generate_equality_members filters compiler backing fields and hashes all members consistently
- get_complexity_metrics guards zero-method files
- check_type_compatibility resolves both types within one compilation
- analyze_data_flow / analyze_control_flow honor a sub-range instead of the whole block
- get_outgoing_calls honors maxDepth
- find_unused_code reports a symbol unused only at zero references and no longer skips disposable types
- get_method_signature errors on an out-of-range overload index; get_type_members reports overloadCount
- get_project_structure reports the real target framework
- validate_code maps error lines back to the submitted snippet
- find_attribute_usages and find_untested_code scan only the project's own assembly
- apply_code_action_by_title requires an exact or unique title match
- Ambiguous typeName resolution returns a structured AMBIGUOUS_TYPE error listing candidates
v1.5.3
Added:
- get_external_type_info
- get_call_graph
- find_untested_code
- find_god_objects
- get_project_health
Changed:
- get_diagnostics runs DiagnosticAnalyzers by default
- find_references reports cast kind + filter
- health_check uses standard {success,data,meta} envelope
- change_signature, extract_method, apply_code_fix apply on preview:false
Fixed:
- get_source_generators surfaces real generator type
- get_instantiation_options externalFactories on generator projects
- get_code_actions_at_position returns real refactorings
- search_symbols pagination, find_god_objects coupling
- JSON-RPC notification compliance
- 15 more (see CHANGELOG.md)
v1.5.2: Run source generators so tools see generator-produced code (#7). Fixes phantom CS0117, missed references, wrong unused-code results for projects with generators.
v1.5.1: Fixed notifications/initialized breaking MCP client connections (#6).
v1.5.0: Added 7 discovery tools: attribute usages, DI registrations, reflection detection, circular dependencies, NuGet dependencies, source generators, generated code viewer.
v1.4.2: Split release workflow into separate jobs for reliability. MCP Registry publishing.
v1.4.1: Added MCP Registry publishing. Listed on registry.modelcontextprotocol.io.
v1.4.0: Fixed JSON-RPC id handling to accept string and integer per spec. npm launcher now pins version.
v1.3.2: Added npm README and badge.
v1.3.1: Added npm wrapper package (npx -y sharplens-mcp) for MCP ecosystem discoverability.
v1.3.0: Fixed MSBuild locator for .NET 9/10+. RollForward enabled. Upgraded MSBuildLocator to 1.11.2. Works with .NET 8+.
v1.2.5: Added .slnx solution format support. Upgraded to Roslyn 5.0.0.
v1.2.4: Added GitHub Actions CI/CD for trusted builds. Source Link enabled for source traceability.
v1.2.3: Fixed sync_documents adding unwanted Compile Include entries to .csproj files.
v1.2.2: Added sync_documents for agent-controlled document synchronization after external edits.
v1.2.1: Relative paths by default (saves tokens). Cross-platform path normalization.
v1.2.0: Added get_method_source_batch for batch method lookups. Enhanced analyze_method with includeOutgoingCalls parameter.
v1.1.1: Documentation update - Added Claude Code setup guide and configuration reference.
v1.1.0: Added 10 new tools (57 total).