qlik-automation-builder
Installation
SKILL.md
Create Automation Skill
Build automation workspace JSON, then create, update, or delete automations via qlik-mcp tools.
Scope
When the platform the automation needs to reach has no dedicated connector, or the resolved connector does not expose the needed block, do not stop — fall back to the generic connectors or the built-in CallUrlBlock as long as the platform has an HTTP API. See No dedicated block: generic connectors and raw API. Stop and tell the user the skill cannot help only when even that fallback cannot express the request (no HTTP API, or an auth flow the generic connectors do not support).
Never draft scheduled, triggered, or webhook automations. StartBlock must always use run_mode: "manual".
Workflow
1. Discover connectors and pick blocks via qlik-mcp tools
- Resolve connectors via the MCP tool
qlik_list_automation_connectors. It returns the live tenant connector list, each entry carryingid,name,descriptionand other connector related information. Reference the returnedidasdatasourcetype_guidon connector blocks. ex: Filter syntax:filter='name eq "Qlik Cloud Services"'.- If the
qlik-mcpis not connected, stop and ask the user to connect it. Do not guess or hardcode connector guids.
- If the
- Fetch full connector detail (blocks, parameters, snippet templates) with
qlik_get_automation_connector(connector_id=<connector-guid>). Each entry inblockscarriesid(used asendpoint_guid/snippet_guid),name,description,snippet(true=SnippetBlock,false=EndpointBlock),role,objectType, andinputs[](per-inputid,name,fieldType,optional,description,options). On import the editor rebuilds each input list from connector metadata and pairs values byid, so emit everyidexactly as returned — one missing or misspelled lands as an empty input. Filter blocks in-memory after fetching (e.g.snippet == false and name matches /reload/ifor endpoint blocks, or pick anidand read itsinputs). - For external connector blocks (any block that carries a
datasourcesetting — QCS-native blocks don't), resolve the connection: callqlik_list_automation_connectionswithfilter='connectorId eq "<connector-guid>"', once per distinct connector. Exactly one match → bind itsidas the block'sdatasourcevalue; warn when it reportsisConnected: false(runs will fail at the service until the user reconnects it). Several matches → ask the user which to bind. None → leavevalue: nulland record inAssumptionsthat the user must create and bind a connection before execution. For cloud-storage file blocks there is nodatasourcetype_guid— theirdatasourcetypeis an adapter name — so first get the connector guid withqlik_list_automation_connectorsusingfilter='name eq "<adapter name>"'(the adapter name is the connector's catalog name), then resolve the connection as above. The create/update API storesdatasourceverbatim — a null is never auto-bound on import, so an unbound block stays unbound. - If no connector or block fits, don't stop — see No dedicated block: generic connectors and raw API.