qlik-cloud-admin
Provides tools for managing Qlik Cloud tenant administration, including reading resources, deleting resources with governance rules, and interacting with Qlik Answers assistants.
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., "@qlik-cloud-adminlist all shared spaces"
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.
Qlik Cloud Admin MCP Server
Demo and experimental use only. This project is provided as-is to illustrate concepts. It is not production-ready, not officially supported by Qlik, and carries no warranty of any kind. Anyone using this code does so at their own risk and is responsible for testing and validating it in their own environment before use.
What This Is
A local Model Context Protocol (MCP) server that connects Claude Desktop to a Qlik Cloud tenant for admin operations.
Claude Desktop -> MCP server (this project) -> Qlik Cloud REST API
^
└── signed in as YOU, with your own permissionsIt demonstrates three things:
Extensibility - Qlik Cloud exposes a rich REST API. By wrapping it in an MCP server, any admin operation becomes available as a natural language conversation in Claude Desktop.
Governance - MCP tools can encode business rules. This server shows a concrete example: deleting a resource does not hard-delete it. Instead, it moves it to a "Recycle Bin" shared space, giving admins a recovery window. Deleting spaces is blocked entirely and redirected to the Qlik Cloud Management Console.
Identity - the server acts as the person using it, never as an admin service account.
This server complements the official Qlik MCP Server, which covers analytics operations. This one covers admin and governance operations that the official server does not expose today.
Related MCP server: Qlik MCP Server
Permissions
This server acts as the person using it. On first use you sign in to Qlik Cloud in your browser, and every request the server makes carries your own identity. If you cannot open an app, a space, or the data load editor in the Qlik hub, you cannot do it here either.
There is no way to elevate, and that is structural rather than a policy:
The only credential in the running process is an access token whose subject is you.
The OAuth client is public - no client secret exists to leak or share, so nothing on your machine can mint a token for another identity.
Only the
user_defaultandoffline_accessscopes are ever requested. Noadmin.*scope is requestable, by configuration or otherwise.There is no API key, no client-credentials grant, and no impersonation grant in the codebase.
A
403is reported as a permission result. Nothing is retried against a different identity, because there is no other identity.
Consequences worth knowing: two users legitimately get different answers to "how many apps are there", and retiring someone else's app requires an admin to be the one signed in.
Credential endpoints (/api/v1/api-keys, /api/v1/oauth-clients, /api/v1/oauth-tokens,
/oauth/*) are refused by the tools before a request is sent. Not because they would escalate
anything, but so a durable credential cannot be minted and echoed into a chat transcript.
Requirements
uv installed on your machine
A Qlik Cloud account on the tenant
The tenant URL and public OAuth client id from your Qlik admin (see below)
Claude Desktop
qlik-cli is not required. Earlier versions shelled out to it; this one talks to the REST API directly.
Setup
For admins: register the OAuth client (once)
Create one native (desktop) public OAuth client for the whole team. If the Management Console does not offer a native option, create it through the API:
curl -X POST "https://<tenant>/api/v1/oauth-clients" \
-H "Authorization: Bearer <admin token>" \
-H "Content-Type: application/json" \
-d '{"clientName":"Qlik Cloud Admin MCP",
"description":"Local MCP server. Each user signs in as themselves.",
"appType":"native",
"redirectUris":["http://localhost/callback"],
"allowedScopes":["user_default","offline_access"]}'Do not send
allowedGrantTypesorallowedAuthMethods: the API rejects them forappType: native, and the grants are implied.Redirect URL:
http://localhost/callback- exactly this host and path. Qlik matches scheme, host and path exactly but ignores the port, so one entry covers every user and every run.127.0.0.1is not an alias forlocalhosthere.Scopes:
user_defaultandoffline_accessonly. Grantingadmin.*oradmin_classicwould defeat the permission model; the server never requests them.Leave the consent method unset. Users then see a Qlik "authorize this application" screen on first sign-in, which is the authorization step this design wants.
No client secret is issued, and none is needed. Give users the client id and the tenant URL.
Reference: Create an OAuth client and the OAuth clients API.
For users: install and sign in
1. Install uv
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"2. Download this repository
git clone https://github.com/mabaeyens/qlik-cloud-admin-mcp.git
cd qlik-cloud-admin-mcp3. Configure
copy .env.example .envFill in the two values your admin gave you. Neither is a secret:
QLIK_TENANT_URL=https://your-tenant.eu.qlikcloud.com
QLIK_OAUTH_CLIENT_ID=your_public_client_id4. Create the Recycle Bin space
In Qlik Cloud, create a shared space named exactly Recycle Bin. The delete tool moves
apps, automations, and data files there instead of hard-deleting them.
Then add every user who will retire content as a member with edit rights. Being able to see the space is not enough, and being a tenant admin is not enough either: moving content into a shared space needs a contributor role in that space, so a tenant admin with no role there gets a 403. Create the space as an admin, or grant the admin full permissions on it afterwards.
5. Configure Claude Desktop
Open %APPDATA%\Claude\claude_desktop_config.json and add the block below inside
mcpServers, replacing the path with where you cloned the repository.
{
"mcpServers": {
"qlik-cloud-admin": {
"command": "uv",
"args": ["--directory", "C:/path/to/qlik-cloud-admin-mcp", "run", "server.py"],
"env": {
"QLIK_TENANT_URL": "https://your-tenant.eu.qlikcloud.com",
"QLIK_OAUTH_CLIENT_ID": "your_public_client_id"
}
}
}
}6. Restart Claude Desktop and sign in
Fully quit and reopen Claude Desktop. Then ask Claude to sign you in, which calls
qlikcloud_login. Your browser opens and Qlik asks you to authorize this application -
approve it. That consent screen is the moment you grant the server permission to act as your
account; it appears once per account. The tab then tells you it is safe to close.
Run qlikcloud_health to confirm which account you are signed in as.
To switch accounts, ask to sign in as a different account — qlikcloud_login with
switch_account=True makes Qlik ask which account to use instead of silently reusing whatever
session your browser already has. Without it, a live Qlik session in the browser signs you
straight back in as the same account.
7. Set the system prompt (recommended if also using the official Qlik MCP Server)
If you have both this server and the official Qlik MCP Server connected, create a Claude Desktop project and add the following system prompt so Claude always prefers the official server for analytics operations:
When both the official Qlik MCP Server and qlik-cloud-admin are connected, always prefer the official Qlik MCP tools for analytics operations (opening apps, searching fields, listing sheets, reading app content). Use qlik-cloud-admin tools only for admin and governance operations not covered by the official server.
Usage
Tool | Description |
| Sign in to Qlik Cloud in your browser, as yourself |
| Sign out, revoke the token, and remove the stored session |
| Tenant, signed-in identity, roles, storage backend, token expiry |
| Read any Qlik Cloud REST endpoint ( |
| DELETE with governance rules enforced (see below) |
| Send a message to a Qlik Answers assistant and get a response |
Six tools, and qlikcloud_get is the only way to read. When the official Qlik MCP Server covers
an operation (opening apps, searching fields, listing sheets), prefer those tools instead.
Why there is no generic POST, PUT or PATCH. They were removed in v0.4.0. A model holding an
unrestricted write verb against a whole tenant is a large blast radius for very little gain, and
any write worth making is worth a purpose-built tool that can say what it is about to change and
ask first — which is what qlikcloud_delete does. Keeping the surface small has a second
benefit: MCP clients that ration tool schemas start hiding them behind a search once enough
servers are connected, and a hidden read tool is one a model can conclude does not exist.
Pagination
Qlik list endpoints return one page at a time. Pass fetch_all=True to qlikcloud_get when
you want a complete list or a count:
qlikcloud_get(path = "/api/v1/spaces", fetch_all = True, max_pages = 10)The merged result reports pageCount, itemCount, and truncated. If a cap is reached,
truncatedReason says which - the list is never silently cut short. Note that "complete" means
complete for you: results are already filtered to what your account can see.
qlikcloud_assistant_chat
Query a Qlik Answers assistant with conversation context. On the first call, omit thread_id
and a new thread is created automatically. Pass the returned thread_id on follow-up calls to
continue the conversation.
qlikcloud_assistant_chat(
assistant_id = "abc123", # from /api/v1/assistants
message = "What were total sales last quarter?",
thread_id = None # omit on first call; reuse on follow-ups
)Governance rules in qlikcloud_delete
Apps - moved to the "Recycle Bin" shared space, never hard-deleted.
Automations - moved to the "Recycle Bin" shared space, never hard-deleted.
Data files - moved to the "Recycle Bin" shared space, never hard-deleted.
Anything already in the Recycle Bin - refused. See below.
Spaces - blocked. Must be deleted manually in the Qlik Cloud Management Console.
All other resource types - not supported by this tool.
The Recycle Bin is a one-way door. Nothing can be deleted permanently through this
server, and anything already in the Recycle Bin is refused outright - for every user, tenant
admins included. Emptying the Recycle Bin is done by hand in the Qlik Cloud Activity Center in
the hub. There is no tool, flag, or path that overrides this: qlikcloud_delete is the only
tool that can delete anything at all, and all it ever does is move.
These rules run with your own rights: you can only retire resources you are allowed to move, and you must be able to see the Recycle Bin space and hold edit rights in it. If either is not true the tool says so and moves nothing. Retiring another person's app is an admin action, performed by an admin being the one signed in.
Companion skill: model archaeology
skills/qlik-model-archaeology/ is a Claude skill that turns these tools into a workflow for
making sense of a badly documented app: map the data model, work out what DATE3 and COS
actually mean from glossary, lineage and script evidence, and produce a data dictionary.
Install it by copying or symlinking it where Claude looks for skills:
mkdir -p ~/.claude/skills
ln -s "$PWD/skills/qlik-model-archaeology" ~/.claude/skills/qlik-model-archaeologyIt works with the tools listed above - no extra setup - because the evidence it relies on is all reachable over REST. Its central rule is that a retrieved answer (a verified glossary term, a source column name) is reported differently from an inferred one, and that "I cannot determine this, ask this steward" is a valid and preferred answer when the evidence is not there.
API Path Format
Paths are ordinary Qlik Cloud REST paths:
/api/v1/spaces
/api/v1/users/me
/api/v1/apps/{appId}Reference: https://qlik.dev/apis/rest/
The older qlik-cli shorthand (v1/spaces, without /api) is still accepted, so prompts
written for v0.2.x keep working.
Troubleshooting
Run qlikcloud_health first: it reports the tenant, the signed-in identity, where the session
is stored, and when the token refreshes.
Symptom | Check |
"Not signed in" | Run |
Browser did not open | The login tool prints the sign-in URL - paste it into a browser |
| The client needs |
Console will not accept a localhost redirect URL | Create the client via the API with |
Signed in as the wrong account |
|
403 on something you expect to work | Your account lacks the permission. Check it in the hub - the server cannot elevate |
403 on a Management Console page even as a tenant admin | Expected. The token carries only the |
Session ends sooner than expected | The client may not grant |
Session storage says "file" not "OS keychain" | No usable keychain on this host. The refresh token is in a 0600 file instead |
Connector shows as failed in Claude Desktop | Check the Claude Desktop MCP log; this server logs to stderr |
Where the session is stored
The refresh token goes in the OS keychain (macOS Keychain, Windows Credential Manager, Secret
Service on Linux) when one is available, and in a 0600 file under
~/.config/qlik-cloud-admin-mcp/ otherwise. Non-secret metadata (which account is active)
lives in sessions.json in that directory either way.
To reset completely: qlikcloud_logout(all_accounts=True), or delete that directory and the
qlik-cloud-admin-mcp keychain entries.
Upgrading from v0.2.x
v0.3.0 changes the identity model. Previously every user of the server acted as the tenant admin whose API key was configured; now each user acts as themselves.
Admin: register the public OAuth client (see Setup) and hand out the tenant URL and client id.
Each user: replace
QLIK_API_KEYin.env- and inclaude_desktop_config.json, if it was set there - withQLIK_OAUTH_CLIENT_ID, and setQLIK_TENANT_URL.Restart Claude Desktop, run
qlikcloud_login, thenqlikcloud_health.Admin: revoke the old tenant-admin API key. Nothing uses it any more, and a live admin key with no consumer is pure risk.
Expect narrower results than v0.2.0 if you are not an admin. That is the point of the change, not a bug.
qlik-cli can stay installed; nothing here touches it any more.
Development
uv sync # install dependencies, including the dev group
uv run pytest # unit tests, no network access needed
uv run server.py # run the server directly (stdio transport)Design documents live in specs/ (not published). Every behavioural rule in this README is
backed by a test in tests/.
Changelog
See CHANGELOG.md for release notes.
License
MIT
Available Tools
6 toolsqlikcloud_assistant_chatA
Send a message to a Qlik Answers assistant and get a response.
Runs as the signed-in Qlik Cloud user, with exactly their permissions: the assistant answers from the knowledge bases that user can access.
Maintains conversation context across calls by reusing the same thread. On the first call, omit thread_id and a new thread is created automatically. Pass the returned thread_id on subsequent calls to continue the conversation.
Args: assistant_id: ID of the assistant to query (use qlikcloud_get with path /api/v1/assistants to list them) message: The question or message to send thread_id: Optional thread ID from a previous call to continue the conversation
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | ||
| thread_id | No | ||
| assistant_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains that the tool runs with the signed-in user's permissions and accesses knowledge bases accordingly, which is important for authorization awareness. It also outlines thread management behavior. Since no annotations are provided, this description carries the full burden and covers key behavioral aspects.
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 efficient and informational, with no redundant content. Each sentence adds value, from the core action to the permission context and thread handling instructions.
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 description covers the essential usage context, including authorization and thread management. While the output format is not described, the presence of an output schema reduces the need to spell out return values. Overall, it is sufficiently complete for practical use.
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?
All three parameters are explained in the description: assistant_id (how to find it), message (the question), and thread_id (optional, for continuing conversations). This fully compensates for the absence of schema-level descriptions.
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 primary function: sending a message to a Qlik Answers assistant and receiving a response. It distinguishes itself from sibling tools like qlikcloud_get and qlikcloud_delete by focusing on chat interaction.
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 provides clear guidance on how to use the tool, including the behavior of thread_id for conversation continuity. While it doesn't explicitly say 'use this instead of other tools', the context is unambiguous given the chat-specific purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qlikcloud_deleteA
Delete a Qlik Cloud resource, with governance rules enforced.
Runs as the signed-in Qlik Cloud user, with exactly their permissions: you can only retire resources you are allowed to move, and you must be able to see the Recycle Bin space. Retiring someone else's app is an admin action, performed by an admin being the one signed in.
Supported resources and their governance behaviour:
Apps (/api/v1/apps/...): moved to the Recycle Bin shared space, never hard-deleted.
Automations (/api/v1/automations/...): moved to the Recycle Bin shared space.
Data files (/api/v1/data-files/...): moved to the Recycle Bin shared space.
Spaces (/api/v1/spaces/...): blocked. Must be deleted manually in the Qlik Cloud Management Console.
All other resource types: not supported by this tool.
Nothing can be deleted permanently through this server. Anything already in the Recycle Bin is refused outright — for every user, tenant admins included. Emptying the Recycle Bin is done by hand in the Qlik Cloud Activity Center in the hub. Do not look for another route: there is none, and offering one would be wrong.
IMPORTANT: Before calling this tool, tell the user exactly what will be deleted and wait for explicit confirmation.
Args: path: API path, e.g. /api/v1/automations/abc123
| 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 fully carries the transparency burden. It discloses that deletion moves items to the Recycle Bin, that permanent deletion is impossible, that Spaces are blocked, and that already-recycled items are refused outright.
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 well-structured with bullets and an IMPORTANT callout, but some phrasing is redundant (e.g., 'with exactly their permissions: you can only retire resources you are allowed to move' and the repetitive admin wording). Still, the extra detail is mostly purposeful.
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 description covers the operation's side effects, limitations, required user confirmation, and unsupported cases. Since an output schema exists, omitting return-value details is acceptable, and nothing critical is missing 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?
The schema only says 'Path' with no description, so the tool description must compensate. It does so by giving an example path, listing supported path prefixes, and stating which resource types are accepted or rejected.
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 deletes a Qlik Cloud resource at a given API path, and enumerates exactly which resource types are supported, blocked, or unsupported. This distinguishes it from sibling tools like get, login, and health.
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 provides explicit usage guidance: tell the user what will be deleted and wait for confirmation before calling. It also explains when deletion is blocked (spaces, already-recycled items) and that no alternative deletion route exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qlikcloud_getA
Read anything from Qlik Cloud over REST: the only read tool in this server.
This is how you fetch an app's data model and field metadata, its load script and lineage, glossary terms and definitions, spaces, users, items, datasets, data products, reloads and audits — any GET endpoint on qlik.dev. Reach for it whenever you need to look something up, list, search, count or profile.
Named so a client that loads tool schemas on demand can find it: this tool is the retrieval, read, fetch, list, search, describe and inspect capability. If it is not in your visible tool list it is deferred, not absent — call it by name.
Runs as the signed-in Qlik Cloud user, with exactly their permissions. Results are already filtered to what that user can see, so a short list is their view, not an error.
Use this only when no tool in the official Qlik MCP Server covers the operation. Prefer Qlik MCP tools for analytics operations such as opening apps, searching fields, listing sheets, or reading app content.
Qlik list endpoints return one page at a time. Set fetch_all=True when the user asks for all of something (all spaces, all users, every app in a space) or asks for a count. Leave it off for lookups and single-record reads. When a cap is reached the result says so via "truncated" and "truncatedReason" — do not present a truncated list as complete.
Args: path: API path, e.g. /api/v1/spaces. See https://qlik.dev/apis/rest/. The older qlik-cli form (v1/spaces) is also accepted. query_params: Optional query string, e.g. "limit=10&type=shared" fetch_all: Follow pagination links and merge every page. max_pages: Maximum pages to fetch when fetch_all is set (ceiling 100).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| fetch_all | No | ||
| max_pages | No | ||
| query_params | 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 transparency burden and does so thoroughly: it states read-only behavior, permission-based filtering, one-page-at-a-time pagination, and the truncation indicator behavior. It also notes the user context under which requests run.
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 well structured with clear paragraphs and an Args section, but it includes some redundant meta-commentary about naming and repeated emphasis on being the only read tool. It remains focused and readable, though slightly longer than strictly necessary.
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 description covers the API surface, argument usage, pagination behavior, truncation reporting, and permissions context. Since an output schema exists, not detailing every return field is acceptable; the description provides enough context 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?
The input schema provides no parameter descriptions, but the description compensates by explaining path formats with an example, query_params with a concrete example, fetch_all semantics, and the max_pages ceiling. Each parameter gains meaning beyond the raw 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 clearly states the tool reads anything from Qlik Cloud over REST and is the only read tool in this server. It explicitly differentiates from sibling tools like qlikcloud_delete and qlikcloud_login by scope and action.
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 guidance on when to use this tool versus the official Qlik MCP Server, and explains when to set fetch_all for 'all' queries or counts versus single-record lookups. This leaves no ambiguity about tool selection or pagination use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qlikcloud_healthA
Check the connection, and report which Qlik Cloud account is in use.
Run this first when anything looks wrong. Reports the tenant, the signed-in identity and its roles, where the session is stored, and when the access token refreshes. Everything runs with that user's own permissions; a non-admin identity with few roles is normal and not a fault, because this server deliberately holds no elevated access.
| 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?
The description discloses what the tool reports (tenant, identity, roles, session storage, token refresh) and clarifies permission context (runs with user's own permissions, no elevated access). It does not explicitly mention side effects, but for a health check this is likely read-only and the description adequately conveys that.
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 mostly concise and well-structured, with the primary purpose and usage stated upfront. The final sentence about non-admin identity is somewhat verbose but adds valuable context about permissions, so it is acceptable.
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 description provides sufficient context for a no-parameter health check: it explains what the tool does, when to run it, and what information it returns. It does not detail error handling or output schema, but these are not essential 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, so the baseline score of 4 applies. The description adds no parameter-specific information, but none is needed 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 clearly states the tool's purpose: to check the connection and report which Qlik Cloud account is in use. It uses a specific verb ('Check') and identifies the resource (connection/account), making the tool's function unmistakable.
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 explicit guidance on when to use the tool ('Run this first when anything looks wrong'), which is useful for an agent. It does not explicitly contrast with sibling tools, but the use case is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qlikcloud_loginA
Sign in to Qlik Cloud as yourself, in your browser.
Opens your browser so you can authorize this server as your own Qlik Cloud account. Qlik shows an "authorize this application" consent screen the first time for an account - approve it. Everything this server does afterwards uses your identity and your permissions.
Call this when a tool says you are not signed in, or when the user asks to sign in or switch accounts. Do not call it speculatively: it opens a browser window.
Args: force: Sign in again even if a session already exists. switch_account: Ask Qlik to re-authenticate instead of reusing whatever account the browser is already signed in as. Use this when the user wants to sign in as somebody else; it implies force.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| switch_account | 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 burden of disclosing side effects. It clearly states that the tool opens the user's browser, shows a consent screen, and that subsequent actions use the user's identity and permissions. It also explains the behavior of 'force' and 'switch_account', including that switch_account implies force.
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 appropriately concise while covering essential behavior. Every sentence contributes meaningful information: the core action, side effects, usage triggers, and parameter explanations. There is minimal redundancy, and the structure with an Args section improves readability.
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 login tool with two optional boolean parameters, the description is complete. It explains the action, the side effects, the conditions for use, and the meaning of both parameters. The output schema is not shown, but for a login flow the return value is secondary; the description provides enough context 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?
The JSON schema provides only names and defaults with no descriptions, so the description must compensate. The Args section explicitly explains both parameters: 'force' means sign in again even if a session exists, and 'switch_account' means re-authenticate as a different account and implies force. This fully covers the parameter semantics.
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 function: 'Sign in to Qlik Cloud as yourself, in your browser.' It identifies the specific resource (Qlik Cloud) and the action (login), and it is obviously distinct from sibling tools like logout, health, and delete.
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 provides explicit usage conditions: 'Call this when a tool says you are not signed in, or when the user asks to sign in or switch accounts.' It also warns against speculative calls because it opens a browser window, giving clear guidance on when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qlikcloud_logoutA
Sign out of Qlik Cloud and remove the stored session.
Revokes this server's token with the tenant and deletes the locally stored session. The next call will need qlikcloud_login again. This server holds no credential of its own and no permissions beyond the signed-in user's, so signing out removes its access to Qlik Cloud entirely.
Args: all_accounts: Also remove every other stored account for this tenant.
| Name | Required | Description | Default |
|---|---|---|---|
| all_accounts | 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, the description carries the full burden of revealing side effects. It explicitly states that it revokes the token, deletes the stored session, and removes access entirely, which is transparent. It lacks details about error behavior or confirmation of success, but the core effects are clearly disclosed.
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 and well-structured. It starts with a one-sentence summary, then elaborates on the mechanics and implications, and finally lists the parameter with its explanation. Each sentence serves a purpose without 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?
The description covers the tool's action, side effects, and parameter meaning, and it references the login tool for context. It does not mention the output format (though the output schema is stated to exist but not shown), but for a logout operation, the expected outcome is straightforward. Overall, it is complete for practical use.
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 defines all_accounts as a boolean, and the description explains its meaning: 'Also remove every other stored account for this tenant.' This adds clear semantic value beyond the schema's bare type definition.
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 purpose: 'Sign out of Qlik Cloud and remove the stored session.' It further explains the effect of revoking the token and deleting the session, making the action 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?
The description provides context for when to use the tool by referencing the need to call qlikcloud_login again after logout, implying it is used after a session is no longer needed. However, it does not explicitly compare with sibling tools like qlikcloud_get or qlikcloud_delete, so guidance on when not to use it is less direct.
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.
6 tool updates
v0.4.0- First observed
qlikcloud_assistant_chat - First observed
qlikcloud_delete - First observed
qlikcloud_get - First observed
qlikcloud_health - First observed
qlikcloud_login - First observed
qlikcloud_logout
TDQS
Scored across 6 tools
Each tool has a clearly distinct purpose: read, delete, auth lifecycle, health check, and assistant chat. The generic GET and DELETE tools are broad but non-overlapping in action, so there is no ambiguity.
All tools follow the consistent qlikcloud_<action> snake_case pattern, with verbs like get, delete, login, logout, and assistant_chat. Naming is predictable and uniform.
Six tools is a reasonable count for a focused admin client that exposes generic GET/DELETE operations plus auth and health. It is slightly lean but not inappropriately small for the stated scope.
The tool set only supports read and delete operations, with no create or update capabilities for Qlik Cloud resources. While GET covers all read endpoints, the absence of POST/PUT/PATCH leaves significant lifecycle gaps for an admin-oriented server.
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
- platform7nOAuthtech.p7n
Connect Claude to your Platform7n workspaces — chat, links, and tasks. One-click OAuth.
Connects AI assistants to CloudQuell multi-cloud and AI cost, savings, anomaly, and budget data.
Create projects, nodes, and tasks in UluP Spaces by conversation with Claude.
Connect an AI assistant to a Capacities space (objects, daily notes, search).
1
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceConnects Claude Desktop to Tableau Server for natural language interactions with Tableau data, enabling data extraction, dashboard exports, and comprehensive administrative capabilities including user management, permission auditing, and usage analytics.4MIT
- AlicenseBqualityCmaintenanceConnects AI assistants like Claude to Qlik Cloud and Qlik Sense Enterprise environments, enabling natural language interactions for analytics, app management, reloads, user administration, and data governance across 34 tools.3416MIT
- FlicenseNot gradedqualityCmaintenanceConnects Claude Desktop to the OAPT MCP server for natural-language queries across Dynamics CRM, AWS ACE, Partner Central, and more via a hosted endpoint, with per-user API key authentication.-
- AlicenseNot gradedqualityDmaintenanceConnects Claude Desktop to Tableau Server for natural language data analysis and comprehensive administrative capabilities, including user and permission management.MIT