Help us improve
Share bugs, ideas, or general feedback.
From Pipefy
Creates, reads, updates, and deletes Pipefy traditional and AI automations (if/then rules and prompt-driven) using 16 MCP tools. Also supports simulation and logs.
npx claudepluginhub pipefy/ai-toolkit --plugin pipefyHow this skill is triggered — by the user, by Claude, or both
Slash command
/pipefy:pipefy-automationsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Traditional automations (if/then rules), AI automations (prompt-driven), task automations, and simulation. **16 MCP tools.**
Creates, reads, updates, deletes, and troubleshoots Pipefy conversational AI agents with behaviors. Covers 7 MCP tools including pre-flight validation.
Guides when to use Zapier vs Make, how to build reliable no-code automations, and when to graduate to code. Covers triggers, actions, and platform-specific patterns.
Provides proven architectural patterns for n8n workflows covering webhook processing, HTTP API integration, database operations, AI agents, batch processing, and scheduled tasks. Use when building or designing automations.
Share bugs, ideas, or general feedback.
Traditional automations (if/then rules), AI automations (prompt-driven), task automations, and simulation. 16 MCP tools.
For AI agents (conversational agents with behaviors), see skills/ai-agents/pipefy-ai-agents/SKILL.md.
| Tool (MCP) | CLI | Purpose |
|---|---|---|
get_automations | pipefy automation list | List all automations for a pipe. |
get_automation | pipefy automation get | Single automation with full rule config — returns event_params and action_params (including aiParams for AI rules). |
create_automation | pipefy automation create | Create an if/then rule. active defaults to true. |
update_automation | pipefy automation update | Patch a rule via extra_input (UpdateAutomationInput fields). |
delete_automation | pipefy automation delete | (Two-step destructive) |
simulate_automation | pipefy automation simulate | AI-only dry-run (generate_with_ai action). |
get_automation_logs | pipefy automation logs | Execution history for one automation. |
get_automation_logs_by_repo | pipefy automation logs --repo | Logs across all automations in a pipe. |
get_automation_events | pipefy automation events list | Available trigger events. |
get_automation_event_attributes | pipefy automation event-attributes | Official field_map.value event-attribute tokens. |
get_automation_actions | pipefy automation actions list | Available action types for a pipe. |
create_send_task_automation | pipefy automation send-task create | Shortcut for send-a-task rules. |
get_automations_usage | pipefy automation usage / pipefy usage automations | Org usage stats (execution counts). |
export_automation_jobs | pipefy automation export jobs / pipefy export automation-jobs | Start async jobs export. |
get_automation_jobs_export | pipefy automation export status | Poll export status / URL. |
get_automation_jobs_export_csv | pipefy automation export csv / pipefy export automation-jobs-csv | Fetch CSV text when export is finished. |
| Tool (MCP) | CLI | Purpose |
|---|---|---|
get_ai_automations | pipefy ai-automation list | List AI automations for a pipe. |
get_ai_automation | pipefy ai-automation get | Full config including prompt, fields, condition. |
create_ai_automation | pipefy ai-automation create | Create a prompt-driven automation (requires AI enabled on the pipe). |
update_ai_automation | pipefy ai-automation update | Change name, active, prompt, field_ids, or condition. |
delete_ai_automation | pipefy ai-automation delete | (Two-step destructive) |
validate_ai_automation_prompt | pipefy ai-automation validate-prompt | Pre-flight check. Returns {valid, problems, warnings, field_map} — also detects prompt %{id} ∩ field_ids overlap. |
Discover field internal_ids for any field referenced in the prompt:
get_phase_fields phase_id="<phase_id>"
Build the prompt with %{<internal_id>} references. Pipefy silently rejects prompts with no field reference (returns "Input parameters are required.").
Important: the %{...} wrapper and a numeric field internal_id from your pipe are required — the exact digits in examples below (e.g. 900000101) are fictional placeholders. Discover real IDs via get_phase_fields / get_start_form_fields; do not copy example numbers from docs.
Validate the prompt:
validate_ai_automation_prompt pipe_id=67890 prompt="Summarize %{900000101} and comment." field_ids=["900000101"]
Returns valid:true|false, problems, warnings, field_map. Catches mistakes in one read-only call vs 2–3 failed mutation roundtrips.
Create the automation (only if valid:true):
create_ai_automation pipe_id=67890 trigger_event="card_created" prompt="Summarize %{900000101} and comment." field_ids=["900000101"]
get_automation_events pipe_id=67890.get_automation_actions pipe_id=67890. (Always discover first; never guess trigger_id / action_id.)create_automation.get_automation.Use when the user wants an if/then rule to stamp or copy values onto the triggering card (for example, set a datetime when card_created fires). This is create_automation with action_id: update_card_field and extra_input.action_params.field_map — not the MCP tool update_card_field (that tool uses field slug for one-off card edits).
Discover field internal_ids (digits only — never slug in fieldId):
get_start_form_fields pipe_id=67890
get_phase_fields phase_id="<phase_id>"
Discover trigger, action, and event-attribute tokens:
get_automation_events pipe_id=67890
get_automation_actions pipe_id=67890
get_automation_event_attributes
For update_card_field, acceptedParameters omits field_map; use the payload shape below (see docs/mcp/tools/automations-and-ai.md). Prefer value_token from get_automation_event_attributes when stamping execution time.
Create disabled (active=false) so the rule does not fire while you verify:
create_automation pipe_id=67890 name="Stamp execution time on new cards" trigger_id=card_created action_id=update_card_field active=false extra_input={"action_params":{"card_id":"%{id}","field_map":[{"fieldId":"<destination_internal_id>","inputMode":"copy_from","value":"%{automation_event_execution_datetime}"}],"fields_map_order":["<destination_internal_id>"]}}
Common value tokens when inputMode is copy_from: %{id} (also use in card_id), %{created_at}, %{automation_event_execution_datetime}, %{<other_internal_id>} to copy another field.
Verify persisted config:
get_automation automation_id=<id>
Confirm action_params.field_map round-tripped.
Enable when correct:
update_automation automation_id=<id> extra_input={"active":true}
simulate_automation is AI-only today (only generate_with_ai action_id is accepted). For non-AI rules, watch get_automation_logs after the trigger fires.
Read a working rule first: get_automation automation_id=<id> — copy event_params and action_params verbatim.
Simulate with a real sample card:
simulate_automation pipe_id=67890 action_id=generate_with_ai sample_card_id=456
Result is async: returns simulation_id + status:"processing" with null simulationResult. No polling tool exists in v0.1 — wait, then re-invoke get_automation_logs or simulate_automation.
field_map destination fieldIdOn create_automation, when extra_input.action_params.field_map is present, the SDK checks each fieldId against numeric internal_id values on the action pipe (action_repo_id, default pipe_id). Slug-shaped fieldId values and unknown numeric ids fail before GraphQL with success: false and the offending id. Recovery: get_start_form_fields / get_phase_fields → use internal_id, not slug.
move_single_card)For move_single_card actions with trigger card_moved, create_automation only validates that the destination phase is reachable from the source via cards_can_be_moved_to_phases (same read-only data as move_card_to_phase). update_automation does not run this check.
If invalid, the tool returns success: false with a text error message listing allowed destination phases by name and id, plus a hint that transition rules are configured in the Pipefy UI only (not editable via API). There is no structured valid_destinations field on this envelope.
Recovery: read the allowed phases in error.message, or call get_phase_allowed_move_targets(phase_id=<source_phase_id>) on the source phase from event_params.to_phase_id, then re-issue create_automation with a permitted destination phase id.
Pick the right tool for "notification" intent:
| User signal words | Tool | Why |
|---|---|---|
| "notificação", "tarefa", "lembrete para alguém validar" | create_send_task_automation | Built-in: handles event_id, task_title, recipients, optional event_params and condition. |
| "enviar e-mail", "responder ao cliente" | send_email_with_template / send_inbox_email (members-email-webhooks) | Email surface, not automations. |
| "webhook", "chamar serviço externo" | create_webhook (members-email-webhooks) | HTTP callback on card events. |
| "automação", "regra if/then" | create_automation | Generic rules engine. |
Do NOT hand-build action_params.taskParams via create_automation when create_send_task_automation is the right tool.
Combine AI automations with task automations so AI handles routine work and humans validate high-impact decisions. The highest-leverage pattern in the catalog.
Example flow:
create_ai_automation: when card enters "Análise", AI fills classification and risk fields automatically.create_send_task_automation: when the AI-filled field is updated, send a task to the manager — "Validate the classification on card [title]".create_automation or create_field_condition: when the manager marks "Approved", move the card to the next phase.Use this pattern for approvals, financial decisions, content publication, and any step where errors have real-world consequences. See also: skills/process-design/ Orchestration patterns.
get_automation returns the new rule with correct trigger and actions.validate_ai_automation_prompt returns valid:true before AI automation creation.simulate_automation (AI rules) eventually returns a non-null simulationResult.simulate_automation is AI-only. Only generate_with_ai action_id accepted. For traditional rules, use get_automation_logs after the rule fires.simulate_automation returns simulation_id + status:"processing" + null simulationResult; no polling tool in v0.1. Wait, then call get_automation_logs or re-invoke simulate_automation.validate_ai_automation_prompt returns valid:false. Read problems (per-field) and warnings. Most common: prompt missing %{internal_id} reference, or field_ids overlap with prompt %{id} tokens.create_automation cycle detection. Same-pipe card_created + create_card rejected with "This automation can't be created! It would result in an endless card creation cycle." Use a different trigger, target a different pipe, or use update_card instead.create_automation fails with unknown event/action. Always run get_automation_events + get_automation_actions first; do not guess IDs.move_single_card. Only create_automation preflights transitions. Read allowed phase ids in the error text or call get_phase_allowed_move_targets, then re-issue with a permitted destination. UI is the only edit surface for transition rules.PERMISSION_DENIED. SA must be member of both source and destination pipes for create_connected_card / cross-pipe create_card. Recovery: get_pipe_members + invite_members.get_automation_logs_by_repo returns empty. Pipe has no traditional automation executions; not an error. AI agent executions are separate (see get_ai_agent_logs).create_send_task_automation fires immediately when active=true. Pass active=false first if you want to wire it up before the rule starts firing. The 2026-04-16 orphaned-task incident is the cautionary tale.update_automation API asymmetry. create_automation takes a top-level active param; update_automation requires extra_input={"active": false}. Pass active through extra_input when toggling on an existing rule.action_repo_id semantics. For cross-pipe actions (create_connected_card, create_card into another pipe), this is the destination pipe, not the source.get_automation to read event_params and action_params of a working rule and pass them verbatim. Don't hand-craft params.field_map uses slug in fieldId. Preflight rejects non-numeric fieldId before GraphQL; slugs (e.g. due_date) used to surface as INTERNAL_SERVER_ERROR. Recovery: get_start_form_fields / get_phase_fields → use internal_id.field_map fieldId. create_automation preflight fails with the offending id when the destination field is not on the action pipe. Re-discover ids on action_repo_id (not only the trigger pipe for cross-pipe actions).update_card_field MCP tool for a rule. That tool updates one card by slug; automations need create_automation + field_map with numeric fieldId.card_id. Set action_params.card_id to "%{id}" for the triggering card; empty/wrong values prevent the intended update.field_map.value. Typos in %{…} templates leave fields unchanged at runtime. Compare with Automation Event Attributes and a working rule from get_automation.get_automation_logs / get_automation_logs_by_repo for execution errors; invalid fieldId may fail silently (no card update).