Grant the AI octopus access to a portion of your desktop with a Model Context Protocol (MCP) server for the GNOME desktop.
To build and install the MCP server to your system:
cargo install --path .
The resulting binary will typically be under ~/.cargo/bin/gnome-mcp-server.
To use this MCP server, you need to configure an MCP client. The configuration varies slightly from client to client, but this is the information that you will need:
- Transport: stdio
- Command: gnome-mcp-server (assuming ~/.cargo/bin is in your PATH)
- Args: [] (empty list)
The following is a list of general-purpose MCP clients known to work on Linux (in alphabetical order):
| Name | Description | Open Source | Local LLM Support | Documentation |
|---|---|---|---|---|
| goose | AI agent by Block (creators of Square) | ✅ | ✅ | Docs |
| LM Studio | Desktop app for running local LLMs | ❌ | ✅ | Docs |
| Speed of Light | Native GNOME MCP client | ✅ | ✅ | Docs |
Know of other MCP clients that work on Linux? Please submit a PR to add them to this table.
Coding-specific agents like Claude Code, OpenAI Codex, Gemini CLI, VS Code Copilot, or Cursor also support MCP, but they typically rely on cloud models and have limited or no support for on-device LLMs.
For additional MCP clients, see this section in the official documentation.
By default, all tools and resources are enabled. Create a configuration file to customize behavior:
./gnome-mcp-config.json (current directory)~/.config/gnome-mcp/config.json (user config)/etc/gnome-mcp/config.json (system config)"calendar": {
"days_ahead": 30, // Days to look ahead (default: 30)
"days_behind": 0 // Days to look behind (default: 0)
}
"tasks": {
"include_completed": true, // Include completed tasks (default: true)
"include_cancelled": false, // Include cancelled tasks (default: false)
"due_within_days": 0 // Filter by due date, 0 = all (default: 0)
}
"contacts": {
"email_only": false // Include only contacts with emails (default: false)
}
send_notificationlaunch_applicationopen_fileset_wallpaperset_volumeConfig:
"audio": {
"volume_step": 10 // Default step size (default: 10)
}
media_controlquick_settingstake_screenshotConfig:
"screenshot": {
"interactive": false // Default interactive mode (default: false)
}
window_managementRequirements: GNOME Shell unsafe mode: Alt+F2 → lg → global.context.unsafe_mode = true
keyring{"application": "myapp", "username": "user"})Examples:
// Store a secret
{"action": "store", "label": "GitHub Token", "secret": "ghp_xxx", "attributes": "{\"service\": \"github\", \"user\": \"myuser\"}"}
// Retrieve by service
{"action": "retrieve", "attributes": "{\"service\": \"github\"}"}
// Delete by user
{"action": "delete", "attributes": "{\"user\": \"myuser\"}"}
"calendar": {}See gnome-mcp-config.example.json for a complete example.
Co-authored by Claude
$ claude mcp add gnome-mcp-server \
-- python -m otcore.mcp_server <graph>