Workato Dev MCP
Click on "Deploy 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., "@Workato Dev MCP lint recipe 12345678"
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.
Workato Dev MCP
A local, zero-dependency MCP server to author, lint, deploy, and debug Workato recipes from Claude (Code, Desktop, or any MCP client). It wraps the Workato Developer REST API, the Recipe Lifecycle Management (RLCM) package API, and the Data Tables record API.
Why not the official one? The hosted Workato Developer MCP (app.workato.com/mcp) is
management/read-only — it can't create or update recipe code or start/stop recipes. This can.
It also adds a pure-Python recipe linter, RLCM export/import, Data Table row CRUD, and AI Hub
MCP-server management.
Zero dependencies — Python 3.8+ standard library only. No
pip install, no build step.Bring your own token — each developer uses their own Workato API-client token. Nothing hosted or shared.
56 tools across recipes, linting, RLCM round-trip, connections, data/lookup tables, API Platform, and AI Hub MCP servers.
Forked from
krishnagutta/workato-dev-mcp; extends it with RLCM round-trip, Data Table CRUD, a scaffolder, AI Hub MCP management, and a pure-Python port of Workato Labs'recipe-lint(MIT). Full attribution inLICENSE.
Setup (Claude Code)
First get a Workato API-client token: Workspace admin → API clients (which privileges to grant — and how to wire Claude Desktop / other clients — are in docs/SETUP.md). Then:
git clone https://github.com/gmunro-lyft/Workato-Claude-MCP.git
cd Workato-Claude-MCP
cp .env.example .env # 1. copy the env template
# 2. edit .env → set WORKATO_TOKEN=wrkaus-…
python3 mcp/server.py --selftest # 3. confirm the server loads (no token needed)
claude # 4. launch Claude Code; approve "workato-dev" onceThen in a new session try: "list my Workato recipes" or "lint recipe 12345678".
Related MCP server: salesforce-mcp
The recipe edit loop
get_recipe(id, include_code=true) # pull the code tree (source of truth for editing)
→ edit the JSON in conversation
→ lint_recipe(recipe_id=id) # catch structural/datapill bugs BEFORE saving
→ stop_recipe(id) # running recipes can't be updated
→ update_recipe(id, code=<json>)
→ start_recipe(id) # start = the real compiler; read its validation errors
→ list_jobs / get_job # after a test run, inspect real per-step I/ORun workato_recipe_tips and get_learnings once before building — they capture the datapill
format, the trigger extended_output_schema requirement, the HTTP string-body trick, custom-code
schema gotchas, valid condition operands, and the job-log debugging pattern.
Linting
Two local, no-token tools statically analyse recipes before deploy: lint_recipe (one recipe,
by path or recipe_id) and validate_package (a whole package directory + package-level
checks). Both return structured diagnostics from a pure-Python port of recipe-lint's Tier 0/1
rules. See docs/LINTING.md for the rule table and the full 66-rule engine.
Region
Defaults to the US data center. For another region set WORKATO_API_BASE (and
WORKATO_DATA_TABLES_BASE for Data Table row tools) in .env — e.g. EU is
https://app.eu.workato.com/api. Full table in docs/SETUP.md.
Verify & test
All of these are offline, need no token, and require no install (stdlib only):
python3 mcp/server.py --selftest # the tool registry loads and is internally consistent
python3 mcp/server.py --list-tools # print every tool + a one-line description
python3 mcp/server.py --version # print the server version
python3 -m unittest discover -s tests # run the unit tests
python3 tools/gen_tools_doc.py --check # docs/TOOLS.md is in sync with the toolsThe tests also run under pytest if you prefer it.
Documentation
docs/SETUP.md — create the API client, privileges, token wiring (Code / Desktop / other), regions
docs/TOOLS.md — the full 56-tool reference (generated from the server)
docs/LINTING.md — lint rules + the upstream Go engine
CONTRIBUTING.md — add a tool, run the checks, and the allowlist-
.gitignorerule
Capturing learnings
The knowledge base grows as you use it. mcp/learnings.md is the append-only intake queue — when
Claude hits a gotcha not in workato_recipe_tips, it calls log_learning. Scrub any
workspace-specific names/IDs before committing (see CONTRIBUTING) —
the file is tracked and publishes verbatim. During review, raw learnings are promoted into
workato_recipe_tips (the curated tier). log_learning / get_learnings are pure local file
ops — no token.
Notes / limits
This is a dev tool. It can create, edit, start/stop, and delete recipes and Data Table rows. Point it at a dev/impl workspace and treat
delete_recipe/deploy_package/delete_data_table_rowwith care (they confirm intent in their descriptions).AI Hub MCP tools may be plan-gated. The
*_mcp_*tools need the API client's MCP privilege; without it Workato returns the HTML login page or 403/404. Runcheck_mcp_privilegesfirst. (A different surface from the API-Platformlist_api_*tools.)It doesn't touch the AI Hub authoring layer beyond server management. After a recipe param-set change, the consuming MCP client needs an app restart to see the new schema.
Sharing. Commit this folder to an internal git repo; teammates clone, set
WORKATO_TOKENin.env, and approve the project-scoped.mcp.jsonon first launch.
License
MIT. Builds on krishnagutta/workato-dev-mcp
and ports lint rules from recipe-lint (MIT) — see
LICENSE.
Available Tools
56 toolsadd_data_table_rowA
Add a record to a Data Table (record API). table_id is the UUID from list_data_tables; document_json is a JSON object {field_name: value} (use a "$field-uuid" key for a field whose name is awkward). MUTATES data — confirm with the user first.
Inputs: table_id (required), document_json (required).
add_lookup_table_rowA
Append a row to a lookup table. entry_json is a JSON object string {column: value}. Table must have a defined schema. Useful for writing capture/log rows.
Inputs: table_id (required), entry_json (required).
assign_mcp_toolsA
Attach recipe-function/genie tools to an AI Hub MCP server. tools_json is a JSON array like [{"trigger_application":"workato","id":1234567}]. MUTATES a live MCP server's tool surface — confirm first. Needs the MCP privilege.
Inputs: handle (required), tools_json (required).
assign_mcp_user_groupsA
Grant end-user groups access to an AI Hub MCP server (Workato Identity). group_ids_json is a JSON array of group ids. MUTATES access — confirm first. Needs the MCP privilege.
Inputs: handle (required), group_ids_json (required).
check_mcp_privilegesA
Probe (read-only) whether the API client holds the AI Hub MCP privilege (GRANTED/DENIED). Run before the other mcp_* tools — without the privilege Workato returns the HTML login page or 403/404.
Inputs: no named parameters.
check_privilegesA
Probe (read-only) which API-client privileges the current token has: workspace details, folders, recipes, connections, and — if folder_id is given — RLCM folder-assets. Reports GRANTED/DENIED per privilege. Mutating export/import/download privileges can't be safely probed (noted in the result).
Inputs: folder_id.
copy_recipeA
Server-side copy of a recipe into a folder (preserves step as ids).
Inputs: folder_id (required), recipe_id (required).
create_api_collectionA
Create an API collection (which can then be exposed as a Workato MCP server). Needs name + project_id. Note: endpoints themselves are added in the UI — there is no create-endpoint Developer API.
Inputs: name (required), project_id (required).
create_folderB
Create a folder, optionally under a parent folder id.
Inputs: name (required), parent_id.
create_mcp_serverA
Create an (empty) AI Hub MCP server in a folder; follow with assign_mcp_tools. Returns the server (incl. handle/mcp_url). Set access to Workato Identity + add user groups in AI Hub. MUTATES the workspace — confirm first. Needs the MCP privilege.
Inputs: name (required), folder_id (required), description.
create_recipeC
Create a recipe. code and config are JSON strings (the code tree and connection config array). folder_id is a string.
Inputs: code (required), name (required), config (required), folder_id (required).
delete_data_table_rowA
Delete a Data Table record by record_id (record API). Get record_id from query_data_table ($record_id). Cannot be undone — confirm with the user first.
Inputs: table_id (required), record_id (required).
delete_mcp_serverA
Delete an AI Hub MCP server by handle. Cannot be undone — confirm first. Needs the MCP privilege.
Inputs: handle (required).
delete_recipeA
Permanently delete a recipe. Cannot be undone — confirm with the user first.
Inputs: recipe_id (required).
deploy_packageA
RLCM IMPORT (local -> Workato): zip the CONTENTS of dir (skipping dotfiles) and import into folder_id, then poll. restart=true restarts running recipes on import. home_folder_id sets folder_id_for_home_assets — needed when importing into a Projects workspace whose Home assets folder is a project (else import errors on home/root assets). Returns {package_id, status, operation_type, recipe_status}. WARNING: MUTATES the live workspace. Confirm with the user first; use dry_run=true to preview without importing.
Inputs: dir (required), folder_id (required), dry_run, restart, +1 more.
disable_api_endpointA
Deactivate an API-Platform endpoint — turns a tool OFF so MCP clients can no longer call it. Mutates a live MCP server's tool surface — confirm with the user first.
Inputs: api_endpoint_id (required).
enable_api_endpointA
Activate an API-Platform endpoint — turns an inactive tool ON in its MCP-exposed collection. PREREQUISITE: start the backing recipe (flow_id) first, or enable fails. This mutates a LIVE MCP server's tool surface — confirm the endpoint id and intent with the user before calling.
Inputs: api_endpoint_id (required).
export_packageA
RLCM EXPORT (Workato -> local): build a throwaway manifest for a folder, build+poll the package, download the zip to out_dir+'.zip', and unzip into out_dir. Returns {package_id, status, out_dir, files}. WARNING: OVERWRITES out_dir (and the .zip). Confirm with the user before calling. with_data/with_tests include data + test cases.
Inputs: out_dir (required), folder_id (required), name, with_data, +1 more.
get_jobA
Fetch one job's per-step input/output/error — see what each adapter call actually sent/got, and catch errors a 'succeeded' job hid in a catch block.
Inputs: job_id (required), recipe_id (required).
get_learningsA
Read the learnings.md intake log — accumulated team discoveries not yet promoted into workato_recipe_tips. Optionally filter to one category. Consult this alongside workato_recipe_tips before building a recipe.
Inputs: category.
get_mcp_serverA
Get one AI Hub MCP server's full details by handle (incl. mcp_url). Needs the MCP privilege.
Inputs: handle (required).
get_mcp_server_policiesA
Get an AI Hub MCP server's rate/quota/IP policies by handle. Needs the MCP privilege.
Inputs: handle (required).
get_propertiesA
Get account properties whose names start with a prefix (config/feature flags).
Inputs: prefix (required).
get_recipeA
Fetch a recipe. With include_code=true returns the parsed code tree + config (source of truth for editing).
Inputs: recipe_id (required), include_code.
get_recipe_stepsA
Return a compact step tree (keyword/provider/name/as) for quick structure inspection.
Inputs: recipe_id (required).
lint_recipeA
LOCAL static-analysis of a SINGLE recipe (no token needed for the path form). Provide EITHER path (a local *.recipe.json) OR recipe_id (pulled live via the Developer API). A pure-Python port of Workato Labs recipe-lint's cheap Tier 0/1 rules + datapill checks: top-level structure (CODE_WRAPPED_IN_RECIPE, CODE_NOT_OBJECT, MISSING_TOP_LEVEL_KEYS), per-step keyword/number/uuid presence, TRIGGER_NUMBER_ZERO, sequential STEP_NUMBERING, AS_UNIQUE/UUID_UNIQUE, CONFIG_PROVIDER_MATCH (missing adapter config), NO_ELSIF, DP_VALID_JSON, DP_LINE_RESOLVES, and the update_variables raw-form footgun. Returns {source, passed, errors, warnings, diagnostics[]}.
Inputs: path, recipe_id.
list_api_access_profilesA
List API access profiles — scope/auth bindings between API clients and collections.
Inputs: no named parameters.
list_api_clientsA
List API clients — the credentialed consumers that call API-Platform endpoints.
Inputs: no named parameters.
list_api_collectionsA
List API Platform collections — each is an API product that can be exposed as a Workato MCP server.
Inputs: no named parameters.
list_api_endpointsA
List an API collection's endpoints — the TOOLS an API-Platform-backed Workato MCP server exposes. Shows each tool's method, path, active flag, and backing recipe (flow_id). Run list_api_collections first.
Inputs: api_collection_id (required).
list_connectionsA
List Workato connections (id, provider, name, connected) for wiring recipe config.
Inputs: no named parameters.
list_connector_actionsA
List a connector's actions + triggers (name + title). applications is a comma-separated list of connector ids (e.g. 'slack' or 'slack,jira,google_sheets'). Use to discover action/trigger names when wiring recipe steps.
Inputs: applications (required).
list_data_tablesA
List Workato Data Tables (id, name).
Inputs: no named parameters.
list_folder_assetsA
List the assets Workato would auto-generate into an export manifest for a folder (recipes, connections, lookup tables, etc.). Useful before export_package to see what's in scope.
Inputs: folder_id (required).
list_foldersA
List folders, optionally under a parent folder id.
Inputs: parent_id.
list_jobsB
List recent jobs for a recipe (id, status, started_at, title).
Inputs: recipe_id (required), limit.
list_lookup_tablesB
List lookup tables (id, name, schema).
Inputs: no named parameters.
list_mcp_serversA
List AI Hub hosted MCP servers (id, name, handle, authentication_method, tools_count, folder_id). Distinct from list_api_collections (API Platform). Needs the MCP privilege.
Inputs: no named parameters.
list_mcp_server_toolsA
List the tools attached to an AI Hub MCP server (id, name, description, vua_required). Needs the MCP privilege.
Inputs: handle (required).
list_mcp_user_groupsA
List end-user groups (id, name, users_count) available to grant AI Hub MCP server access. Needs the MCP privilege.
Inputs: no named parameters.
list_projectsA
List Workato projects (id, name, root folder).
Inputs: no named parameters.
list_recipesB
List recipes with optional filters: folder_id, running (bool), name_contains (substring).
Inputs: running, folder_id, name_contains.
list_recipe_versionsB
List a recipe's version history (version_no, author, comment) — for tracking/rollback awareness.
Inputs: recipe_id (required), limit.
log_learningA
Append a newly discovered Workato recipe/API gotcha to learnings.md (the team intake queue). CALL THIS AUTOMATICALLY when you hit a non-obvious behavior NOT already in workato_recipe_tips — a schema quirk, an invalid formula/operand, a datapill that won't bind, an HTTP body that strips pills, an unexpected job result. Then tell the user to commit learnings.md so the team benefits.
Inputs: title (required), pattern (required), trigger (required), category (required), +2 more.
query_data_tableA
Query rows in a Workato Data Table (its record API, on a separate host). table_id is the table UUID from list_data_tables. Optional where_json is a JSON filter like {"Status":{"$eq":"Approved"}} (operators: $eq,$ne,$gt,$gte,$lt,$lte,$in,$starts_with,$and); select_json is a JSON array of field names; limit defaults to 20; order is a field name. Returns rows as name->value dicts including $record_id.
Inputs: table_id (required), limit, order, where_json, +2 more.
query_lookup_tableA
Read rows from a lookup table by id (e.g. to inspect captured query logs).
Inputs: table_id (required), limit.
renew_mcp_server_tokenA
Rotate an AI Hub MCP server's token / mcp_url (the old URL stops working). MUTATES — confirm first. Needs the MCP privilege.
Inputs: handle (required).
scaffold_recipeA
LOCAL file write (no token): create a connection-less clock->logger starter *.recipe.json with fresh as/uuid ids under package_dir/subfolder — a safe base that always validates and deploys. Writes project.json if absent. Returns {created, trigger_as, logger_as}. Refuses to overwrite an existing file.
Inputs: name (required), package_dir (required), subfolder.
start_recipeA
Start (activate) a recipe. Start-time validation errors surface here — read them to debug.
Inputs: recipe_id (required).
stop_recipeA
Stop (deactivate) a recipe. Required before updating a running recipe's code.
Inputs: recipe_id (required).
update_data_table_rowA
Update a Data Table record by record_id (record API). Include only the fields to change in document_json ({field_name: value}). Get record_id from query_data_table ($record_id). MUTATES data — confirm first.
Inputs: table_id (required), record_id (required), document_json (required).
update_recipeA
Update a recipe's code/name/config (code & config as JSON strings). Stop a running recipe first.
Inputs: recipe_id (required), code, name, config.
upsert_propertiesB
Create/update account properties. properties_json is a JSON object string {name: value}.
Inputs: properties_json (required).
validate_packageA
LOCAL lint of a package DIRECTORY before deploy (NO API call). Runs the ported recipe-lint rule engine on each *.recipe.json (see lint_recipe for the rule set), plus package-level checks: all *.json parse; project.json at root (warn); every config[].account_id.zip_name resolves to a file on disk. Returns {package, passed, errors, warnings, ok, diagnostics[]} where each diagnostic is {rule_id, tier, level, message, file}.
Inputs: path (required).
whoamiA
Return the authenticated user and workspace for the current token.
Inputs: no named parameters.
workato_recipe_tipsA
Hard-won gotchas for authoring Workato recipes via the Developer API (the curated tier). Read before building/editing. New discoveries go to log_learning first.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 56 tools
Most tools target distinct resource+action pairs, and descriptions clearly separate similar pairs like list_mcp_servers vs list_api_collections or query_lookup_table vs query_data_table. A few pairs (list_mcp_server_tools vs list_api_endpoints) could be confused at a glance, but the descriptions resolve the ambiguity.
The overwhelming majority follow a consistent verb_noun underscore pattern (get_, create_, list_, update_, delete_, etc.). Minor exceptions like 'whoami' and 'workato_recipe_tips' break the pattern but are still readable and memorable.
With 56 tools, this far exceeds the 50+ threshold defined as an extreme mismatch. Even for a broad platform covering recipes, MCP servers, API Platform, data tables, and RLCM, the sheer number creates a heavy cognitive load and suggests the server is over-scoped.
The tool set provides excellent lifecycle coverage across multiple domains: full CRUD for recipes and MCP servers, data table record operations, API endpoint activation, export/import, linting, and scaffolding. Minor gaps exist (no API endpoint create/delete, no collection update/delete) but core workflows have no dead ends.
Maintenance
Related MCP Connectors
Marketo MCP server for AI. 130 tools to operate Marketo from Claude, Cursor, or ChatGPT.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
The Instant MCP server is a wrapper around the Instant Platform SDK that enables creating, managing, and updating InstantDB applications directly within an editor. It provides tools for fetching rules files for LLMs, retrieving and pushing app schemas, managing permission rules, and executing database queries. Key capabilities include schema management (get-schema, push-schema), permission management (get-perms, push-perms), query execution, and listing recent query history.
Related MCP Servers
- AlicenseAqualityBmaintenanceLocal MCP server that wraps the headless Claude Code CLI as MCP tools, providing stateless access to Claude's coding capabilities through prompt-based interactions. It enables users to execute Claude Code commands with various prompt formats and structured outputs directly from MCP clients.3MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that provides comprehensive access to Salesforce Tooling API for metadata management, SOQL queries, code analysis, and debugging through Claude and other AI assistants.78 npm5MIT
- FlicenseNot gradedqualityCmaintenanceA local MCP server that gives Claude direct access to Workday Studio workspace. Enables reading, writing, planning, and validating integration assemblies without network calls or tenant credentials.-
- AlicenseNot gradedqualityBmaintenanceA Node.js MCP server that gives Claude Code direct access to file operations, database queries, PHP execution, SFTP deployment, and over 60 specialized tools for development and debugging.1MIT