qlik-lineage-mcp

qlik-lineage-mcp

A read-only MCP server that exposes data-file lineage analyses for Qlik Cloud tenants, enabling identification of unused columns and ghost files to reduce storage costs.

Category
访问服务器

README

Qlik Lineage MCP

A read-only Model Context Protocol (MCP) server that exposes data-file lineage analyses for Qlik Cloud tenants. Built especially for tenants on the capacity pricing model (daily peak GB), where dropping unused columns / ghost files yields direct savings.

Tools

Tool What it answers
unused_columns Given a data file (QVD or Parquet) and its space, which columns are not consumed by any app in the tenant?
ghost_files Given a space, which data files are not consumed by any app — including transitive chains (file -> file -> app)?

Both tools are read-only. They recommend, they never delete.

Quick start

# 1. Install deps with uv (or pip)
uv sync

# 2. Copy and fill the env file
copy .env.example .env
# edit QLIK_TENANT_URL and QLIK_API_KEY

# 3. Run the MCP server (stdio transport)
uv run qlik-lineage-mcp

Wire the server into Claude Desktop / Claude Code / VS Code:

{
  "mcpServers": {
    "qlik-lineage": {
      "command": "uv",
      "args": ["run", "qlik-lineage-mcp"],
      "cwd": "C:/path/to/qlik-lineage-mcp"
    }
  }
}

Architecture

src/qlik_lineage_mcp/
├── server.py       # FastMCP entry point — auto-registers everything in tools/
├── config.py       # env-var loader (.env fallback)
├── qlik_client.py  # all Qlik Cloud HTTP calls live here
├── models.py       # format-agnostic Pydantic models (DataFile = QVD or Parquet)
└── tools/
    ├── __init__.py        # auto-discovers and calls register(mcp) on each module
    ├── unused_columns.py
    └── ghost_files.py

Adding a new tool: drop a file in tools/ that exports register(mcp: FastMCP). server.py does not need to be edited.

How unused_columns works

A 3-phase pipeline that uses Qlik's field-level lineage (no script parsing):

  1. Enumerate columnsGET /lineage-graphs/nodes/{file_qri}?level=field exposes every column of the target file as a node whose QRI starts with the file QRI.
  2. Find consumer apps — iterate every app in the tenant and read its data/lineage. Apps whose discriminators include a lib://...{file_name} LOAD reference are the consumers.
  3. Detect renames — for each consumer app, fetch GET /lineage-graphs/nodes/{app_qri}?level=field. Edges whose source is a field of the target file map the original column to the alias used by the app. Qlik decomposes composite expressions automatically, so LOAD A_COD & '\' & A_LOJA AS KEY FROM file produces two edges (A_COD->KEY, A_LOJA->KEY) — no script parser needed.

Cost: one file-side call + N data/lineage calls (one per app, also paid by ghost_files) + M field-level lineage calls (one per consumer app).

Known limitations

  • Rename detection requires the consumer app to have been reloaded since field-level lineage was activated in the tenant. Apps that have not been reloaded show no edges in their field-level graph, so renames in those apps are invisible. The output lists which consumer apps could not be inspected so the verdict is auditable.
  • ghost_files walks every app's data/lineage and builds an app/file graph, then runs a fixpoint to mark useful chains. Dependencies hidden inside SUB / CALL / $(include) or dynamic file paths are missed.
  • Apps whose data/metadata cannot be fetched (permissions, errors) are surfaced as a top-level metadata_unavailable_apps caveat — verdicts are conditional on those apps being checkable.
  • Parquet support is implemented format-agnostically but until a real Parquet item-endpoint fixture is captured, surfacing of Parquet files is best-effort. The tools flag this in their output.

Testing

uv run pytest

All tests run against captured JSON fixtures in tests/fixtures/ — no live tenant calls.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选