quickshell-docs-mcp
This MCP server lets AI coding agents search, fetch, validate, and work with live Quickshell, QML, and Qt documentation plus real-world example implementations.
Search Quickshell types, namespaces, guide pages, Qt types, official examples, and real-world shells (Caelestia, Noctalia, etc.) in one or many sources
Fetch documentation pages: Quickshell types, usage guides, changelog, Qt/QML reference pages, official examples, and implementation files with optional
find=section jumpsStatically validate QML for unknown types, properties, signals, missing imports, and version-incompatible APIs
Check whether an API, type, or QML snippet is compatible with a specific Quickshell version, including renames and changelog evidence
Migrate QML between Quickshell versions with a prioritized, source-cited change plan
Explain QML/Quickshell errors with fixes grounded in official docs
Generate minimal QML components from plain-language descriptions, with every referenced API verified
Run a coding assistant that routes build, debug, migrate, pattern, and research requests through the appropriate tools
List documentation versions, project metadata, and session stats/cache usage
Provides access to Quickshell's Hyprland-specific QML type documentation (such as HyprlandMonitor and HyprlandWorkspace) and searchable real-world implementation patterns for building Hyprland shells, including workspaces, bars, OSD, IPC, and multi-monitor setups.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@quickshell-docs-mcphow do I use Quickshell.Panel in my config?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
quickshell-mcp
An MCP server that connects AI coding agents to live Quickshell, QML, and Qt documentation.
Search APIs, discover implementation patterns, explain errors, validate QML, inspect a project, run tests, and profile a live shell 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, validate generated QML, and inspect or test a project instead of guessing from memory.
When sources disagree, official documentation always takes precedence.
Related MCP server: Context7 MCP
Table of Contents
Quick start
pip install quickshell-mcp # or: uvx quickshell-mcpThen point your MCP client at it (see Configure below).
Also installable via the Model Context Protocol Registry.
git clone https://github.com/franklinnolasco7/quickshell-mcp
cd quickshell-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install -e .nix run github:franklinnolasco7/quickshell-mcpdocker build -t quickshell-mcp .
docker run --rm -i quickshell-mcp # speaks MCP over stdioWhat 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, Noctalia, and dots-hyprland 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 |
Component generation | Minimal, source-grounded QML components from a plain-language description |
Project intelligence | Analyze, map, search, and classify a project on disk |
Project validation | Validate, lint, check compatibility, and migrate a whole project per file |
Runtime sessions | Start and inspect isolated |
Visual and UI inspection | Windows, screenshots, UI tree, properties, and snapshots |
Runtime testing | Machine-readable test steps, suites, and assertions against a live session |
Performance profiling | Bounded sampling plus static component, binding, and timer analysis |
Desktop adapters | Read-only Hyprland, PipeWire, D-Bus, and system inspection |
Knowledge 2.0 | Version diffs, API graphs, best practices, pattern comparison, provenance |
Intelligence | Project memory, architecture recommendations, regression detection, task plans |
Agent orchestration | Build, debug, migrate, test, and optimize a feature end to end |
Coding assistant | One plain-language request routed through the right tools, returning a structured, source-grounded result |
CI entrypoints | Headless validation, screenshot, runtime-test, compat, and migration scripts |
External tools
Most tools need nothing beyond the quickshell-mcp package. The ones that inspect a real desktop detect their dependency at runtime and report it as unavailable when missing, instead of failing. This applies to runtime sessions, UI inspection, and the desktop adapters.
Dependency | Used by |
| Runtime sessions, UI inspection, testing, |
| Screenshots |
ImageMagick ( | Screenshot diff, visual checks |
| Desktop adapters (each optional, degrades gracefully) |
The headless CI shell (nix develop .#ci) packages quickshell, weston, grim, and imagemagick for running runtime-test and screenshot jobs without a desktop.
Knowledge sources
Six sources back the server: Quickshell docs, Qt/QML docs, official Quickshell examples, and three real-world shells (Caelestia, Noctalia, dots-hyprland). The shells are practical reference material, not authoritative API definitions. See Source priority for how conflicts resolve.
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).
SetQUICKSHELL_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
For the full per-tool list, grouped by capability with mutating and high-risk tools flagged, see docs/TOOLS.md.
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 doneExample
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[quickshell_generate_component]
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,E action
class F debugAdvanced usage
Static validation
quickshell_validate_qml checks QML against the same Quickshell and Qt documentation indexes the other tools use. It catches:
Unknown Quickshell and Qt types
Unknown properties, methods, and signals
Missing imports
Obvious type mismatches
APIs unavailable in the requested Quickshell version
quickshell_validate_qmlcomplementsqmlls; it does not replace it. Dynamic JavaScript and local component resolution are outside its scope.
{"source": "PanelWindow { foo: 123 }", "version": "latest", "filename": "panel.qml"}Version compatibility
quickshell_check_compatibility checks whether a Quickshell API, QML property/method/signal, type, or whole snippet works on a specific release. Pass one of api, type, or code; choose the release with version (or use from_version/to_version for a range).
It does not judge from the latest docs page alone. It cross-references the requested version's type index and pages plus the changelog, and returns uncertain when the evidence is not enough. Qt/QML types (Rectangle, Item, ...) show as compatible with origin: "qt", because your Qt version sets their availability, 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 rename or change 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 scans the breaking-change changelog entries between the versions that mention the referenced symbols, 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.
Component generation
quickshell_generate_component turns a plain-language description into a minimal QML component, e.g. "Create a Hyprland workspace indicator", "animated volume OSD", "top bar with workspaces, clock and system tray", "popup control center", or "notification popup".
{"description": "volume OSD", "version": "latest", "compositor": "hyprland"}The generator searches for the request (using the same search and pattern tools as the rest), builds a small component from the section templates, then checks every Quickshell type and property/method it references against the requested version with quickshell_check_compatibility and runs the assembled QML through quickshell_validate_qml. An API that cannot be verified is shown in the result, not silently emitted, so the output never passes off an unverified API as valid.
The result includes the generated QML plus:
dependencies: imports, required Quickshell types, and Qt typesverified_surface: the documented properties/methods/signals of every type the component uses, so you can rewrite the QML against verified membersintegration: compositor and external-service requirements (Hyprland socket, PipeWire, a notification daemon, ...)verification: per-API compatibility verdicts and an overallverified/unverifiedflagvalidation: the diagnostics from the static validatorreferences: documentation, official examples, and real-world implementations to compare againstassumptions: the conservative choices made (default palette, unrecognized compositor, requested windows that were not embedded)
compositor="hyprland" generates Hyprland-specific types; any other value is noted and generates no compositor-specific code. A request that matches no template still returns verified_surface plus references, so you can compose the component yourself. Each generated file contains one top-level window: if a request mentions several windows (such as a bar and a notification popup), the primary one is generated and the rest are listed under assumptions instead of being nested. The tool writes nothing to disk.
Coding assistant
quickshell_coding_assistant is an orchestration layer over the other tools, for tasks that span several of them. Give it one plain-language development request and it runs a fixed pipeline of stages: search, verify, generate, validate, migrate, research (provenance), and optionally execute. Each stage activates only the tools the request needs. The result is structured and source-grounded, with sections for understanding, relevant APIs, recommended approach, implementation references, compatibility, validation, remaining issues, sources, provenance, and a terminal grounded_result.
{"request": "Build a Hyprland workspace bar"}
{"request": "Why is this PanelWindow failing?", "code": "PanelWindow { foo: 1 }"}
{"request": "Migrate this shell from v0.2 to v0.3", "from_version": "v0.2.0", "to_version": "v0.3.1"}
{"request": "Find an implementation of a volume OSD and adapt the pattern"}Requests map to five intents, each running the relevant pipeline stages:
build ("build/add/make a ...") delegates the search and verify stages to
quickshell_generate_component, which runs them internally, and its validated QML becomesgrounded_result.debug ("why is X failing?", "fix this error") runs search (
quickshell_explain_error) and verify (relevant type page + compatibility), then validate (quickshell_validate_qml);grounded_resultis the diagnosis and fix.migrate ("migrate/upgrade from vX to vY") runs search (breaking-change changelog when no code is given), validate against the target version, and migrate (
quickshell_migrate);grounded_resultis the ordered migration plan.pattern ("find an implementation ... and adapt it") runs search (
quickshell_find_pattern, with a short excerpt of the top implementation) and verify (compatibility of the hinted APIs);grounded_resultis the excerpt plus verified APIs.research ("what is X?", "how do I ...?") runs search (all sources) and verify (top type and guide pages + compatibility);
grounded_resultlists the resolved types and guides.
Execution is off by default: the assistant never modifies files. To let it apply an explicit, validated edit set, pass permitted_execution=True together with edits=[...] (same shape as quickshell_apply_patch) and a project= path. Non-permitted requests record an execution step and continue read-only.
Version and compositor come from the request text (0.2, hyprland) or from the version/compositor/from_version/to_version parameters. Loose version hints resolve at runtime against the published list. Each step runs in isolation, so a failing source shows up in errors instead of failing the whole request. The result carries an orchestration trace of the tools used and a deduplicated sources list. The basis tags on approach steps and the verified flag on API entries separate verified facts (from the official docs) from recommendations.
When to use it: multi-step development requests, or when you do not yet know which single tool fits. For a single, focused lookup (one type page, one error message, one version check) call the specific tool directly; it is cheaper and gives the raw answer.
Project analysis
quickshell_project_analyze, quickshell_project_map, and quickshell_project_find read a project on disk without executing anything. Analysis marks unknown values explicitly, the map distinguishes confirmed from inferred edges (and reports cycles), and find searches project files with location and context. quickshell_project_dependencies classifies imports as required, optional, detected, or missing.
{"project": "/path/to/shell"}quickshell_project_validate, quickshell_project_lint, quickshell_project_compatibility, and quickshell_project_migrate run the same engines used by the single-file tools across every QML file, grouped by file and severity. Lint uses an extensible rule table; compatibility never overclaims runtime incompatibility; migrate produces machine-readable proposed edits and never writes.
Runtime sessions
Runtime tools launch real qs processes in isolated XDG directories so a managed shell never touches your desktop session. They are opt-in and mutating, and require qs on PATH.
{"project": "/path/to/shell", "entrypoint": "main.qml"}quickshell_runtime_start returns a session id; quickshell_runtime_status, quickshell_runtime_logs, and quickshell_runtime_ping inspect it; quickshell_runtime_stop and quickshell_runtime_reset manage the lifecycle. Profiles are named and versioned via the ecosystem quickshell_profile_* tools and can be reused by start.
Visual and UI inspection
quickshell_windows, quickshell_ui_tree, and quickshell_ui_find inspect a running session. Screenshots need grim and a compositor; UI introspection needs an inspector IpcHandler target in the shell. quickshell_ui_set_property and quickshell_ui_invoke mutate the session through IPC and return the old/new state; quickshell_ui_eval is high-risk (explicit opt-in, time-limited, output-bounded) and never touches the filesystem.
Testing
quickshell_test runs a machine-readable test (steps then assertions, screenshot on failure); quickshell_test_suite runs several tests in isolation; quickshell_assert, quickshell_test_macro, and quickshell_test_record build up steps; quickshell_test_report summarizes a suite.
{"session_id": "abc123", "tests": [{"name": "bar shows", "assertions": [{"type": "visible", "target": "bar"}]}]}Performance
quickshell_profile samples a session's CPU/memory over a bounded window. quickshell_profile_component, quickshell_profile_bindings, quickshell_profile_timers, and quickshell_profile_object_tree analyze a project statically. quickshell_performance_diagnose correlates the evidence into hypotheses with confidence, and never attributes cost without evidence.
Agents
quickshell_build_feature, quickshell_debug, quickshell_migrate_project, quickshell_test_feature, quickshell_optimize, and quickshell_engineer each run an explicit staged plan over the lower-level tools. Every stage is isolated, so one failure never sinks the plan. quickshell_engineer composes the whole loop (build, test, debug, optimize, verify) and returns every stage's result plus a flattened plan.
Source priority
When sources disagree, in order of authority:
Official Quickshell documentation
Official Qt documentation
Official Quickshell examples
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 | Type references, usage guide, changelog | |
Qt docs | QtQuick base types (Rectangle, RowLayout, etc.) | |
Quickshell examples | Official example configs | |
Caelestia shell | Real-world implementation references | |
Noctalia shell | https://github.com/noctalia-dev/noctalia (legacy-v4) | Real-world implementation references |
dots-hyprland | Real-world implementation references (the "ii" shell) |
Development
See AGENTS.md for the internal architecture (the four-layer capability/source stack, the CI script list, and coding/commit conventions) and CONTRIBUTING.md for setup and workflow.
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.
Runtime and inspection tools are opt-in and need
qson PATH; screenshots also need a compositor, and UI introspection needs aninspectorIpcHandler target.
License
Available Tools
15 toolsquickshell_aboutA
Fetch the Quickshell 'About' page (https://quickshell.org/about/) as Markdown. Use this for high-level questions like what Quickshell is, who maintains it, and how it's licensed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It discloses that the tool fetches a remote page and returns it as Markdown, which clearly signals a read-only network retrieval. It does not mention rate limits or error behavior, but for a simple fetch operation this is adequately transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler: the first sentence states the action, resource, and output format; the second gives concise usage guidance. Every component earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter tool with an output schema, the description is complete. It identifies the exact URL, the output format, and the type of questions it answers, which is enough for an agent to select and invoke the tool correctly alongside its siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema coverage, so there is nothing for the description to add about parameter semantics. The baseline of 4 applies because no parameter documentation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Fetch'), a specific resource ('the Quickshell About page'), and an output format ('as Markdown'). It also defines the intended use case ('high-level questions like what Quickshell is, who maintains it, and how it's licensed'), which distinguishes it from sibling tools focused on versions, changelogs, guide pages, types, examples, and search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage context: use for high-level questions about what Quickshell is, maintainership, and licensing. It doesn't explicitly mention when not to use it or name alternative sibling tools, but for this simple no-argument fetch tool the guidance is sufficient to route an agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quickshell_changelogA
Fetch the Quickshell changelog (https://quickshell.org/changelog/) as Markdown. Use this to answer 'what's new / what changed' questions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states the return format (Markdown) and the source URL, giving the agent a concrete expectation of the output. It doesn't mention freshness or failure modes, but for an idempotent fetch of public documentation this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with the verb and resource front-loaded, plus a source URL and a targeted use-case hint. Every element earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and zero parameters, the definition covers the what, the source, and the typical query it answers. It could add a note about which sibling to use for version listings, but nothing essential is missing for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is trivially 100%, so there is nothing the description needs to add. The baseline of 4 for a no-parameter tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Fetch') and resource ('Quickshell changelog'), and pins the exact use case: answering 'what's new / what changed' questions. This clearly distinguishes it from siblings like quickshell_list_guide_pages and quickshell_list_types, which serve different content areas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool: 'Use this to answer what's new / what changed questions,' which gives an agent clear selection criteria. It does not name sibling tools or state exclusions, but for a zero-parameter changelog fetch this context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quickshell_get_exampleA
Read one file from the official Quickshell examples repo verbatim (QML configs, READMEs). Get valid paths from quickshell_list_examples. Prefer these maintained examples over writing a shell config from memory.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full behavioral burden. It clearly indicates a read operation ('read one file') and notes content is returned verbatim. It also hints at the dependency on list_examples for path validity. Missing details like error handling or output format are mitigated by the presence of an output schema, so the description covers the essential behavior well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero redundancy. The purpose is front-loaded, followed by a clear directive on obtaining inputs and a recommendation. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter read tool with an output schema defined, the description is nearly complete. It covers purpose, input sourcing, and usage preference. It omits explicit error scenarios, but these are likely standard and not required for a straightforward get operation. The combination of description, schema, and output schema suffices for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides indirect but effective guidance: the 'path' should be a valid path obtained from quickshell_list_examples. This tells the agent how to find permissible values, which is highly useful. It doesn't detail path format or constraints, but the reference to the list tool is a strong semantic anchor.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('read') and resource ('official Quickshell examples repo') and clarifies it returns file content verbatim (QML configs, READMEs). It also distinguishes from siblings by mentioning quickshell_list_examples as the source of valid paths, so an agent can tell this is the getter for example files rather than guide pages or types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to first call quickshell_list_examples to obtain valid paths, and recommends preferring these maintained examples over writing config from memory. This gives clear when and how to use the tool, and implies when not to (avoid writing from memory). It fully covers usage context without requiring inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quickshell_get_guide_pageA
Fetch one Usage Guide page as Markdown, e.g. slug='introduction' or slug='qml-language'. Call quickshell_list_guide_pages first if you don't know the exact slug. Defaults to the latest doc version.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| version | No | latest |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since annotations are absent, the description carries the burden. It discloses the read-only nature implicitly via 'Fetch', specifies the output format (Markdown), and mentions the default version and the need to list first. It does not cover error cases or authentication, but for a simple get tool this is largely sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no redundancy. The core action is front-loaded, followed by practical guidance. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple nature of the tool and the presence of an output schema, the description covers the essential inputs, the default behavior, and how to obtain valid slugs. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain parameters. It gives concrete examples for slug and states the version defaults to 'latest', fully clarifying both parameters beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it fetches one Usage Guide page as Markdown, with concrete slug examples. It distinguishes from sibling list_guide_pages by instructing to call it first if slug unknown, and from other guide tools (types, examples) by the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to call quickshell_list_guide_pages first if the exact slug is not known, providing a clear alternative. It also notes the version defaults to latest, which sets expectations. Does not explicitly list exclusions for other siblings, but the resource type is distinct enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quickshell_get_implementationA
Read a QML file from the Caelestia or Noctalia shells (get paths from quickshell_search_implementations). Pass find='osd' / find='workspace' / find='ipc' etc. to jump to the most relevant section instead of pulling the whole large file. This is a real-world implementation reference, NOT official documentation: when it disagrees with quickshell.org or doc.qt.io, trust the docs.
| Name | Required | Description | Default |
|---|---|---|---|
| find | No | ||
| path | Yes | ||
| source | Yes | ||
| max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does meaningful work: it discloses that this is a real-world implementation reference, NOT official documentation, and tells the agent to trust the docs on disagreement — a valuable reliability caveat beyond any schema. It also implies files are large and subject to partial reads, though it doesn't explicitly describe max_chars truncation behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences with no filler: purpose first, then parameter usage, then the reliability caveat. The organization is logical and every sentence earns its place, though it could tighten the parameter list slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 params, 0% schema coverage, and no annotations, the description covers the tool's purpose, the supporting workflow, the find behavior, and a key reliability caveat, while an output schema exists to describe return values. Remaining gaps (max_chars semantics, exhaustive source values) are minor for a documentation-reading tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does well for most parameters: it explains find's values ('osd'/'workspace'/'ipc') and purpose, and tells the agent where path comes from. Source is only implied via 'Caelestia or Noctalia', and max_chars is left unexplained, leaving minor gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') with a precise resource ('a QML file from the Caelestia or Noctalia shells'), which clearly distinguishes it from the sibling get_* tools (get_type, get_guide_page, get_example, get_qt_type). The reference to quickshell_search_implementations further differentiates its data source.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the workflow for obtaining paths from quickshell_search_implementations before calling, and instructs how to use the find parameter to jump to relevant sections. It implies usage context versus siblings but does not explicitly state when NOT to use this tool in favor of the other get_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quickshell_get_qt_typeA
Fetch one Qt type's reference page from doc.qt.io as Markdown, e.g. Rectangle, Text, MouseArea, Timer, Item, RowLayout, or a value type like color or vector3d. Use this when a Quickshell config imports QtQuick / QtQuick.Controls / QtQuick.Layouts types and you need their properties, signals, or syntax. Pass module (e.g. 'qtquick', 'qtquick-controls') to disambiguate names that exist in several modules. qt_version pins a minor (e.g. '6.8') to match your installed Qt instead of the newest.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| module | No | ||
| qt_version | No | latest |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and discloses genuine behaviors: output is Markdown from an external source (doc.qt.io), the module parameter disambiguates names that exist in several modules, and qt_version defaults to the newest doc set unless pinned to a minor. It does not cover failure behavior (unknown type name or ambiguous names without module), but the disclosed traits go well beyond a bare fetch statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero filler: purpose and output format front-loaded, followed by examples, the use-case trigger, then the two optional parameters. Every sentence earns its place and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Selection context, invocation details for all three parameters, source, and output format are all covered, and the output schema handles the return-value contract. The only gap is unspecified failure behavior when a name is unknown or ambiguous and module is omitted, which is minor for a doc-fetch tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate — and it does for all three parameters. name gets concrete examples and the notion of value types (color, vector3d); module gets a purpose ('disambiguate names that exist in several modules') plus examples like 'qtquick' and 'qtquick-controls'; qt_version gets a rationale ('match your installed Qt instead of the newest') with a format example ('6.8').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Fetch one Qt type's reference page from doc.qt.io as Markdown,' backed by concrete examples (Rectangle, Text, MouseArea, Timer, Item, RowLayout, color, vector3d). The explicit mention of doc.qt.io and QtQuick/QtQuick.Controls/QtQuick.Layouts cleanly distinguishes it from the sibling quickshell_get_type, which targets Quickshell's own types, and from the list/search siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition: 'Use this when a Quickshell config imports QtQuick / QtQuick.Controls / QtQuick.Layouts types and you need their properties, signals, or syntax.' It does not name when-not-to-use conditions or directly point to an alternative like quickshell_get_type, though the use-case framing strongly implies the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quickshell_get_typeA
Fetch the documentation page for one QML type as Markdown, e.g. type_name='PanelWindow', namespace='Quickshell', or type_name='HyprlandMonitor', namespace='Quickshell.Hyprland'. Call quickshell_list_types first if you're unsure of the exact namespace or type name (they are case-sensitive). Defaults to the latest doc version.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | latest | |
| namespace | No | Quickshell | |
| type_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It states the operation is a fetch (implying read-only) and mentions the output is Markdown and the default version. However, it does not disclose potential errors, rate limits, or any side effects, which is acceptable for a read-only tool but leaves some unknown.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main purpose and examples, then a usage tip and default. Each sentence earns its place; no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given it is a simple doc-fetch tool with an output schema, the description covers the essential usage: what it does, examples, case-sensitivity, and default version. It doesn't mention alternatives like quickshell_get_qt_type, but the 'QML type' phrasing implies the distinction. Overall, an agent has enough to correctly select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It provides examples for type_name and namespace, and explains case-sensitivity, which helps the agent form valid arguments. However, it does not describe the accepted format for version beyond 'latest', nor how to discover available versions (despite a sibling list_versions). It adds value but not fully comprehensive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a documentation page for a QML type as Markdown, with concrete examples (PanelWindow, HyprlandMonitor). It distinguishes from siblings by specifying 'QML type' vs Qt types, though it does not explicitly name alternatives. The purpose is unambiguous and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to call quickshell_list_types first when unsure of namespace/type name, and notes case-sensitivity. This gives clear when-to-use guidance and references a sibling tool, leaving no ambiguity about prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quickshell_list_examplesA
List files and folders in the official Quickshell examples repo (real-world sample shell/bar/widget configs written by the Quickshell authors). Call with no path to list the root, then drill into a folder using its path. Pair with quickshell_get_example to read a file's contents.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the safety and behavior info. It conveys read-only listing and implies direct children via 'drill into a folder', but does not explicitly state output format or non-recursive behavior. Still, for a simple list tool, it is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The core purpose is front-loaded and the practical usage guidance is concise. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter list tool with no output schema, the description covers invocation, default behavior, and how to get file contents via a sibling. Nothing essential is missing for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'path' parameter has no schema description coverage, but the description fully explains its meaning and default behavior ('Call with no path to list the root, then drill into a folder using its path'). This adds meaningful semantics beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('list') and resource ('files and folders in the official Quickshell examples repo'). It also differentiates from siblings like quickshell_get_example and implies the set of examples, making it clear what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says how to start ('with no path'), how to drill down ('using its path'), and how to pair with quickshell_get_example to read files. This gives clear usage context and differentiates from the read tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quickshell_list_guide_pagesA
List the Usage Guide pages available for a given doc version (e.g. install-setup, introduction, size-position, qml-language, advanced, faq). Defaults to the latest version if none given. Set refresh=True to bypass the in-process cache.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No | ||
| version | No | latest |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior on its own. It mentions the in-process cache and how to bypass it with refresh=True, and the default version behavior. However, it does not disclose error handling (e.g., what happens if an invalid version is given), output format beyond 'list', or any side effects. For a simple listing tool, the disclosed cache behavior adds value, but the lack of error/return specifics leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise—two sentences—and front-loads the core purpose (listing guide pages) while immediately adding examples. It then covers the two parameters (version, refresh) efficiently. No unnecessary words or repetition. Every sentence contributes value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a simple list operation with no output schema, the description adequately conveys the action and inputs. However, it does not specify the return structure (e.g., an array of page names) or how the list is presented. For an agent, knowing the exact output type would reduce ambiguity, especially when chaining with get_guide_page. The description is adequate but not fully complete in terms of expected results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully interpret both parameters. It explains 'version' as a doc version and provides examples (install-setup, introduction, etc.), clarifying expected values beyond the schema's default 'latest'. It also explains the 'refresh' parameter as a cache-bypass flag. This adds meaning the schema lacks, though it could be slightly more explicit about possible version formats (e.g., valid strings) but the examples suffice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'List the Usage Guide pages available for a given doc version.' It provides concrete examples of pages (install-setup, introduction, etc.), making the resource and scope unambiguous. While it does not explicitly name sibling tools, the verb 'list' versus 'get' in siblings like quickshell_get_guide_page strongly differentiates it without needing further clarification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers context on when to use the tool by mentioning it works for a specific doc version and defaults to latest if not provided. It also explains the refresh parameter for cache bypass. However, it provides no explicit guidance on when to choose this tool over alternatives (e.g., when to use list_guide_pages vs get_guide_page), and no exclusions or restrictions are stated. The use case is implied but not contrasted with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quickshell_list_qt_typesA
List QML types documented on doc.qt.io for QtQuick and its sibling modules (Controls, Layouts, Effects, Shapes, ...), discovered from the QtQuick module page. Use this for Qt base types like Rectangle, Text, MouseArea, Timer, or RowLayout that Quickshell configs import but the Quickshell docs don't describe themselves. For Quickshell-specific types use quickshell_list_types instead. qt_version pins a minor (e.g. '6.8', '6.7') instead of the newest release. Set refresh=True to bypass the in-process cache.
| Name | Required | Description | Default |
|---|---|---|---|
| module | No | ||
| refresh | No | ||
| qt_version | No | latest |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it discovers types from the QtQuick module page, the pinning behavior of qt_version, and the cache bypass via refresh=True. Although it doesn't mention output format or error handling, given no annotations and the read-only nature of a list tool, it provides sufficient behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, with clear separation of purpose, usage guidance, and parameter notes. Every sentence adds value, and key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with three optional parameters and no output schema, the description covers the main usage and cache behavior. The ambiguity around the module parameter is a minor gap, but overall the description is sufficient for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains qt_version (pins minor version) and refresh (bypasses cache) but does not explain the module parameter's purpose or allowed values. With schema coverage at 0% in the context signal, the description partially compensates but leaves module semantics unclear, which is a gap for agents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists QML types from doc.qt.io for QtQuick and its sibling modules, and explicitly differentiates it from quickshell_list_types for Quickshell-specific types. It uses a specific verb and resource, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs when to use (for Qt base types) and when not (for Quickshell-specific types, use quickshell_list_types instead). It also explains the qt_version parameter behavior. This leaves no ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quickshell_list_typesA
List Quickshell QML types, optionally filtered to one namespace (e.g. 'Quickshell.Hyprland', 'Quickshell.Io', 'Quickshell.Services.Pipewire'). Call with no namespace to see every namespace and its types. Defaults to the latest doc version. Set refresh=True to bypass the in-process cache.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No | ||
| version | No | latest | |
| namespace | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It usefully discloses that the tool defaults to the latest doc version and uses an in-process cache that can be bypassed with refresh=True. This adds meaningful behavioral context beyond a basic one-line description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded. It opens with what the tool does, immediately gives examples, and then covers the remaining parameters in short, unambiguous sentences with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity listing tool, the description is nearly complete. It covers all three parameters and the main usage modes, but since there is no output schema, it could have briefly described the return shape or structure. This is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no per-parameter descriptions, so the description must compensate. It does so effectively: namespace is illustrated with concrete examples, the no-namespace behavior is specified, version defaults to 'latest', and refresh=True is explained as bypassing the cache.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List Quickshell QML types'. It also clarifies optional namespace filtering, distinguishing this from siblings like quickshell_list_qt_types by explicitly saying 'QML types' rather than 'Qt types'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: call with no namespace to see all namespaces, or pass a namespace to filter. It also explains when to use refresh=True and that it defaults to the latest version, though it does not explicitly name alternatives or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quickshell_list_versionsA
List all Quickshell documentation versions currently published on quickshell.org, newest first, and report which one is latest. Use this before fetching a page if you're unsure which version to use. Set refresh=True to bypass the in-process cache.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses the live source, newest-first ordering, the latest-version reporting, and the in-process cache behavior with the refresh=True bypass. This gives the agent the key behavioral traits beyond the raw schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: purpose/ordering/latest, usage context, and parameter clarification. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description is complete. It states what the return behavior is (list, newest first, latest identified) and how to control caching, which is all an agent needs to call it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, 'refresh', has no schema description, but the tool description fully explains its meaning: 'Set refresh=True to bypass the in-process cache.' The default false behavior is implied by the schema and the cache explanation, so the parameter is completely covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation: list all Quickshell documentation versions from quickshell.org, ordered newest first, and identify the latest. This clear verb+resource phrase distinguishes it from siblings like quickshell_get_version and quickshell_get_page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly advises using this tool 'before fetching a page if you're unsure which version to use,' giving a concrete decision context. It does not name alternatives or exclusions, but the guidance is unambiguous enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quickshell_searchA
Search Quickshell type names, namespaces, and guide page slugs for a substring match (case-insensitive). ALWAYS call this before writing any QML that references a Quickshell type or property from memory; never guess property/type names, verify them here first.
Use this whenever a request mentions a desktop-shell feature and you don't already know the exact Quickshell type name, e.g.:
"battery" / "power" / "upower" -> search 'battery' or 'power' (UPower, UPowerDevice)
"volume" / "audio" / "mixer" -> search 'audio' or 'volume' (Pipewire, PwNode)
"tray" / "system tray" -> search 'tray' (SystemTray, SystemTrayItem)
"workspaces" / "monitor" -> search 'monitor' or 'workspace' (HyprlandMonitor, HyprlandWorkspace, I3Monitor)
"notifications" -> search 'notification' (Notification, NotificationServer)
"network" / "wifi" -> search 'wifi' or 'network' (WifiDevice, Network)
"bluetooth" -> search 'bluetooth' (Bluetooth, BluetoothDevice)
"clock" / "date" / "time" -> search 'clock' (SystemClock)
For concept/how-to questions where the answer is prose rather than a type name ("where is IPC documented?", "how do anchors work?"), pass include_content=True; this also full-text-searches the guide-page bodies. Pass include_type_pages=True to also deep-search the ~200 type reference pages for property/method/signal text (slower: first call fetches every type page once, then it's cached).
Returns matches with enough info to call quickshell_get_type or quickshell_get_guide_page directly. Namespace and type matches are reported separately so a namespace hit doesn't flood the results with all of its types. Defaults to the latest doc version. Set refresh=True to bypass the in-process cache.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| refresh | No | ||
| version | No | latest | |
| include_content | No | ||
| include_type_pages | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden and delivers. It discloses that matching is case-insensitive substring, that namespace/type results are separated to avoid flooding, that include_type_pages triggers a slow first-call caching behavior, and that refresh bypasses the cache. It also states defaults (latest version) and return-value usability. This exceeds what is expected from a description alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured: core purpose, imperative instruction, usage examples, parameter clarifications, and return behavior. It is front-loaded with the most critical takeaway ('ALWAYS call this...'). A few redundancies (default version noted inline and in schema) and the extensive example list add length, but nearly every sentence earns its place. Slightly overlong relative to strict conciseness, hence a 4 rather than 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with 5 parameters and no output schema, the description is complete. It explains what results look like ('matches with enough info to call quickshell_get_type or quickshell_get_guide_page directly'), covers caching/refresh, and distinguishes itself among a large sibling set. Nothing an agent needs to select and invoke this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain every parameter. It does: query (substring match), include_content (full-text search of guide bodies), include_type_pages (deep-search type reference pages), refresh (bypass cache), and version (defaults to latest). Each parameter is tied to a concrete use case, adding meaning far beyond the bare boolean/string types in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Search Quickshell type names, namespaces, and guide page slugs for a substring match (case-insensitive).' This clearly defines what the tool does and distinguishes it from sibling tools like quickshell_list_types and quickshell_get_type, which retrieve known items rather than searching. The explicit instruction to 'never guess property/type names, verify them here first' further anchors the tool's role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is explicit and actionable: 'ALWAYS call this before writing any QML that references a Quickshell type or property from memory' and includes concrete examples mapping user intents to search terms. It also explains when to set include_content=True for prose questions and include_type_pages=True for deep type-page searches, effectively covering both when and when-not-to-use scenarios. This is a textbook example of usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quickshell_search_implementationsA
Search real-world Quickshell shells (Caelestia, Noctalia) for implementations: 'find a bar implementation', 'find a control center example', 'find Quickshell IPC usage', 'find multi-monitor implementation', 'find workspace widget', 'find notification/OSD/launcher implementation', 'find lock screen', 'find wallpaper handling', 'find Quickshell animations', 'find service patterns', 'find reusable QML components', 'find Hyprland/Niri integration', 'find volume/audio implementation', 'find wifi/network implementation', 'find bluetooth', 'find brightness', 'find battery implementation', 'find media controls'. Restrict to one shell with source='caelestia' or source='noctalia'; to compare approaches, call once per shell. These are practical references, NOT API docs: verify API surface with quickshell_search/ quickshell_get_type. Get file contents via quickshell_get_implementation.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| source | No | all |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It clearly states the results are practical references, not authoritative API docs, and directs verification to other tools, setting expectations about result reliability. It does not explicitly state read-only status, but that is implied by 'search'. It also explains the source-filtering behavior and the need to call per shell. Slight gap: no mention of rate limits or response format, but the core behavioral caveat is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then provides a long but highly useful list of example queries that clarifies the tool's scope, followed by concrete usage guidance and tool differentiation. Every sentence adds value: the example list helps agents craft appropriate queries, the source guidance prevents misuse, and the API-verification note prevents incorrect assumptions. It is dense yet structured, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description should clarify what the tool returns. It implies results are references to implementations, as it says to fetch file contents via quickshell_get_implementation. It also covers source filtering and how to compare shells. It does not explicitly state the return format (e.g., list of paths or metadata), but given the existence of a dedicated content-fetching sibling and the clear search role, the description is reasonably complete for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It extensively documents the query parameter with many example values ('find a bar implementation', 'find a control center example', etc.), and explains the source parameter's allowed values ('caelestia' or 'noctalia') and its purpose. The limit parameter is not mentioned, but it is a standard integer with a default, so its semantics are easily inferred. Overall, the description adds strong meaning beyond the raw schema for the critical parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear, specific purpose: searching real-world Quickshell shell implementations (Caelestia, Noctalia) for concrete code patterns, with a long list of example query intents. It explicitly distinguishes itself from API documentation tools ('These are practical references, NOT API docs') and from quickshell_get_implementation (which retrieves file contents), so an agent can easily tell it apart from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use instructions: restrict to one shell via the source parameter ('source=caelestia' or 'source=noctalia') and call per shell to compare approaches. It also names when to use other tools: verify API surface with quickshell_search/quickshell_get_type, and get file contents via quickshell_get_implementation. This is concrete, actionable guidance leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quickshell_statsA
Report session usage stats for this MCP server: per-tool call counts, network fetches vs cache hits, and process uptime. Use this to check how much the server has been consulted and how much it hit the live site vs its 30-minute cache.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior. It explicitly lists what data is reported (call counts, fetch vs cache hits, uptime) and mentions the 30-minute cache, which clarifies the meaning of cache hits. It implies a read-only operation without stating it outright, but 'report' strongly signals no side effects. Slightly better would be an explicit note that it does not mutate state, but the description is transparent about its output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences. The first immediately enumerates the tool's output categories, and the second adds a practical usage context. There is no fluff or redundancy; information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (no parameters, no output schema) yet the description fully conveys what an agent needs: what the tool reports, why it would be used, and the meaning of cache hits. The mention of the 30-minute cache helps interpret results. Nothing essential is missing for this diagnostic tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is 100% and there is nothing to explain. The description adds no param details, but none are needed. A baseline 4 is appropriate given the absence of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Report') and resource ('session usage stats for this MCP server') and enumerates the exact contents (per-tool call counts, network fetches vs cache hits, process uptime). It clearly distinguishes itself from sibling tools that retrieve content, making it obvious this is a diagnostic tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence explicitly says 'Use this to check how much the server has been consulted and how much it hit the live site vs its 30-minute cache,' providing a concrete use case. Since no sibling tool offers stats, no alternative routing is required, but the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
15 tool updates
v1.0.1- First observed
quickshell_about - First observed
quickshell_changelog - First observed
quickshell_get_example - First observed
quickshell_get_guide_page - First observed
quickshell_get_implementation - First observed
quickshell_get_qt_type - First observed
quickshell_get_type - First observed
quickshell_list_examples - First observed
quickshell_list_guide_pages - First observed
quickshell_list_qt_types - First observed
quickshell_list_types - First observed
quickshell_list_versions - First observed
quickshell_search - First observed
quickshell_search_implementations - First observed
quickshell_stats
TDQS
Each tool targets a distinct resource: versions, about, changelog, guide pages, Quickshell types, Qt types, examples, real-world implementations, and stats. Search tools are clearly separate from getters, and no two tools have overlapping purposes.
All tools follow a consistent quickshell_<verb>_<noun> pattern, with verbs like list, get, search, and stats. Even the page-fetch tools (about, changelog) fit the scheme as predictable nouns. There is no mixing of conventions.
15 tools is at the upper end of the ideal 3-15 range, but each tool earns its place given the breadth of the documentation domain (versions, guides, types, examples, implementations, stats). No tool feels redundant or extraneous.
The surface is comprehensive: it covers versions, general info, changelog, guide pages, type references for both Quickshell and Qt, search across all content, official examples, real-world implementations, and usage stats. There are no obvious gaps that would block an agent's workflow.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Versioned documentation registry and semantic search for AI tools and coding assistants.
The documentation, as a tool your agent can call: 950+ AI-dev guides. Search + fetch tools.
Provide your AI coding tools with token-efficient access to up-to-date technical documentation for…
@latest documentation and code examples to 9000+ libraries for LLMs and AI code editors in a singl…
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides instant access to 700+ programming documentation sources and creates isolated Docker containers for safe code testing and experimentation. Combines comprehensive documentation lookup with containerized development environments for enhanced development workflows.AGPL 3.0
- AlicenseAqualityDmaintenanceProvides up-to-date, version-specific documentation and code examples for libraries and frameworks directly into AI prompts, eliminating outdated code generation and hallucinated APIs.2879,513MIT
- AlicenseAqualityCmaintenanceProvides LLMs with up-to-date, version-specific documentation and code examples directly from library sources, eliminating outdated training data and hallucinated APIs by fetching current documentation at prompt time.42879,513MIT
- FlicenseAqualityDmaintenanceProvides AI models with direct access to documentation for over 600 technologies from DevDocs.io, including popular languages, frameworks, and tools. It enables comprehensive searching, content retrieval, and offline access via an intelligent local caching system.122-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/franklinnolasco7/quickshell-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server