Qlik MCP Server
Provides comprehensive integration with Qlik Sense, enabling AI assistants to list applications, retrieve measures, variables, fields, sheets, visualization objects, dimensions, scripts, and data sources from Qlik Sense Enterprise through WebSocket connections with certificate-based authentication.
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 MCP Serverlist all applications with metadata"
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 MCP Server
A comprehensive MCP (Model Context Protocol) server that provides complete access to Qlik Sense applications and their detailed information for AI assistants and other MCP clients.
Features
๐ Direct WebSocket connection to Qlik Sense Enterprise
๐ Certificate-based authentication with SSL security
๐ฆ VizlibContainer support with embedded object extraction
๐ Master Item resolution automatically resolves references to full expressions
๐ BINARY LOAD detection automatically extracts and analyzes BINARY dependencies
๐ Advanced Script Analysis with section parsing, variable extraction, and statement counting
๐ 9 comprehensive tools covering all major Qlik Sense objects:
๐ List all available applications with metadata
๐ Retrieve measures with expressions and tags
๐ง Retrieve variables with definitions and configurations
๐ Retrieve fields and complete data model information
๐ Retrieve sheets with metadata and properties
๐จ Retrieve visualization objects from sheets with detailed properties
๐ Retrieve dimensions with grouping and metadata
๐ Retrieve and analyze data loading scripts with BINARY LOAD extraction
๐ Retrieve data sources and lineage information
๐ค MCP-compatible for use with Claude Desktop and other AI tools
โก Production-ready with comprehensive error handling
๐งช Extensively tested with real Qlik Sense applications
Why This Matters
๐ฏ Business Impact: This MCP server bridges the gap between Qlik Sense's powerful analytics and modern AI assistants, enabling:
10x faster insights - Natural language queries replace complex Qlik Sense expressions
Democratized analytics - Non-technical users can explore Qlik data through conversation
Automated documentation - AI can instantly analyze and document your entire Qlik application structure
Enterprise-ready integration - Production-grade WebSocket connections with certificate-based security
๐ก Use Cases:
Automated QA: AI assistants can validate measures, dimensions, and data models
Documentation Generation: Automatically create comprehensive app documentation
Migration Analysis: Assess complexity before Qlik app migrations or upgrades
Governance Auditing: Review variables, scripts, and data sources for compliance
๐ ๏ธ Modern Development Stack
This project uses industry-standard tools for reliability and maintainability:
๐ UV: Fast, reliable Python package management and virtual environment handling
๐งน Ruff: Lightning-fast Python linter and formatter with automated code quality
๐งช Pytest: Professional testing framework with unit/integration test separation
๐ค GitHub Actions: Automated CI/CD with matrix testing across Python versions
๐ฆ FastMCP: Modern MCP server framework with Pydantic validation
Prerequisites
Python 3.10+ (required for FastMCP)
UV package manager (strongly recommended - handles everything automatically)
Access to Qlik Sense Enterprise server
Valid Qlik client certificates (see Certificate Setup Guide)
MCP-compatible client (e.g., Cursor IDE, VS Code, Claude Desktop)
Quick Start
1. Installation
# Clone the repository
git clone https://github.com/arthurfantaci/qlik-mcp-server.git
cd qlik-mcp-server
# Install with UV (strongly recommended)
curl -LsSf https://astral.sh/uv/install.sh | sh # Install UV if not already installed
uv sync # Creates virtual environment and installs all dependencies automaticallyWhy UV? UV provides faster, more reliable dependency management with automatic virtual environment handling, lockfile generation for reproducible builds, and seamless integration with modern Python development workflows.
2. Configuration
# Copy the example environment file
cp .env.example .env
# Edit .env with your Qlik Sense server details
# See .env.example for detailed configuration instructions3. Certificate Setup
Obtain SSL certificates from your Qlik Sense administrator and place them in the certs/ directory:
certs/
โโโ root.pem # Server root certificate
โโโ client.pem # Client certificate
โโโ client_key.pem # Client private key๐ Detailed certificate setup instructions: docs/CERTIFICATES.md
4. Test Connection
# Test basic Qlik connection
uv run pytest tests/test_qlik_connection.py -v
# Test application listing
uv run pytest tests/test_list_apps.py -v
# Run all unit tests (no Qlik server required)
uv run pytest -m unit
# Run integration tests (requires Qlik server)
uv run pytest -m integration5. Configure with Cursor IDE
# For project-specific configuration (recommended)
mkdir -p .cursor
cp examples/cursor_config.json .cursor/mcp.json
# OR for global configuration
cp examples/cursor_config.json ~/.cursor/mcp.json
# Update the paths in the configuration to match your setup
# Enable MCP in Cursor Settings and restart Cursor6. Configure with VS Code
# Copy example configuration to VS Code settings
cp examples/vscode_config.json ~/.vscode/settings.json
# Or merge with existing VS Code settings
# Update the paths in the configuration to match your setup7. Configure with Claude Desktop
# Copy example configuration to Claude Desktop
cp examples/claude_desktop_config.json ~/.config/claude_desktop_config.json
# Edit the configuration file to update paths
# Then restart Claude Desktop๐ Detailed configuration examples: examples/README.md
Usage
Running as MCP Server
Start the MCP server:
# Using Python 3.11 (recommended)
/opt/homebrew/bin/python3.11 -m src.server
# Or using the startup script
/opt/homebrew/bin/python3.11 start_server.pyAvailable Tools
The server provides 9 comprehensive tools for Qlik Sense analysis:
Tool | Description |
| List all available applications with metadata |
| Retrieve measures with expressions and tags |
| Retrieve variables with definitions and configurations |
| Retrieve fields and complete data model information |
| Retrieve sheets with metadata and properties |
| Retrieve visualization objects with detailed properties |
| Retrieve dimensions with grouping and metadata |
| Retrieve and analyze scripts with BINARY LOAD extraction |
| Retrieve data sources and lineage information |
Enhanced Script Tool Examples
The get_app_script tool now includes powerful analysis capabilities. Here are examples of how to use it:
Basic Script Retrieval
"Get the script from app 12345678-abcd-1234-efgh-123456789abc"Script with Full Analysis and BINARY LOAD Detection
"Analyze the script from app 12345678-abcd-1234-efgh-123456789abc and show me all BINARY LOAD statements"
Parameters used:
- analyze_script: true
- Result includes: BINARY LOAD statements with source apps, variable declarations, statement countsScript with Section Parsing
"Get the script from app 12345678-abcd-1234-efgh-123456789abc and break it down by sections"
Parameters used:
- include_sections: true
- Result: Script organized by ///$tab sections with line rangesScript Preview with Line Numbers
"Show me the first 1000 characters of the script from app 12345678-abcd-1234-efgh-123456789abc with line numbers"
Parameters used:
- max_preview_length: 1000
- include_line_numbers: true
- Result: Truncated script with line numbers for easy referenceComplete Analysis with All Features
"Perform a comprehensive analysis of the script from app 12345678-abcd-1234-efgh-123456789abc including BINARY LOAD detection, sections, and show line numbers"
Parameters used:
- analyze_script: true
- include_sections: true
- include_line_numbers: true
- Result: Full analysis with BINARY LOAD extraction, sections, variables, and formatted outputScript Analysis Response Includes:
Total lines, empty lines, comment lines
Script sections/tabs with line ranges
BINARY LOAD statements with source applications and line numbers
Count of LOAD, STORE, DROP statements
SET and LET variable declarations
Connection strings (sanitized)
Include file references
Subroutine definitions
๐ Complete Script Tool Usage Guide - Comprehensive documentation with all parameters and advanced examples
Using with Different MCP Clients
Cursor IDE
Important: Switch to Agent Mode (not Ask Mode) to access MCP tools
Tools are available through natural language commands
Cursor will ask for permission before executing tools (configurable in settings)
Example: "Use the Qlik tools to list all available applications"
VS Code
Access tools through the MCP extension
Use the command palette or natural language interface
Tools execute with appropriate permissions
Claude Desktop
Once configured, you can use natural language to access all tools:
๐ Explore Applications:
"Show me all available Qlik Sense applications"๐ Analyze Measures:
"Get all measures from Qlik app 12345678-abcd-1234-efgh-123456789abc with expressions and tags"๐ง Review Variables:
"Show me all variables in the application including their definitions"๐ Examine Data Model:
"Get all fields and table information to understand the data model structure"๐ Review Sheets:
"List all sheets in the application with their metadata"๐จ Analyze Visualizations:
"Get all visualization objects from sheet 'Overview' with their properties and layout"๐ Study Dimensions:
"Show me all dimensions with their grouping and metadata information"๐ Review Data Loading:
"Get the complete data loading script for this application"๐ Understand Data Sources:
"Show me all data sources and their lineage, including binary and file sources"The measures tool will return:
Measure IDs and titles
Measure descriptions
Expressions (optional)
Tags (optional)
Total count of measures
The applications list tool will return:
Application names and IDs
Last reload timestamps
Total count of applications
The variables tool will return:
Variable names and definitions
Variable tags (optional)
Reserved and configuration flags
Total count of variables
The fields tool will return:
Field names and properties (numeric, system, hidden, etc.)
Source table information for each field
Complete list of tables in the application
Field cardinality and tags
Data model structure for analysis
The sheets tool will return:
Sheet IDs and titles
Sheet descriptions and metadata
Layout information (columns, rows)
Publication status and creation dates
Total count of sheets
The sheet objects tool will return:
Visualization object IDs and types
Object titles and subtitles
Position and sizing information
Object properties and layout details
Dimension and measure configurations with Master Item resolution
VizlibContainer objects with embedded visualizations
Container structure with tabs/panels and nested objects
Total count of objects on the sheet
The dimensions tool will return:
Dimension IDs and titles
Dimension descriptions and definitions
Field definitions and labels
Grouping information and hierarchy
Tags and metadata
Total count of dimensions
The script tool will return:
Complete data loading script content
Script length in characters
All LOAD statements and transformations
Data connection strings and sources
Variable definitions and SET statements
The data sources tool will return:
Data source names and types
Connection strings and statements
Source categorization (file, binary, resident, inline)
Source counts by type
Lineage and dependency information
Total count of all data sources
Tool Parameters
get_app_measures Tool
Parameter | Type | Required | Description |
| string | Yes | Qlik Sense application ID |
| boolean | No | Include measure expressions (default: true) |
| boolean | No | Include measure tags (default: true) |
list_qlik_applications Tool
Parameter | Type | Required | Description |
(no parameters) | - | - | Returns all available applications |
get_app_variables Tool
Parameter | Type | Required | Description |
| string | Yes | Qlik Sense application ID |
| boolean | No | Include variable definitions (default: true) |
| boolean | No | Include variable tags (default: true) |
| boolean | No | Include reserved system variables (default: true) |
| boolean | No | Include configuration variables (default: true) |
get_app_fields Tool
Parameter | Type | Required | Description |
| string | Yes | Qlik Sense application ID |
| boolean | No | Include system fields (default: true) |
| boolean | No | Include hidden fields (default: true) |
| boolean | No | Include derived fields (default: true) |
| boolean | No | Include semantic fields (default: true) |
| boolean | No | Include source table information (default: true) |
| boolean | No | Include implicit fields (default: true) |
get_app_sheets Tool
Parameter | Type | Required | Description |
| string | Yes | Qlik Sense application ID |
| boolean | No | Include sheet thumbnail images (default: false) |
| boolean | No | Include detailed metadata (default: true) |
get_sheet_objects Tool
Parameter | Type | Required | Description |
| string | Yes | Qlik Sense application ID |
| string | Yes | Sheet ID to retrieve objects from |
| boolean | No | Include object properties (default: true) |
| boolean | No | Include object layout information (default: true) |
| boolean | No | Include measure/dimension definitions (default: true) |
| boolean | No | Resolve Master Item references to full expressions (default: true) |
get_app_dimensions Tool
Parameter | Type | Required | Description |
| string | Yes | Qlik Sense application ID |
| boolean | No | Include dimension titles (default: true) |
| boolean | No | Include dimension tags (default: true) |
| boolean | No | Include grouping information (default: true) |
| boolean | No | Include additional metadata (default: true) |
get_app_script Tool
Parameter | Type | Required | Description |
| string | Yes | Qlik Sense application ID |
| boolean | No | Enable comprehensive script analysis including BINARY LOAD extraction (default: false) |
| boolean | No | Parse script into sections/tabs based on ///$tab markers (default: false) |
| boolean | No | Add line numbers to script output (default: false) |
| integer | No | Maximum characters to return for script preview (minimum: 100) |
get_app_data_sources Tool
Parameter | Type | Required | Description |
| string | Yes | Qlik Sense application ID |
| boolean | No | Include resident table sources (default: true) |
| boolean | No | Include file-based sources (default: true) |
| boolean | No | Include binary load sources (default: true) |
| boolean | No | Include inline data sources (default: true) |
Response Formats
get_app_measures Response
{
"app_id": "12345678-abcd-1234-efgh-123456789abc",
"measures": [
{
"id": "measure_id",
"title": "Revenue",
"description": "Total revenue calculation",
"expression": "Sum(Sales)",
"label": "Total Revenue",
"tags": ["finance", "kpi"]
}
],
"count": 25,
"retrieved_at": "2025-08-29T10:30:00Z",
"options": {
"include_expression": true,
"include_tags": true
}
}list_qlik_applications Response
{
"applications": [
{
"app_id": "12345678-abcd-1234-efgh-123456789abc",
"name": "CRM Dashboard",
"last_reload_time": "2025-08-29T10:30:00Z",
"meta": {},
"doc_type": ""
}
],
"count": 50,
"retrieved_at": "2025-08-29T10:30:00Z"
}get_app_variables Response
{
"app_id": "12345678-abcd-1234-efgh-123456789abc",
"variables": [
{
"name": "vDataSource",
"definition": "dev",
"tags": [],
"is_reserved": false,
"is_config": false
}
],
"count": 25,
"retrieved_at": "2025-08-29T10:30:00Z",
"options": {
"include_definition": true,
"include_tags": true,
"show_reserved": true,
"show_config": true
}
}get_app_fields Response
{
"app_id": "12345678-abcd-1234-efgh-123456789abc",
"fields": [
{
"name": "customer_id",
"source_tables": ["fact_crm", "dim_customer"],
"is_system": false,
"is_hidden": false,
"is_numeric": true,
"cardinal": 4818662,
"tags": ["$key", "$numeric", "$integer"]
}
],
"tables": [
"fact_transactions",
"dim_customer_details"
],
"field_count": 60,
"table_count": 10,
"retrieved_at": "2025-08-29T10:30:00Z",
"options": {
"show_system": true,
"show_hidden": true,
"show_derived_fields": true,
"show_semantic": true,
"show_src_tables": true,
"show_implicit": true
}
}get_app_sheets Response
{
"app_id": "12345678-abcd-1234-efgh-123456789abc",
"sheets": [
{
"id": "sheet_abc123",
"title": "Summary View",
"description": "Summary of OKRs",
"rank": 0,
"columns": 14,
"rows": 10,
"meta": {
"created": "2025-08-15T09:00:00Z",
"modified": "2025-08-29T10:30:00Z",
"published": true
}
}
],
"count": 5,
"retrieved_at": "2025-08-29T10:30:00Z",
"options": {
"include_thumbnail": false,
"include_metadata": true
}
}get_sheet_objects Response
{
"app_id": "12345678-abcd-1234-efgh-123456789abc",
"sheet_id": "sheet_abc123",
"objects": [
{
"id": "object_xyz789",
"type": "barchart",
"title": "Sales by Region",
"subtitle": "Last 12 months",
"position": {
"x": 0,
"y": 0,
"width": 12,
"height": 6
},
"properties": {
"dimensions": ["Region"],
"measures": ["Sum(Sales)"],
"color": {
"auto": true
}
},
"layout": {
"visualization": "barchart",
"version": "1.0"
}
}
],
"count": 12,
"retrieved_at": "2025-08-29T10:30:00Z",
"options": {
"include_properties": true,
"include_layout": true,
"include_data_definition": true,
"resolve_master_items": true
}
}get_app_dimensions Response
{
"app_id": "12345678-abcd-1234-efgh-123456789abc",
"dimensions": [
{
"id": "dim_product_category",
"title": "Product Category",
"description": "Product categorization hierarchy",
"grouping": "N",
"field_defs": ["Category"],
"field_labels": ["Product Category"],
"tags": ["product", "hierarchy"],
"meta": {
"created": "2025-08-10T14:30:00Z",
"approved": true
}
}
],
"count": 30,
"retrieved_at": "2025-08-29T10:30:00Z",
"options": {
"include_title": true,
"include_tags": true,
"include_grouping": true,
"include_info": true
}
}get_app_script Response
{
"app_id": "12345678-abcd-1234-efgh-123456789abc",
"script": "// Main data loading script\n\n// Load sales data\nSales:\nLOAD\n OrderID,\n CustomerID,\n ProductID,\n Quantity,\n UnitPrice,\n OrderDate\nFROM [lib://DataFiles/sales.qvd] (qvd);\n\n// Load customer data\nCustomers:\nLOAD\n CustomerID,\n CustomerName,\n Region,\n Country\nFROM [lib://DataFiles/customers.xlsx]\n(ooxml, embedded labels, table is Customers);\n",
"script_length": 245,
"retrieved_at": "2025-08-29T10:30:00Z"
}get_app_data_sources Response
{
"app_id": "12345678-abcd-1234-efgh-123456789abc",
"data_sources": [
{
"name": "sales.qvd",
"type": "file",
"connection_string": "lib://DataFiles/sales.qvd",
"statement": "LOAD * FROM [lib://DataFiles/sales.qvd] (qvd);",
"discrimination": {
"type": "DataConnection",
"label": "QVD file source"
}
},
{
"name": "CustomerAnalytics.qvf",
"type": "binary",
"connection_string": "lib://Apps/CustomerAnalytics.qvf",
"statement": "binary [lib://Apps/CustomerAnalytics.qvf];",
"discrimination": {
"type": "BinaryLoad",
"label": "Binary application load"
}
},
{
"name": "TempTable",
"type": "resident",
"connection_string": "Resident SalesData",
"statement": "LOAD CustomerID, Sum(Amount) as TotalSales RESIDENT SalesData GROUP BY CustomerID;",
"discrimination": {
"type": "ResidentLoad",
"label": "Resident table transformation"
}
}
],
"source_counts": {
"binary": 1,
"file": 3,
"resident": 8,
"inline": 1,
"other": 0
},
"total_sources": 13,
"retrieved_at": "2025-08-29T10:30:00Z",
"options": {
"include_resident": true,
"include_file": true,
"include_binary": true,
"include_inline": true
}
}Project Structure
qlik-mcp-server/
โโโ .github/workflows/ # CI/CD automation
โ โโโ test.yml # GitHub Actions test pipeline
โโโ .claude/ # Claude Code configuration
โ โโโ settings.local.json # Local Claude settings
โโโ src/ # Core application code
โ โโโ __init__.py # Package initialization
โ โโโ server.py # FastMCP server implementation
โ โโโ qlik_client.py # Qlik Engine API WebSocket client
โ โโโ tools.py # MCP tool definitions and implementations
โโโ tests/ # Comprehensive test suite (pytest)
โ โโโ conftest.py # Pytest configuration and fixtures
โ โโโ README.md # Testing documentation and guidelines
โ โโโ test_qlik_connection.py # Test basic connection
โ โโโ test_list_apps.py # Test application listing
โ โโโ test_mcp_tool.py # Test MCP tool functions (includes measures)
โ โโโ test_variables.py # Test variable retrieval
โ โโโ test_fields.py # Test field retrieval
โ โโโ test_sheets.py # Test sheet retrieval
โ โโโ test_dimensions.py # Test dimension retrieval
โ โโโ test_script.py # Test script retrieval and analysis
โ โโโ test_data_sources.py # Test data source retrieval
โ โโโ test_binary_extraction.py # Test BINARY LOAD extraction
โ โโโ test_vizlib_container.py # Test VizlibContainer functionality
โ โโโ test_both_tools.py # Test multiple tools together
โโโ examples/ # Configuration examples
โ โโโ cursor_config.json # Cursor IDE configuration
โ โโโ vscode_config.json # VS Code configuration
โ โโโ claude_desktop_config.json # Claude Desktop configuration
โ โโโ README.md # Configuration instructions
โโโ docs/ # Documentation
โ โโโ CERTIFICATES.md # Certificate setup guide
โ โโโ API_REFERENCE.md # Complete API documentation
โ โโโ SCRIPT_TOOL_USAGE.md # Script tool usage guide
โ โโโ TROUBLESHOOTING.md # Troubleshooting guide
โโโ certs/ # SSL certificates (gitignored)
โ โโโ root.pem # Server root certificate
โ โโโ client.pem # Client certificate
โ โโโ client_key.pem # Client private key
โโโ .env.example # Example environment configuration
โโโ .env.test.example # Test environment configuration template
โโโ .env # Environment configuration (gitignored)
โโโ .gitignore # Git ignore rules
โโโ pyproject.toml # Python project configuration and dependencies
โโโ pytest.ini # Pytest configuration and markers
โโโ uv.lock # UV dependency lockfile for reproducible builds
โโโ start_server.py # Server startup script
โโโ CLAUDE.md # Claude Code instructions
โโโ CONTRIBUTING.md # Contribution guidelines
โโโ LICENSE # MIT license
โโโ README.md # This documentationSecurity
Certificate files are excluded from version control via
.gitignoreNever commit
.envfiles or certificates to repositoriesUse environment variables for sensitive configuration
Certificates should be properly secured with appropriate file permissions
Troubleshooting
Connection Issues
Certificate errors: Verify certificates are in PEM format and readable
Authentication fails: Check QLIK_USER_DIRECTORY and QLIK_USER_ID settings
Timeout errors: Increase WEBSOCKET_TIMEOUT in
.envApp not found: Verify app ID and user permissions in QMC
MCP Issues
Server won't start: Check Python version (3.10+ required)
Tool not found: Restart Claude Desktop after configuration changes
No response: Check server logs for errors
Development
Running Tests
The project uses pytest exclusively for professional-grade testing with clear separation between unit and integration tests.
Setup Test Environment
# Install test dependencies (automatically handled by UV)
uv sync # Installs both main and dev dependencies including pytest
# Configure test environment for integration tests
cp .env.test.example .env.test
# Edit .env.test with your Qlik server details (when available)Pytest Testing Commands
# Run all tests
uv run pytest
# Run with verbose output
uv run pytest -v
# Run only unit tests (no Qlik server required - perfect for development)
uv run pytest -m unit
# Run integration tests (requires Qlik server connection)
uv run pytest -m integration
# Run with coverage report
uv run pytest --cov=src --cov-report=html
# Run specific test file
uv run pytest tests/test_mcp_tool.py
# Run specific test function
uv run pytest tests/test_mcp_tool.py::test_get_app_measures_mockTest Categories
The test suite uses pytest markers for clear organization:
@pytest.mark.unit: Fast tests that don't require external dependencies@pytest.mark.integration: Tests requiring live Qlik Sense server connection@pytest.mark.slow: Long-running tests (can be excluded with-m "not slow")
Pro Tip: Use
uv run pytest -m unitduring development for fast feedback loops, then run integration tests when you have Qlik server access.
Test Specific Functionality
# Test specific components with pytest
uv run pytest tests/test_mcp_tool.py -v # MCP tool functions (includes measures)
uv run pytest tests/test_variables.py -v # Variable retrieval
uv run pytest tests/test_fields.py -v # Field and table information
uv run pytest tests/test_sheets.py -v # Sheet metadata
uv run pytest tests/test_dimensions.py -v # Dimension analysis
uv run pytest tests/test_script.py -v # Script retrieval and analysis
uv run pytest tests/test_data_sources.py -v # Data source lineage
uv run pytest tests/test_binary_extraction.py -v # BINARY LOAD extraction
uv run pytest tests/test_vizlib_container.py -v # VizlibContainer functionality
uv run pytest tests/test_both_tools.py -v # Multiple tools together
# Debug Qlik client directly
uv run python -m src.qlik_clientSee tests/README.md for comprehensive testing documentation.
Code Quality & Formatting
The project maintains high code quality standards with automated tooling:
# Run Ruff linting and formatting
uv run ruff check # Check for style and quality issues
uv run ruff check --fix # Auto-fix issues where possible
uv run ruff format # Format code according to standards
# The project is configured with:
# - pyproject.toml: Ruff configuration for consistent code style
# - Automatic import sorting and code formatting
# - Integration with development workflowContinuous Integration (CI/CD)
The project includes a comprehensive GitHub Actions workflow (.github/workflows/test.yml) that automatically:
๐ Automated Testing:
Runs on every push to
mainanddevelopbranchesExecutes on all pull requests
Matrix testing across multiple Python versions (3.10, 3.11, 3.12, 3.13)
Separate unit test and integration test execution
๐ ๏ธ Quality Assurance:
UV dependency management and caching
Ruff linting and formatting verification
Pytest execution with coverage reporting
Test result reporting and failure notifications
๐ Manual Triggers:
Workflow can be manually triggered via GitHub Actions UI
Optional integration test execution (when Qlik server access is available)
The CI/CD pipeline ensures code quality and prevents regressions, making the project reliable for production use.
Adding New Tools
To add more Qlik tools:
Define a Pydantic model in
tools.pyfor parameter validation with Field annotationsImplement the tool function in
tools.pyRegister the tool in
server.pyusing@mcp.tool()accepting the Pydantic modelFastMCP automatically generates schemas from Pydantic models
Tool Definitions
The server provides 9 comprehensive tools for complete Qlik Sense analysis. See the main tools table above for complete details and parameters.
Limitations
Current implementation considerations:
Single app connection at a time
No retry logic for failed connections
Basic error handling
No caching of results
Sequential processing only
Minimal logging
Future Enhancements
The project has achieved a modern, production-ready foundation. Potential enhancements:
๐ Scalability & Performance:
Connection pooling for multiple concurrent app connections
Intelligent caching of frequently accessed data
WebSocket reconnection handling with retry logic
๐ง Additional Functionality:
Tools for additional Qlik objects (bookmarks, stories, etc.)
Advanced filtering and pagination for large datasets
Bulk operations for enterprise-scale deployments
๐ Observability & Monitoring:
Structured logging with configurable levels
Performance metrics and monitoring endpoints
Distributed tracing for complex operations
Note: The core development infrastructure (UV, Ruff, Pytest, GitHub Actions) is already enterprise-ready, providing a solid foundation for these future enhancements.
Recent Enhancements
Script Tool v2.0 (Latest)
โจ BINARY LOAD Detection: Automatically extracts all BINARY LOAD statements with source applications
๐ Section Parsing: Organizes scripts by ///$tab markers with line ranges
๐ Comprehensive Analysis: Statement counting, variable extraction, connection detection
๐ Security Enhancements: Automatic password and credential sanitization
๐ Line Numbering: Optional line numbers for easy reference
โ๏ธ Script Preview: Configurable truncation for large scripts
๐ Enhanced Documentation: Complete usage guide with examples
License
This project is licensed under MIT. Ensure compliance with your organization's Qlik Sense licensing terms.
Support
For technical support:
Check the troubleshooting section
Verify Qlik server connectivity
Review server logs for detailed error messages
Ensure certificates are valid and not expired
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
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/arthurfantaci/qlik-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server