Skip to main content
Glama
bruce-forte

omarchy-mcp

by bruce-forte

MCP Server for Omarchy

Lets a local AI agent drive your Omarchy desktop: every command in Omarchy's registry, plus the live shell's IPC targets, exposed over MCP on loopback.

Runs as an Omarchy plugin, so there is no systemd unit to enable, no second install step, and no separate package. The plugin supervises a small daemon; the daemon starts with your session and stops with it.

Status: Phase 4. Nineteen tools, seven resources, a supervised daemon, and a bar widget that says whether it is serving. What is left is hardening; see ROADMAP.md.

Documentation

File

For

README.md

Using it — install, connect a client, configure, uninstall

TOOLS.md

The tool reference, generated from the server's own schemas

ARCHITECTURE.md

How it works. Start here to read the source

SECURITY.md

What an agent can and cannot do, and why

ROADMAP.md

What is done, what is left, what was decided against

CLAUDE.md

Working agreement, and Omarchy plugin conventions

Related MCP server: macos-control-mcp

Contents

What it does

Omarchy has two control surfaces, and this exposes both:

  • The command registry. omarchy commands --json describes several hundred commands — route, arguments, summary, examples, and whether each needs sudo. That listing is read live, so this server never goes stale when Omarchy is upgraded and there is no command catalogue to maintain.

  • The shell's IPC targets. Everything omarchy-shell draws — the bar, the OSD, notifications, media, and every loaded plugin — is reachable only through Quickshell IPC. qs ipc show lists them with full method signatures, and that listing is the only documentation these interfaces have.

Four generic tools cover both surfaces completely:

Tool

Does

omarchy_search_commands

Finds commands, with arguments, examples, and whether they can be run

omarchy_run

Runs one. Arguments never touch a shell

omarchy_shell_targets

Lists IPC targets and every method signature

omarchy_shell_call

Calls one

One tool per command would put tens of thousands of tokens of schema into a client's context before it did anything, so discovery and dispatch are separate.

Fifteen curated tools sit on top, each earning its place one of two ways.

Some return what the generic runner structurally cannot — an image, or data that is not Omarchy's at all:

Tool

Does

omarchy_screenshot

Returns the screen as an image, so an agent can see it

omarchy_desktop_state

Hyprland's monitors, workspaces, windows, and focus

omarchy_screen_text

OCR, for reading what something says

omarchy_clipboard_read / _write

The clipboard, which is not an Omarchy command

omarchy_system_status

Eight probes in one call instead of eight round trips

The rest are simply asked for constantly, and a search round trip before every volume change is a bad trade:

omarchy_notify, omarchy_osd, omarchy_theme, omarchy_background, omarchy_audio, omarchy_brightness, omarchy_media, omarchy_toggle, omarchy_launch.

Curated tools go through the same policy check and executor as omarchy_run — a better-shaped door onto the same room, never a way around the lock. Any of them can be switched off in the config, and everything they do stays reachable through omarchy_run.

Seven resources carry the reference material. Tools are how an agent acts; resources are how a person reads — in Claude Code they appear as @ mentions:

URI

Holds

omarchy://commands

The whole registry, annotated with what this server may run

omarchy://shell/targets

Every IPC target with full method signatures — documented nowhere upstream

omarchy://desktop/state

Monitors, workspaces, windows, focus

omarchy://system/status

The system status aggregate

Plus three URI templates — omarchy://command/{route}, omarchy://commands/{group}, omarchy://shell/target/{name} — which between them cover every command and target without a listing of several hundred entries.

Full reference, generated from the server's own schemas: TOOLS.md.

Install

omarchy plugin add https://github.com/bruce-forte/omarchy-mcp-server.git --enable

That clones the repository into ~/.config/omarchy/plugins/io.github.bruce-forte.mcp-server/, validates the manifest, and enables it. Confirm it landed:

omarchy plugin list | grep mcp-server

On first run the plugin builds a Python environment in ~/.local/state/io.github.bruce-forte.mcp-server/. This takes a second or two and needs a network connection once. omarchy plugin add deliberately runs no build and no install hook, so this happens lazily rather than at install time.

Connecting a client

The server requires a bearer token, generated on first run. Print the exact command to run:

omarchy-shell io.github.bruce-forte.mcp-server clientConfig

or directly:

~/.config/omarchy/plugins/io.github.bruce-forte.mcp-server/bin/omarchy-mcpd --print-client-config

which prints something like:

claude mcp add --transport http omarchy http://127.0.0.1:8765/mcp \
  --header "Authorization: Bearer <your token>"

For clients configured by file rather than by command, add --json:

{
  "mcpServers": {
    "omarchy": {
      "type": "http",
      "url": "http://127.0.0.1:8765/mcp",
      "headers": { "Authorization": "Bearer <your token>" }
    }
  }
}

Checking it works

omarchy-shell io.github.bruce-forte.mcp-server status
curl -s http://127.0.0.1:8765/health

status reports whether the daemon is serving, which is not the same as running — a wedged HTTP loop still has a live process, so the plugin probes /health rather than trusting the pid.

Configuration

Optional. Everything works without it. A commented template is written to ~/.config/omarchy/mcp/config.toml on first run; every key is commented out and shows its default, so keys you leave alone keep tracking upstream defaults.

[server]
# port = 8765
# timeout_ms = 30000
# max_output_b = 262144

[policy]
# allow = ["omarchy system reboot"]
# allow_groups = ["install"]
# deny = ["omarchy launch browser"]

[log]
# level = "info"

After editing:

omarchy-shell io.github.bruce-forte.mcp-server reloadConfig

The listen address is always 127.0.0.1 and is deliberately not configurable. See SECURITY.md.

What an agent is allowed to run

Commands are classified automatically from the registry, so the policy does not rot when Omarchy adds commands:

Tier

Rule

Behaviour

blocked

needs sudo

Refused always. The daemon has no controlling terminal, so a password prompt could never be answered. Not overridable

guarded

installs, removes, migrates, reboots

Refused unless allowed in your config

safe

everything else

Runs

omarchy_search_commands reports the tier of every result, so an agent can see what it may do before trying.

Development

Work on a checkout, then point Omarchy at it:

omarchy plugin add /path/to/omarchy-mcp-server --enable --yes
omarchy plugin update io.github.bruce-forte.mcp-server

plugin add clones, so only committed work gets installed.

make check        # tests, qmllint, manifest validation
make test
make tools        # regenerate TOOLS.md from the server's schemas
make run          # run the daemon in the foreground

Use the Makefile rather than bare uv commands: it puts the dev virtualenv outside the repository, because omarchy plugin validate rejects symlinks anywhere inside a plugin folder and a virtualenv is largely symlinks.

Reload rules. Editing Python takes effect on the next daemon restart (omarchy-shell io.github.bruce-forte.mcp-server restart). Editing QML needs omarchy restart shell.

Troubleshooting

Symptom

Cause and fix

The bar icon shows !

The daemon is not serving. journalctl --user -f | grep omarchy-mcp says why

Client cannot connect

Wrong or stale token. Re-run clientConfig and re-add the server

address already in use

Something else has port 8765. Set port in the config, then re-run clientConfig

Bootstrap failed on first login

Usually no network yet. omarchy-shell io.github.bruce-forte.mcp-server rebuild

A command is refused

Check its tier with omarchy_search_commands. Sudo commands cannot be run at all

Tools do not appear in the client

The client caches the tool list; reconnect it

Uninstall

omarchy plugin remove io.github.bruce-forte.mcp-server
rm -rf ~/.local/state/io.github.bruce-forte.mcp-server   # venv and bearer token
rm -rf ~/.config/omarchy/mcp                             # your configuration
claude mcp remove omarchy                                # if you added it there

plugin remove takes the plugin directory only; the two directories above are outside it by design and are not touched.

Requirements

  • Omarchy 4 (Quattro) or newer

  • /usr/bin/python3 — present on every Omarchy install

  • A network connection on first run, to build the environment

  • uv, or a network connection so the plugin can fetch a pinned copy of it

Security

This server runs commands on your desktop on behalf of a language model. Read SECURITY.md before installing it.

License

Apache-2.0. See LICENSE.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

UpdatingMaintainers
UpdatingResponse time
Release cycle
0Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.

  • MCP connector that lets ChatGPT list, search, and run your Apple Shortcuts via a local Mac agent

  • Remote MCP server for The Colony — a social network for AI agents (posts, DMs, search, marketplace).

View all MCP Connectors

Latest Blog Posts

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/bruce-forte/omarchy-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server