workato
Skill18 starsChanged 5 months agoMITView on GitHub
Drive a Workato account via its Platform REST API — inspect, build, fix, debug, and start/stop recipes; read connections, folders, projects, jobs. Use when a task touches a Workato account or recipe.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- petestewart/claude-skillstheir own version, first seen Jan 16, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- petestewart/claude-skills★ 2same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
6 rules. About 0 are common, 2 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 17
Optional MCP server: if a workato MCP server is registered, its read + start/stop tools also work — use fully-qualified names …
- Very specific: line 21
Use them for reads if present, but for creating/updating recipes use wk.py (the MCP server has no write tools).
- Distinctive: line 48
Only the editor/runtime validate.
- Distinctive: line 53
Stop a scratch immediately if it starts and its trigger polls a real source.
- Very specific: line 71
Write the code tree (trigger = step 0.
- Very specific: line 77
Verify: before declaring success (golden rule #1): have the user open it in the editor, or inspect a job once it runs.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Workato (Platform API)
Control a Workato account by calling its REST API with a token. This skill bakes in the
endpoint map, the recipe code JSON format, and the non-obvious traps that otherwise cost
hours. Start every task by orienting (token + scope), then use scripts/wk.py — it
encodes the base URL, auth, and the body quirks so you never rewrite curl.
Setup & orientation (do this first)
- Token:
~/.config/workato/api_token(or$WORKATO_API_TOKEN). Awrkaus-…prefix = US region. - Helper:
python3 ~/.claude/skills/workato/scripts/wk.py …(zero deps, stdlib only). Runwk.py -h. - Optional MCP server: if a
workatoMCP server is registered, its read + start/stop tools also work — use fully-qualified names (workato:list_recipes,workato:get_recipe,workato:list_connections,workato:list_folders,workato:list_projects,workato:list_recipe_jobs,workato:start_recipe,workato:stop_recipe,workato:workato_get). Use them for reads if present, but for creating/updating recipes usewk.py(the MCP server has no write tools). The server is optional —wk.pyalone covers everything. - Always check scope before promising anything:
wk.py scope. A token is scoped to one API client's role — many resources may be401. The token this was built for does recipes (R/W) + jobs + versions + connections + folders + projects; lookup tables, properties, roles, API platform, audit logs, tags, on-prem are typically401.
What you can do (and the command for it)
| Goal | Command | |||
| See capability surface | wk.py scope | |||
| List recipes / running ones | wk.py recipes [--folder ID] [--running] | |||
| Inspect a recipe (and its code) | wk.py recipe <id> [--code] | |||
| List connections / folders / projects | wk.py connections · wk.py folders [--parent ID] · wk.py projects | |||
| Debug runs / discover field names | wk.py jobs <id> then wk.py job <id> <job_id> --outputs | |||
| See version history | wk.py versions <id> | |||
| Create a recipe (left stopped) | wk.py create --name N --folder ID --code code.json --config config.json | |||
| Update a recipe (must be stopped) | wk.py update <id> [--name N] [--code code.json] [--config config.json] | |||
| Start / stop | wk.py start <id> · wk.py stop <id> | |||
| Delete a (scratch) recipe | wk.py delete recipes/<id> | |||
| Anything else | `wk.py get | post | put | delete <path> [--data @file]` |
Four golden rules (internalize these)
- The API stores recipe
codeverbatim and does NOT validate it. A{"success":true}write can still be semantically broken (wrong operand key, wrong datapill field, bad input). Only the editor/runtime validate. So a created recipe isn't "working" until verified — never claim otherwise on the strength of the HTTP 200 alone. wk.py startIS a free validator. It returns the editor'scode_errors(invalid provider/action names, missing required fields, bad pills) without opening the UI — so unknown encodings can be discovered by probe loop on a scratch recipe (recipe-gotchas.md). Stop a scratch immediately if it starts and its trigger polls a real source.- Discover real encodings empirically, don't guess. Field names come from a real job:
GET /recipes/:id/jobs/:job_id→ per-steplines[]with RESOLVED input/output (unknown input keys are silently schema-filtered, so the surviving keys reveal an action's true schema). Pill/picklist encodings: build once in the editor and read back. - Validation ≠ runtime. Pills can validate yet resolve EMPTY (
_dp+"first"trap), and runtime-only failures exist (lookup()wrong table name, nil-chain errors, Shopify "Sold out"/"Record is invalid"). Full verification = start + one real job + inspect the created record. Validation errors also hide behind HTTP 200 ({"success":false,…}).
Core workflows
Inspect / explore an account
wk.py scope → wk.py recipes / connections / folders / projects. To see how a recipe
ran, list jobs then dump a job. This is read-only and safe.
Build a recipe
- Pick a non-root folder (
wk.py folders) and the connection id (wk.py connections). - Write the
codetree (trigger = step 0; children inblock) and aconfigarray. Follow references/recipe-code-dsl.md for step structure, control flow (IF/ELSE_IF/ELSE as sibling steps,foreach/repeatloops,try/catch), the verified condition operand table, and datapill encoding. Get connector field names from references/connectors-gmail.md (or a real job for other connectors). wk.py create …(leaves it stopped). Read it back:wk.py recipe <id> --code.- Verify before declaring success (golden rule #1): have the user open it in the editor, or
inspect a job once it runs. Then
wk.py start <id>when ready.
Fix / debug a recipe
wk.py recipe <id> --code to see the current tree → locate the bad step → fix in a local
code.json → wk.py update <id> --code code.json. The usual culprits (all in
references/recipe-gotchas.md): an invalid operand key (doesnt_contain → must be
not_contains; full table in the DSL ref), a datapill pointing at a non-existent field
(e.g. from instead of from_email), or folder_id/code body-type mistakes on create.
A fix isn't done at the update 200 (golden rule #1): re-read the code, then re-validate
with wk.py start and/or one real job before declaring it fixed.
Trigger timing
Most triggers (Gmail new_email included) are polling, not real-time; the interval is
plan-gated and cannot be changed via the API. Real-time needs a webhook trigger / external
push (Gmail → Pub/Sub). Details in recipe-gotchas.md.
When to read which reference
- references/recipe-code-dsl.md — building/fixing recipe
code: step keywords, control flow (IF/ELSE,foreach/repeatloops,try/catch), the verified operand table, datapill formats (incl. the array-pill validation-vs-runtime table,=formula mode for non-first elements/ternaries/lookup(), list.where(field:'val')filtering + the backward-compatible null-safe guard for the[0]['x']-on-nil crash, the DB batch-insertrows/____sourceshape, the extended-schema rules, formula conditions, and thestopstep), a full worked example. Read this for any build-or-fix task. - references/recipe-gotchas.md — before any create/update: the verbatim-storage trap, the
start-as-validator probe loop, job
lines[]debugging (incl.?include_payloads=trueand the try/catch-hides-failure trap — jobsucceededwhile the source system shows FAILED), editing a live recipe safely (backup → leaf-diff assert → stop/update/start → rollback → re-test), forcing an immediate poll (stop+start), editor re-save rewrites,folder_id-string /code-string rules, field discovery, polling vs real-time. - references/connectors-utilities.md — verified encodings for json_parser (parse a
JSON-string output into pills;
documentroot + labeled-schema traps), logger (log_messageas a pill-resolution probe), lookup tables (thelookup()formula vs the half-mappedlookup_tableconnector; API is 401 — tables are UI-maintained). Read this whenever a connector returns JSON as a string, or a mapping needs a lookup table. - references/api-endpoints.md — exact endpoints, regions, rate limits, the broader (often
401) API surface, the error model, and how to widen token scope. - references/connectors-gmail.md — Gmail
new_emailoutputs +send_mailinputs. - references/connectors-orderful-shopify.md — inbound-EDI playbook: Orderful → Workato →
Shopify (Walmart 850 PO → Shopify draft order). The poller-bucket routing trap
(Orderful Communication Channels, UI-only — recipe gets 0 jobs if inbound isn't routed to a
POLLER channel), the bucketId trailing-space bug, the Orderful poller trigger +
get_record(returns the parsed message as a JSON string → json_parser), Shopifycreate_draft_order(full verified input incl. addresses/note, the extended_input_schema requirement,province/countrynaming, "Sold out" / "Record is invalid" causes) andsearch_product(handle-only lookup → handle=UPC convention), the three-tier item matching pattern (Shopify → lookup table → stop with details), how to inject a test 850, and the full proven recipe with mapping formulas. Read this for any Orderful/EDI-inbound recipe or Shopify draft-order action. - references/connector-sdk.md — the boundary case: a task needs a connector built or
changed (not a recipe). This skill can't do that — connectors are authored with the Ruby
Workato Connector SDK (
workato new/exec/push). Read this only when no connector exists for the app, or you must edit a custom connector's internals; for recipes, stay here.
Not the same as Workato's hosted MCP
This skill calls the Workato REST API with your own token from local scripts (deterministic,
endpoint-shaped). Workato also offers Remote MCP servers — Workato hosts an MCP server that
exposes selected recipes as LLM tools at a https://<instance>.apim.mcp.workato.com/…?wkt_token=…
URL you'd add as a Claude connector. That's a different, LLM-tool-shaped surface. Don't conflate
them: for "use my token to build/fix/inspect recipes," use this skill.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

