How to Get the Complete Server Configuration Using the `get_config` Tool in DesktopCommanderMCP
The get_config tool returns the complete DesktopCommanderMCP server configuration—including blocked commands, allowed directories, feature flags, and system diagnostics—by calling await configManager.getConfig() and enriching it with runtime context.
The DesktopCommanderMCP server exposes a read-only tool named get_config that provides a comprehensive view of the server's runtime state. This tool is essential for debugging, auditing security policies, or verifying that your MCP client is operating with the expected constraints. In this guide, you'll learn how to invoke get_config from multiple contexts, understand its response structure, and interpret the configuration data it returns.
How the get_config Tool Works
The tool implementation follows a clear three-step pipeline in src/tools/config.ts.
1. Load the In-Memory Configuration
The ConfigManager singleton (src/config-manager.ts) maintains the authoritative server configuration. When get_config is invoked, it calls:
const config = await configManager.getConfig();
This method (lines 236-244 in src/config-manager.ts) returns the cached configuration object, which includes settings loaded from the JSON configuration file and any runtime overrides.
2. Collect Runtime Context
The tool enriches the base configuration with additional runtime data:
- Current client: The
currentClientexport fromsrc/server.tsidentifies which MCP client is connected - Feature flags: State from
src/utils/feature-flags.tsindicates which experimental capabilities are enabled - System information: Data from
src/utils/system-info.tscovers OS, CPU, memory, and environment details
3. Assemble the Structured Response
The final response (lines 90-141 in src/tools/config.ts) contains:
- A plain-text summary for human readability
structuredContent.config: The complete configuration object for programmatic consumptionuiHints: Auxiliary data likeavailableShellsfromdetectAvailableShells()entries: An editable metadata list showing which fields can be modified viaset_config_value
Tool Registration and Schema
The get_config tool is registered in src/server.ts (approximately lines 1308-1333) with a description stating it returns the "complete configuration as JSON."
The argument schema in src/tools/schemas.ts defines GetConfigArgsSchema with a single optional parameter:
// src/tools/schemas.ts#L4-L8
{
origin: z.enum(["ui", "llm"]).optional()
.describe("Origin of the request (UI widget or LLM)")
}
No arguments are required—origin simply helps the server distinguish between UI widget and LLM callers for logging purposes.
Calling get_config from Different Clients
MCP/JSON-RPC (LLM or Programmatic Client)
Send a standard MCP tool call:
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"toolName": "get_config",
"arguments": {}
},
"id": 1
}
The server responds with:
{
"result": {
"content": [
{
"type": "text",
"text": "Current configuration:\n{ ...full JSON shown here... }"
}
],
"structuredContent": {
"config": {
"blockedCommands": ["rm", "format"],
"defaultShell": "/bin/bash",
"allowedDirectories": ["/home/user/projects"],
"telemetryEnabled": true
},
"uiHints": {
"availableShells": ["/bin/bash", "/bin/zsh", "powershell.exe"]
},
"entries": [
{
"key": "blockedCommands",
"value": ["rm", "format"],
"valueType": "array",
"editable": true
},
{
"key": "telemetryEnabled",
"value": true,
"valueType": "boolean",
"editable": true
}
]
}
},
"id": 1
}
Key fields in structuredContent.config:
blockedCommands: Array of command names disallowed for securitydefaultShell: The shell used for command executionallowedDirectories: Paths outside which file operations are restrictedtelemetryEnabled: Whether usage analytics are collected
Built-In Config Editor UI
Open the Config Editor resource at URI config-editor:// in the DesktopCommanderMCP interface. The UI automatically invokes get_config with origin: "ui" and renders the structured response in an editable form. No manual arguments are needed.
Direct HTTP/JSON-RPC (CLI or External Tools)
If the server is running locally, use curl:
curl -s http://localhost:9797 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/call","params":{"toolName":"get_config","arguments":{}},"id":1}' | jq .
Replace 9797 with your configured port if overridden in config.json.
Understanding the Response Structure
| Response Section | Purpose | Source |
|---|---|---|
content[0].text |
Human-readable configuration dump | Assembled in src/tools/config.ts |
structuredContent.config |
Machine-parseable complete configuration | configManager.getConfig() + runtime context |
structuredContent.uiHints |
Auxiliary UI data (available shells, memory usage) | detectAvailableShells(), process.memoryUsage() |
structuredContent.entries |
Metadata for editable fields | Derived from schema definitions |
The entries array is particularly useful for UI builders: it indicates which configuration keys support modification via the companion set_config_value tool.
Security and Safety Considerations
get_configis read-only: The tool does not modify state, making it safe to invoke from untrusted contexts- No sensitive values exposed: Passwords, tokens, and private keys are never included in the standard configuration response
- Telemetry respect: The
telemetryEnabledfield reflects the user's explicit privacy preference stored inconfig.json
Summary
- Invoke
get_configwith empty arguments or optionalorigin: "ui"|"llm"to retrieve the complete DesktopCommanderMCP configuration - The tool aggregates data from
configManager.getConfig(),currentClient, feature flags, and system info utilities - Responses include both human-readable text and
structuredContent.configfor programmatic use - Access the same data through MCP JSON-RPC, the Config Editor UI, or direct HTTP to localhost
Frequently Asked Questions
What configuration fields does get_config return?
The tool returns all server configuration fields including blockedCommands, allowedDirectories, defaultShell, telemetryEnabled, maxCommandTimeout, logLevel, and featureFlags. It also appends runtime-derived data such as availableShells, memoryUsage, currentClient, and system information (OS, CPU, Node version).
Is get_config safe to call repeatedly?
Yes. According to the DesktopCommanderMCP source code, get_config is a pure read operation that does not modify state, log excessively, or trigger side effects. The underlying configManager.getConfig() method returns cached in-memory data with minimal overhead.
Why does the response include both text and structuredContent?
The text field serves LLM clients that consume human-readable output, while structuredContent.config provides typed, parseable data for programmatic callers and UI widgets. This dual format ensures compatibility across all MCP client types without requiring multiple tool variants.
How do I modify configuration values after viewing them?
Use the companion set_config_value tool, also implemented in src/tools/config.ts. The entries array in get_config responses marks which fields are editable ("editable": true). Changes persist via configManager back to the JSON configuration file.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →