desktop-commander
[ tools: 26 ][ checks: 13 ][ latency: 58ms ]
80/100(C)
npx -y @wonderwhy-er/desktop-commander
check breakdown
✓Tools exposed — Server exposed 26 tools.
• get_config
• set_config_value
• read_file
• read_multiple_files
• write_file
• write_pdf
• create_directory
• list_directory
• move_file
• start_search
• get_more_search_results
• stop_search
• list_searches
• get_file_info
• edit_block
• start_process
• read_process_output
• interact_with_process
• force_terminate
• list_sessions
• list_processes
• kill_process
• get_usage_stats
• get_recent_tool_calls
• give_feedback_to_desktop_commander
• get_prompts
✓Input schemas valid — All tools have a valid JSON-Schema input definition.
!Input schema quality — 77 schema-quality issue(s) across 26 tool(s).
get_config: no "required" array (which params are mandatory?)
get_config.origin: parameter has no description
set_config_value.key: parameter has no description
set_config_value.value: parameter has no description
set_config_value.origin: parameter has no description
read_file.path: parameter has no description
read_file.isUrl: parameter has no description
read_file.offset: parameter has no description
read_file.length: parameter has no description
read_file.sheet: parameter has no description
read_file.range: parameter has no description
read_file.options: parameter has no description
read_file.origin: parameter has no description
read_multiple_files.paths: parameter has no description
write_file.path: parameter has no description
write_file.content: parameter has no description
write_file.mode: parameter has no description
write_file.origin: parameter has no description
write_pdf.path: parameter has no description
write_pdf.content: parameter has no description
write_pdf.outputPath: parameter has no description
write_pdf.options: parameter has no description
create_directory.path: parameter has no description
list_directory.path: parameter has no description
list_directory.depth: parameter has no description
list_directory.origin: parameter has no description
move_file.source: parameter has no description
move_file.destination: parameter has no description
start_search.path: parameter has no description
start_search.pattern: parameter has no description
start_search.searchType: parameter has no description
start_search.filePattern: parameter has no description
start_search.ignoreCase: parameter has no description
start_search.maxResults: parameter has no description
start_search.includeHidden: parameter has no description
start_search.contextLines: parameter has no description
start_search.timeout_ms: parameter has no description
start_search.earlyTermination: parameter has no description
start_search.literalSearch: parameter has no description
start_search.origin: parameter has no description
get_more_search_results.sessionId: parameter has no description
get_more_search_results.offset: parameter has no description
get_more_search_results.length: parameter has no description
stop_search.sessionId: parameter has no description
get_file_info.path: parameter has no description
edit_block.file_path: parameter has no description
edit_block.old_string: parameter has no description
edit_block.new_string: parameter has no description
edit_block.expected_replacements: parameter has no description
edit_block.range: parameter has no description
edit_block.content: parameter has no description
edit_block.content: untyped parameter ({} — no type, $ref, or enum)
edit_block.options: parameter has no description
edit_block.origin: parameter has no description
start_process.command: parameter has no description
start_process.timeout_ms: parameter has no description
start_process.shell: parameter has no description
start_process.verbose_timing: parameter has no description
start_process.origin: parameter has no description
read_process_output.pid: parameter has no description
read_process_output.timeout_ms: parameter has no description
read_process_output.offset: parameter has no description
read_process_output.length: parameter has no description
read_process_output.verbose_timing: parameter has no description
interact_with_process.pid: parameter has no description
interact_with_process.input: parameter has no description
interact_with_process.timeout_ms: parameter has no description
interact_with_process.wait_for_prompt: parameter has no description
interact_with_process.verbose_timing: parameter has no description
force_terminate.pid: parameter has no description
kill_process.pid: parameter has no description
get_recent_tool_calls: no "required" array (which params are mandatory?)
get_recent_tool_calls.maxResults: parameter has no description
get_recent_tool_calls.toolName: parameter has no description
get_recent_tool_calls.since: parameter has no description
get_prompts.action: parameter has no description
get_prompts.promptId: parameter has no description
→ Declare `required` for every schema that has properties, so agents know which params are mandatory.
→ Give every property a `description` and a concrete `type` (avoid bare `{}` placeholders).
→ Set `additionalProperties: false` on the top-level inputSchema so models can't silently pass extra, unvalidated arguments.
!Output schemas — No tools declare an outputSchema.
→ Optional: declare outputSchema for tools with structured results so agents can validate/parse output reliably.
✓Duplicate tool names — All tool names are unique.
✓Tool naming — All tool names use spec-legal characters.
!Descriptions — 74 description issue(s) found.
get_config.origin: parameter has no description
set_config_value.key: parameter has no description
set_config_value.value: parameter has no description
set_config_value.origin: parameter has no description
read_file.path: parameter has no description
read_file.isUrl: parameter has no description
read_file.offset: parameter has no description
read_file.length: parameter has no description
read_file.sheet: parameter has no description
read_file.range: parameter has no description
read_file.options: parameter has no description
read_file.origin: parameter has no description
read_multiple_files.paths: parameter has no description
write_file.path: parameter has no description
write_file.content: parameter has no description
write_file.mode: parameter has no description
write_file.origin: parameter has no description
write_pdf.path: parameter has no description
write_pdf.content: parameter has no description
write_pdf.outputPath: parameter has no description
write_pdf.options: parameter has no description
create_directory.path: parameter has no description
list_directory.path: parameter has no description
list_directory.depth: parameter has no description
list_directory.origin: parameter has no description
move_file.source: parameter has no description
move_file.destination: parameter has no description
start_search.path: parameter has no description
start_search.pattern: parameter has no description
start_search.searchType: parameter has no description
start_search.filePattern: parameter has no description
start_search.ignoreCase: parameter has no description
start_search.maxResults: parameter has no description
start_search.includeHidden: parameter has no description
start_search.contextLines: parameter has no description
start_search.timeout_ms: parameter has no description
start_search.earlyTermination: parameter has no description
start_search.literalSearch: parameter has no description
start_search.origin: parameter has no description
get_more_search_results.sessionId: parameter has no description
get_more_search_results.offset: parameter has no description
get_more_search_results.length: parameter has no description
stop_search.sessionId: parameter has no description
get_file_info.path: parameter has no description
edit_block.file_path: parameter has no description
edit_block.old_string: parameter has no description
edit_block.new_string: parameter has no description
edit_block.expected_replacements: parameter has no description
edit_block.range: parameter has no description
edit_block.content: parameter has no description
edit_block.options: parameter has no description
edit_block.origin: parameter has no description
start_process.command: parameter has no description
start_process.timeout_ms: parameter has no description
start_process.shell: parameter has no description
start_process.verbose_timing: parameter has no description
start_process.origin: parameter has no description
read_process_output.pid: parameter has no description
read_process_output.timeout_ms: parameter has no description
read_process_output.offset: parameter has no description
read_process_output.length: parameter has no description
read_process_output.verbose_timing: parameter has no description
interact_with_process.pid: parameter has no description
interact_with_process.input: parameter has no description
interact_with_process.timeout_ms: parameter has no description
interact_with_process.wait_for_prompt: parameter has no description
interact_with_process.verbose_timing: parameter has no description
force_terminate.pid: parameter has no description
kill_process.pid: parameter has no description
get_recent_tool_calls.maxResults: parameter has no description
get_recent_tool_calls.toolName: parameter has no description
get_recent_tool_calls.since: parameter has no description
get_prompts.action: parameter has no description
get_prompts.promptId: parameter has no description
→ Descriptions are the model's only guide to when/how to call a tool — treat them as prompt engineering.
→ Describe every tool and every parameter, including units, formats, and constraints.
→ Each tool's description should say something the name doesn't, and should be unique to that tool.
!Tool annotations — Annotation coverage 57% (74/130 hint fields set).
Some tools set a few hints but not all of title/readOnlyHint/destructiveHint/idempotentHint/openWorldHint.
→ Add annotations: title, readOnlyHint, destructiveHint, idempotentHint, openWorldHint.
→ These let clients gate risky calls and give agents/users a friendly display name — optional but valuable.
✓Tool titles — All tools declare a human-readable title.
!Server instructions — No top-level instructions declared.
→ Declare instructions to guide agents on when/how to use this server.
→ Return a non-empty `instructions` string in your InitializeResult — most SDKs let you set this alongside serverInfo.
✓Handshake + list latency — tools/list responded in 58ms.
!Prompts — Server declares the prompts capability but exposes 0 prompts.
→ If you don't actually offer prompts, remove the `prompts` capability from your initialize response.
→ Otherwise, register at least one prompt via your prompts/list handler.
✓Resources — All 2 resource(s)/template(s) are well-described.
add the badge
Paste into your README:
[](https://scoremcp.dev/servers/desktop-commander)