使用说明
Qlik云管理MCP服务器
仅供演示和实验使用。 本项目按原样提供,以说明概念。它还没有准备好生产, Qlik不提供官方支持,也不提供任何形式的保修。 任何使用此代码的人都要自行承担风险,并负责测试 并在使用前在自己的环境中进行验证。
这是什么
本地人 模型上下文协议 连接的(MCP)服务器 将Claude Desktop转移到Qlik Cloud租户进行管理操作。
Claude Desktop -> MCP server (this project) -> Qlik Cloud REST API
^
└── signed in as YOU, with your own permissions
它展示了三件事:
-
可扩展性 -Qlik Cloud公开了一个丰富的REST API。通过将其封装在MCP服务器中, 任何管理操作都可以在Claude Desktop中作为自然语言对话使用。
-
治理 -MCP工具可以对业务规则进行编码。此服务器显示了一个具体示例: 删除资源并不会将其硬删除。相反,它会将其移动到“回收站” 共享空间,为管理员提供恢复窗口。删除空格被完全阻止 重定向到Qlik云管理控制台。
-
身份 -服务器充当使用它的人,而不是管理员服务帐户。
这台服务器补充了官方 Qlik MCP服务器, 其涵盖分析操作。这一部分涵盖了管理和治理操作 官方服务器今天没有公开。
权限
此服务器充当使用它的人。 首次使用时,您可以在您的 浏览器,服务器发出的每个请求都带有您自己的身份。如果您无法打开 应用程序、空间或Qlik中心中的数据加载编辑器,您也不能在这里完成。
没有办法提升,这是结构性的,而不是政策:
- 正在运行的进程中唯一的凭据是访问令牌,其主题是您。
- OAuth客户端是 公共 -不存在可泄露或共享的客户端机密,因此您的 机器可以为另一个身份铸造一个令牌。
- 只有
user_default和offline_access范围总是被要求的。不admin.*范围是 可通过配置或其他方式请求。 - 代码库中没有API密钥、客户端证书授予和模拟授予。
- A.
403被报告为许可结果。不会对不同的身份进行重试, 因为没有其他身份。
值得了解的后果:两个用户对“有多少应用程序”的答案不同 在那里”,退出其他人的应用程序需要管理员登录。
凭证端点(/api/v1/api-keys, /api/v1/oauth-clients, /api/v1/oauth-tokens,
/oauth/*)在发送请求之前被工具拒绝。不是因为他们会升级
任何东西,但持久的凭证都不能被铸造并反映到聊天记录中。
需求
- 紫外线 安装在您的计算机上
- 租户上的Qlik Cloud帐户
- 来自Qlik管理员的租户URL和公共OAuth客户端id(见下文)
- Claude 桌面版
qlik-cli是 不 必修的。早期版本对它进行了抨击;这个与REST对话 API直接。
设置
管理员:注册OAuth客户端(一次)
创建一个 本土的 整个团队的(桌面)公共OAuth客户端。如果管理层 Console不提供本机选项,请通过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"]}'
- 做 不 发送
allowedGrantTypes或allowedAuthMethods:API拒绝appType: native,并且赠款是隐含的。 - 重定向URL:
http://localhost/callback-正是这个主机和路径。Qlik比赛 方案、主机和路径完全正确,但 忽略端口,因此一个条目涵盖了每个用户 每次跑步。127.0.0.1不是的别名localhost在这里。 - 范围:
user_default和offline_access只有。同意admin.*或admin_classic将打破许可模式;服务器从不请求它们。 - 不设置同意方法。然后,用户在上看到Qlik“授权此应用程序”屏幕 第一个登录,这是本设计想要的授权步骤。
- 没有发布客户端密钥,也不需要。为用户提供客户端id和租户URL。
参考: 创建OAuth客户端 和那个 OAuth客户端API.
用户:安装并登录
1.安装uv
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
2.下载此存储库
git clone https://github.com/mabaeyens/qlik-cloud-admin-mcp.git
cd qlik-cloud-admin-mcp
3.配置
copy .env.example .env
填写管理员给你的两个值。也不是秘密:
QLIK_TENANT_URL=https://your-tenant.eu.qlikcloud.com
QLIK_OAUTH_CLIENT_ID=your_public_client_id
4.创建回收站空间
在Qlik Cloud中,创建一个 共享空间 准确命名 Recycle Bin.删除工具移动
应用程序、自动化和数据文件,而不是硬删除它们。
然后 将每个将退役内容的用户添加为具有编辑权限的成员.能够 看到空间不够,做租户管理员也不够:移动内容 进入共享空间需要该空间中的贡献者角色,因此没有角色的租户管理员 有一个403。以管理员身份创建空间,或授予管理员对该空间的完全权限 之后。
5.配置克劳德桌面
打开 %APPDATA%\Claude\claude_desktop_config.json 并在里面添加下面的块
mcpServers,将路径替换为您克隆存储库的位置。
{
"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.重新启动克劳德桌面并登录
完全退出并重新打开Claude Desktop。然后让克劳德帮你登录,这会给你打电话
qlikcloud_login。您的浏览器打开,Qlik要求您 授权此应用程序 -
批准它。同意屏幕是您授予服务器作为您的
账户每个帐户显示一次。然后标签告诉你关闭是安全的。
跑 qlikcloud_health 确认您以哪个帐户登录。
若要切换帐户,请要求以其他帐户登录-- qlikcloud_login 随着
switch_account=True 使Qlik询问要使用哪个帐户,而不是默默地重复使用任何帐户
您的浏览器已具有会话。没有它,浏览器中的实时Qlik会话会为您签名
直接回到同一个账户。
7.设置系统提示(如果同时使用官方Qlik MCP服务器,建议)
如果您同时拥有此服务器和 官方Qlik MCP服务器 连接后,创建一个Claude Desktop项目并添加以下系统提示,这样Claude总是更喜欢官方服务器进行分析操作:
当官方Qlik MCP服务器和Qlik云管理员都连接时,总是更喜欢官方Qlik-MCP工具进行分析操作(打开应用程序、搜索字段、列表表、阅读应用程序内容)。仅将qlik云管理工具用于官方服务器未涵盖的管理和治理操作。
用法
| 工具 | 说明 |
|---|---|
qlikcloud_login |
以自己的身份在浏览器中登录Qlik Cloud |
qlikcloud_logout |
注销、撤销令牌并删除存储的会话 |
qlikcloud_health |
租户、登录身份、角色、存储后端、令牌到期 |
qlikcloud_get |
读取任何Qlik Cloud REST端点(fetch_all=True 跟随分页) |
qlikcloud_delete |
强制执行治理规则后删除(见下文) |
qlikcloud_assistant_chat |
向Qlik Answers助手发送消息并获得回复 |
六种工具,以及 qlikcloud_get 这是唯一的阅读方式。当官方Qlik MCP服务器覆盖
操作(打开应用程序、搜索字段、列出工作表)更喜欢这些工具。
为什么没有通用的POST、PUT或PATCH。 它们在v0.4.0中被删除。一个模特拿着
针对整个租户的无限制书写动词是一个很大的爆炸半径,但收益很小,并且
任何值得写的东西都值得一个专门构建的工具,它可以说它将要改变什么
先问——这是什么 qlikcloud_delete 做。保持表面小还有第二个问题
好处:配给工具模式的MCP客户端开始将它们隐藏在搜索后足够一次
服务器已连接,隐藏的读取工具是模型可以推断不存在的工具。
分页
Qlik列表端点一次返回一页。通过 fetch_all=True 到 qlikcloud_get 当
您需要一个完整的列表或计数:
qlikcloud_get(path = "/api/v1/spaces", fetch_all = True, max_pages = 10)
合并后的结果报告 pageCount, itemCount,以及 truncated如果达到上限,
truncatedReason 上面写着——这份名单永远不会被默默地缩短。请注意,“完整”是指
为您完成:结果已经过滤到您的帐户可以看到的内容。
qlikcloud_assistant_chat
使用对话上下文查询Qlik Answers助手。第一次通话时,省略 thread_id
并且自动创建新线程。通过返回 thread_id 关于后续电话
继续谈话。
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
)
qlikcloud_delete中的治理规则
- 应用 -移动到“回收站”共享空间,从未硬删除。
- 自动化 -移动到“回收站”共享空间,从未硬删除。
- 数据文件 -移动到“回收站”共享空间,从未硬删除。
- 回收站中已有的任何内容 -拒绝。见下文。
- 空间 -封锁。必须在Qlik云管理控制台中手动删除。
- 所有其他资源类型 -此工具不支持。
回收站是一扇单向门。 通过此操作无法永久删除任何内容
服务器,回收站中的任何内容都会被彻底拒绝——对于每个用户、租户
管理员包括在内。清空回收站是在Qlik Cloud活动中心手工完成的
中心。没有工具、标志或路径可以覆盖此内容: qlikcloud_delete 是唯一的
这个工具可以删除任何东西,它所做的就是移动。
这些规则是以你自己的权利运行的:你只能退役你被允许移动的资源, 您必须能够看到回收站空间 和 拥有编辑权限。如果是 不是真的,工具这么说,什么也不动。停用另一个人的应用程序是一种管理操作, 由登录的管理员执行。
同伴技能:模型考古学
skills/qlik-model-archaeology/ 是克劳德的一项技能,可以将这些工具转化为工作流程
理解一个文档糟糕的应用程序:绘制数据模型,找出什么 DATE3 和 COS
实际上是指根据术语表、谱系和脚本证据,并生成一个数据字典。
在Claude寻找技能的地方复制或符号链接它来安装它:
mkdir -p ~/.claude/skills
ln -s "$PWD/skills/qlik-model-archaeology" ~/.claude/skills/qlik-model-archaeology
它与上面列出的工具一起工作,无需额外设置,因为它所依赖的证据是全部 可通过REST访问。其核心规则是 检索到的 答案(一个经过验证的术语表术语 源列名)的报告方式与 推断 一,“我无法确定 当证据不存在时,“问这位管家”是一个有效且首选的答案。
API路径格式
路径是普通的Qlik Cloud REST路径:
/api/v1/spaces
/api/v1/users/me
/api/v1/apps/{appId}
参考:https://qlik.dev/apis/rest/
较旧的qlik-cli简写(v1/spaces,没有 /api)仍被接受,因此提示
为v0.2.x编写的继续工作。
故障排除
跑 qlikcloud_health 首先:它报告租户、登录身份、会话所在地
当令牌刷新时。
| 症状 | 检查 |
|---|---|
| “未登录” | 运行 qlikcloud_login |
| 浏览器未打开 | 登录工具打印登录URL-将其粘贴到浏览器中 |
redirect_uri is not registered |
客户需要 http://localhost/callback 已注册-确切的主机和路径,端口无关。 127.0.0.1 不匹配 localhost |
| Console将不接受本地主机重定向URL | 通过带有的API创建客户端 appType: "native" (请参阅管理部分) |
| 以错误帐户登录 | qlikcloud_login 随着 switch_account=True -它迫使Qlik询问要使用哪个帐户 |
| 403关于你期望工作的事情 | 你的帐户缺乏权限。在集线器中检查它-服务器无法提升 |
| 403在管理控制台页面上显示,即使是作为租户管理员 | 也应如此。令牌只携带 user_default 范围,因此管理员分类的端点(许可证、角色、加密密钥)对每个人都被拒绝。使用管理控制台 |
| 会话结束时间早于预期 | 客户端可能无法授予 offline_access,因此不会发出刷新令牌。让管理员添加作用域 |
| 会话存储显示“文件”而不是“操作系统密钥链” | 此主机上没有可用的密钥链。刷新令牌位于0600文件中 |
| 连接器在Claude Desktop中显示为失败 | 检查Claude Desktop MCP日志;此服务器登录到stderr |
会话存储的位置
刷新令牌进入操作系统密钥链(macOS密钥链、Windows凭据管理器、密码
Linux上的服务),当其中一个可用时 0600 文件下
~/.config/qlik-cloud-admin-mcp/ 否则。非秘密元数据(哪个帐户处于活动状态)
居住于 sessions.json 无论哪种方式,都在那个目录中。
要完全重置,请执行以下操作: qlikcloud_logout(all_accounts=True),或删除该目录和
qlik-cloud-admin-mcp 钥匙链条目。
从v0.2.x升级
v0.3.0更改了身份模型。以前,服务器的每个用户都充当租户 配置了API密钥的管理员;现在每个用户都像自己一样。
- 管理员: 注册公共OAuth客户端(请参阅设置)并分发租户URL和 客户端id。
- 每位用户: 替换
QLIK_API_KEY在.env-和inclaude_desktop_config.json,如果 设置在那里-与QLIK_OAUTH_CLIENT_ID,并设置QLIK_TENANT_URL. - 重新启动Claude Desktop,运行
qlikcloud_login那么qlikcloud_health. - 管理员:撤销旧的tenant-Admin API密钥。 没有人再使用它了,还有一个实时管理员 没有消费者的关键是纯粹的风险。
- 如果您不是管理员,预计结果会比v0.2.0更窄。这就是 改变,而不是bug。
- qlik-cli可以保持安装状态;这里再也没有什么东西碰它了。
发展
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)
设计文件在 specs/ (未发表)。本自述中的每一条行为规则都是
在测试的支持下 tests/.
更新日志
看 更改日志.md 发布说明。
许可证
麻省理工学院
