Skip to main content

quickshell-mcp

An MCP server that connects AI coding agents to live Quickshell, QML, and Qt documentation.

License: MIT PyPI MCP Registry Python codecov Tests


Search APIs, discover implementation patterns, explain errors, and validate QML before your agent writes or runs code.

Why

Quickshell changes quickly, and AI coding agents can generate QML from outdated or incomplete training data. quickshell-mcp lets agents verify APIs against current documentation, find existing implementation patterns, and validate generated QML instead of guessing from memory.

[!IMPORTANT] When sources disagree, official documentation always takes precedence.

Table of Contents

Quick start

pip install quickshell-mcp        # or: uvx quickshell-mcp

Then point your MCP client at it (see Configure below).

Also installable via the Model Context Protocol Registry.

Install from source
git clone https://github.com/franklinnolasco7/quickshell-mcp
cd quickshell-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
Install with Nix
nix run github:franklinnolasco7/quickshell-mcp
Install with Docker
docker build -t quickshell-mcp .
docker run --rm -i quickshell-mcp     # speaks MCP over stdio

What it provides

Quickshell docs Version-aware type references, guides, and changelogs
Qt/QML docs QtQuick, Controls, Layouts, and other base types
Official examples Working Quickshell example configurations
Real-world implementations Searchable Caelestia and Noctalia patterns
Error explanations Grounded diagnosis of QML and Quickshell errors
QML validation Static checks for types, properties, signals, imports, and version compatibility
Version compatibility Whether an API or QML snippet works on a specific Quickshell release
Migration Analyze what a QML config must change to keep working after an upgrade
Unified search Search across multiple sources in one call

Knowledge sources

flowchart LR
    A[Quickshell docs]
    B[Qt/QML docs]
    C[Official examples]
    D[Caelestia]
    E[Noctalia]
    M((quickshell-mcp))
    Agent[AI coding agent]

    A --> M
    B --> M
    C --> M
    D --> M
    E --> M
    M --> Agent

    classDef official fill:#cdeaff,stroke:#1c6dd0,stroke-width:1px,color:#0b3661
    classDef community fill:#ffe3c2,stroke:#d8871b,stroke-width:1px,color:#5c3a05
    classDef core fill:#c9f2d8,stroke:#1f9e5c,stroke-width:2px,color:#0b3d24
    classDef agent fill:#ead6ff,stroke:#8a3ff0,stroke-width:1px,color:#3a1466

    class A,B,C official
    class D,E community
    class M core
    class Agent agent

Official documentation is authoritative. Examples and real-world implementations provide practical reference material (see Source priority).

Configure

opencode (opencode.json):

{
  "mcp": {
    "quickshell": {
      "type": "local",
      "command": ["/absolute/path/to/quickshell-mcp/.venv/bin/quickshell-mcp"],
      "enabled": true
    }
  }
}

Claude Desktop: same JSON under claude_desktop_config.json, wrapped in mcpServers.

For HTTP transport, set QUICKSHELL_DOCS_MCP_TRANSPORT=http (plus optional HOST/PORT).

[!TIP] Set QUICKSHELL_DOCS_MCP_LOG=DEBUG for verbose request logging on stderr.

The QUICKSHELL_DOCS_MCP_* environment variable prefix is retained for backwards compatibility with earlier releases.

Tools

Discovery

Tool What it does
quickshell_search Search Quickshell type names, namespaces, and guide slugs; optionally full-text including deep search over type pages
quickshell_search_all One-call unified search across Quickshell docs/types, Qt types, official examples, and Caelestia/Noctalia implementations
quickshell_find_pattern Describe a feature in plain words and get matching real-world implementations with per-pattern API hints

Documentation

Tool What it does
quickshell_list_versions List published documentation versions and the latest
quickshell_list_types / quickshell_get_type Browse and fetch Quickshell QML type docs
quickshell_list_guide_pages / quickshell_get_guide_page Fetch usage guide pages as Markdown
quickshell_about / quickshell_changelog Fetch project metadata and changelog

Qt / QML

Tool What it does
quickshell_list_qt_types / quickshell_get_qt_type Browse and fetch Qt-side types (QtQuick, Controls, Layouts, ...)
quickshell_validate_qml Statically validate QML source

Examples & implementations

Tool What it does
quickshell_list_examples / quickshell_get_example Browse and read official example configs
quickshell_search_implementations Search Caelestia and Noctalia for patterns (bar, OSD, IPC, ...)
quickshell_get_implementation Read implementation files, narrowed via find=

Debugging & session

Tool What it does
quickshell_explain_error Explain a QML/Quickshell error and suggest a fix, grounded in actual docs
quickshell_check_compatibility Check whether an API, type, or QML snippet is compatible with a specific Quickshell version
quickshell_migrate Analyze what a QML config must change to keep working after a Quickshell upgrade
quickshell_stats Session call counts and cache-hit ratio

Page-fetching tools accept version="latest" (default) or an explicit version like "v0.3.0". Cache-backed tools accept refresh=True to bypass the 30-minute cache.

Typical workflow

flowchart TD
    A[Search] --> B[Find implementation pattern]
    B --> C[Verify API]
    C --> D[Write QML]
    D --> E[Validate]
    E -->|errors| F[Fix errors]
    F --> E
    E -->|clean| G[Done]

    classDef discover fill:#cdeaff,stroke:#1c6dd0,stroke-width:1px,color:#0b3661
    classDef build fill:#ffe3c2,stroke:#d8871b,stroke-width:1px,color:#5c3a05
    classDef check fill:#c9f2d8,stroke:#1f9e5c,stroke-width:1px,color:#0b3d24
    classDef fix fill:#ffd1d1,stroke:#d13b3b,stroke-width:1px,color:#5c0b0b
    classDef done fill:#e3d6ff,stroke:#7b3ff0,stroke-width:2px,color:#2f1466

    class A,B,C discover
    class D build
    class E check
    class F fix
    class G done

Example

Instead of asking an AI agent to guess how to create a workspace indicator in Quickshell, the agent can search for the API, find existing implementations, verify the requested version, generate the QML, and validate it before running it:

flowchart LR
    A[quickshell_search_all] --> B[quickshell_find_pattern]
    B --> C[quickshell_list_versions /<br/>quickshell_get_type]
    C --> D[generate QML]
    D --> E[quickshell_validate_qml]
    E --> F[quickshell_explain_error]

    classDef tool fill:#cdeaff,stroke:#1c6dd0,stroke-width:1px,color:#0b3661
    classDef action fill:#ffe3c2,stroke:#d8871b,stroke-width:1px,color:#5c3a05
    classDef debug fill:#ffd1d1,stroke:#d13b3b,stroke-width:1px,color:#5c0b0b

    class A,B,C tool
    class D action
    class E,F debug

Advanced usage

Static validation, version compatibility, and migration: catch bad QML, verify API support per release, and plan upgrades

Static validation

quickshell_validate_qml performs lightweight static analysis against the same Quickshell and Qt documentation indexes used by the other tools. It can detect:

  • Unknown Quickshell and Qt types
  • Unknown properties, methods, and signals
  • Missing imports
  • Obvious type mismatches
  • APIs unavailable in the requested Quickshell version

[!TIP] quickshell_validate_qml is designed to complement qmlls, not replace it. Dynamic JavaScript and local component resolution are intentionally outside its scope.

{"source": "PanelWindow { foo: 123 }", "version": "latest", "filename": "panel.qml"}

Version compatibility

quickshell_check_compatibility tells you whether a Quickshell API, QML property/method/signal, type, or whole snippet works on a specific release. Pass exactly one of api, type, or code; pin the release with version (or from_version/to_version for a range).

It never concludes from the latest docs page alone: it cross-references the requested version's type index and pages plus the changelog, and returns uncertain rather than guessing when the evidence is insufficient. Qt/QML types (Rectangle, Item, ...) come back as compatible with origin: "qt", because their availability is set by your Qt version, not the Quickshell one.

{"api": "PanelWindow.exclusiveZone", "version": "v0.2.0"}
{"api": "Quickshell.shellRoot", "version": "v0.3.1"}
{"code": "PanelWindow { exclusiveZone: 1 }", "version": "v0.1.0"}

The result includes the verdict, the version evidence (earliest/latest known), any change or rename with a likely replacement, the matching changelog entry, and cited documentation URLs.

Migrating between versions

quickshell_migrate analyzes what a QML config must change to keep working when upgrading from one Quickshell version to another. Pass the QML source (or a single api/type), plus from_version and to_version (both required, ordered oldest to newest).

It reports every removed, renamed, deprecated, or changed API with severity, location, the old and new API, why it must change, a suggested migration, confidence, and a cited source. It also inspects every changelog entry between the versions, so a rename that landed at an intermediate release is reported with the version it landed in. Findings are classified definite (backed by the docs or changelog), likely (documented but low-impact, e.g. deprecation), or manual_review (evidence suggests a change but the exact migration is not provable).

The tool analyzes and recommends; it never rewrites code or files.

{
  "code": "Quickshell { shellRoot: \"/tmp\" }\nPanelWindow { exclusiveZone: 1 }",
  "from_version": "v0.1.0",
  "to_version": "v0.3.1"
}

The report includes the overall verdict (compatible, changes_required, uncertain), the per-issue findings, and an ordered migration plan.

Source priority

When sources disagree, in order of authority:

  1. Official Quickshell documentation
  2. Official Qt documentation
  3. Official Quickshell examples
  4. Real-world implementations

Real-world implementations are practical references, not authoritative API definitions.

Caching

Documentation indexes are cached locally under ~/.cache/quickshell-mcp.

Cache type TTL
Fetched pages (in-memory/disk) 30 minutes
Bulk documentation indexes (disk) 30 days

Use refresh=True to bypass the short-lived cache where supported. The cache location and disk TTL can be configured with the existing QUICKSHELL_DOCS_MCP_* environment variables.

References

Source URL What it provides
Quickshell docs https://quickshell.org Type references, usage guide, changelog
Qt docs https://doc.qt.io/qt-6 QtQuick base types (Rectangle, RowLayout, etc.)
Quickshell examples https://git.outfoxxed.me/quickshell/quickshell-examples Official example configs
Caelestia shell https://github.com/caelestia-dots/shell Real-world implementation references
Noctalia shell https://github.com/noctalia-dev/noctalia (legacy-v4) Real-world implementation references

Development

See CONTRIBUTING.md for setup, workflow, and how to submit changes.

Limitations

  • Validation is static and heuristic; it complements qmlls.
  • Dynamic JavaScript and local component resolution are limited.
  • Official examples may target different Quickshell versions.
  • Deep documentation searches can be slower on a cold cache.
  • Real-world implementations are references and may contain outdated patterns.

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

quickshell_mcp-1.6.0.tar.gz (215.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

quickshell_mcp-1.6.0-py3-none-any.whl (75.2 kB view details)

Uploaded Python 3

File details

Details for the file quickshell_mcp-1.6.0.tar.gz.

File metadata

  • Download URL: quickshell_mcp-1.6.0.tar.gz
  • Upload date:
  • Size: 215.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for quickshell_mcp-1.6.0.tar.gz
Algorithm Hash digest
SHA256 8b0d90509a5300844da39a8b7431c8d9cd268b398817f1fbfc5e7b92f44ad992
MD5 6e3793652635c7276b13d9ed1ac8d821
BLAKE2b-256 cde15b8461e089c743f62db28a74417b5bf21c580c715d55eb901ad561b72a7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for quickshell_mcp-1.6.0.tar.gz:

Publisher: semantic-release.yml on franklinnolasco7/quickshell-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file quickshell_mcp-1.6.0-py3-none-any.whl.

File metadata

  • Download URL: quickshell_mcp-1.6.0-py3-none-any.whl
  • Upload date:
  • Size: 75.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for quickshell_mcp-1.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d717b8da345ffb90d8bd3d9a4fd0ceb5983d25bc6aab80aafbed9fbf01dfcc66
MD5 0d5a3f96e88bbd891ae3e8a8f23ec87d
BLAKE2b-256 db057e4888cd1360172c37d9726f3c5c3cbc84808416f331ab11d5efae0c9e7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for quickshell_mcp-1.6.0-py3-none-any.whl:

Publisher: semantic-release.yml on franklinnolasco7/quickshell-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

1.6.0 This release

2 files

1.5.1

2 files

1.5.0

2 files

1.4.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page