MULTI-APP TOOLKIT
Build with Ironclad + Power Automate
- Multi-app
- One MCP session
- 17 actions
- 3 triggers
- Managed auth
MCP
One MCP session, both toolsets
One session gives your product or agent every Ironclad and Power Automate tool at once — connect once, list tools, and call them like any single-app session.
// accessToken: mint a short-lived token with the Connect SDK — see the MCP guide
const transport = new StreamableHTTPClientTransport(
new URL("https://remote.mcp.pipedream.net/v3"),
{
requestInit: {
headers: {
Authorization: `Bearer ${accessToken}`,
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
"x-pd-app-slug": "ironclad,power_automate",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// One list, both toolsets: Ironclad and Power Automate tools arrive
// together, each keyed by its own app's slug.
// e.g. run Create Record:
const result = await mcp.callTool({
name: "ironclad-create-record",
arguments: {
recordName: "Name",
recordType: "Type",
},
})import { PipedreamClient } from "@pipedream/sdk"
const pd = new PipedreamClient({
projectId: process.env.PIPEDREAM_PROJECT_ID!,
clientId: process.env.PIPEDREAM_CLIENT_ID!,
clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
projectEnvironment: "production",
})
const externalUserId = "{external_user_id}" // any stable ID for this user in your system
const [ironcladTools, powerAutomateTools] =
await Promise.all([
pd.components.list({ app: "ironclad" }),
pd.components.list({ app: "power_automate" }),
])
// One external user owns both connected accounts, so either app's tools
// run on their behalf with the same externalUserId.curl "https://api.pipedream.com/v1/connect/{project_id}/components?app=ironclad" \
-H "X-PD-Environment: production" \
-H "Authorization: Bearer {access_token}"
curl "https://api.pipedream.com/v1/connect/{project_id}/components?app=power_automate" \
-H "X-PD-Environment: production" \
-H "Authorization: Bearer {access_token}"
# Connect both accounts to the same external_user_id, then
# configure and invoke either app's tools on that user's behalf.ARCHITECTURE
One user, two connected accounts
Your user connects each account once, under whatever ID they already have in your product. The two stay independent — either can be revoked on its own — and your code reaches both through that one user.
Your product
external_user_id
{external_user_id}Pipedream Connect
Managed identity
Auth · tools · routing
Ironclad
Connected account
Power Automate
Connected account
TOOLS
Ironclad tools
The Ironclad tools this pairing puts in reach, each one running on your user's own connected account.
Actions top 8 of 17
-
Create Record
actionCreates a new record in Ironclad. Providepropertiesas a JSON object where each key maps to a{type, value}wrapper. Run Describe Workspace first to see all valid record types and property keys (with their requiredtype) in one call; List Type Options / List Properties Options exist only to resolve a single value for this action's props, not for general discovery. Property types are snake_case, e.g.string,number,monetary_amount,address,date,duration,boolean— not the camelCase types used by workflow attributes. Complex types use nested objects:monetary_amount{"currency": "USD", "amount": 25.37},address{"lines": ["325 5th Street", "Suite 200"], "locality": "San Francisco", "region": "California", "postcode": "94107", "country": "USA"}. Example: setrecordNameto"Acme NDA",recordTypeto"vendor_agreement", andpropertiesto{"counterpartyName": {"type": "string", "value": "Acme Corp"}, "contractValue": {"type": "monetary_amount", "value": {"currency": "USD", "amount": 50000}}}; returns{"id": "rec_abc123", "name": "Acme NDA"}. See the documentationWritev1.0.1 -
Delete Record
actionPermanently deletes an Ironclad record by ID. This cannot be undone. Run Search Records first to find therecordId— confirm it's the right record before deleting, since Ironclad has no undo. Example: setrecordIdto"rec_abc123"to delete that record; the action confirms deletion succeeded. See the documentationWritev0.0.2 -
Describe Workflow Template
actionRetrieves the fillable attribute schema for an Ironclad workflow template — the required call before Launch Workflow. Returns each field's type, display name, enum options, and whether it's required. Every field'sdescriptionalready includes a worked value-format example for complex types (address,monetaryAmount,date,duration,document/array) — use those examples verbatim, do not guess a shape. A field'srequiredmay be"conditional": when Ironclad's naming convention makes the trigger inferable (e.g. a field namedset1Question2triggered by a selector field set to"Set 1"), adependsOn: {field, value}hint is included; whenever you set the selector to that value, also include the dependent field. If a conditional field has nodependsOnhint, its trigger isn't inferable from naming — watch for aMISSING_PARAMerror naming it after you submit Launch Workflow, and retry with it included. Run Describe Workspace first to find a template ID. Example: settemplateIdto"tmpl_abc123"to retrieve a schema where each field looks like{"counterpartyName": {"type": "string", "displayName": "Counterparty Name", "required": "always", "description": "Value of Counterparty Name"}, "requiredAddress": {"type": "address", "displayName": "Required Address", "required": "always", "description": "Value of Required Address. Example: {\"lines\": [...], \"locality\": ..., \"region\": ..., \"postcode\": ..., \"country\": ...}"}}. See the documentationRead-onlyv0.0.2 -
Describe Workspace
actionOrients you to this Ironclad workspace: returns every configured record type and property (with its type), plus the first page of launchable workflow templates. This is the primary orienting call — run it first for any question about what record types, properties, or workflow templates exist in the workspace, before List Type Options / List Properties Options / List Template ID Options (those three exist only to resolve one value while configuring another tool's prop, not for general discovery — using them for discovery skips the bundled context this tool provides). Takes no parameters. IfworkflowTemplateslooks capped at a page boundary, run List Template ID Options with an incrementedpagefor the rest. Example return:{"recordTypes": {"vendor_agreement": "Vendor Agreement"}, "properties": {"contractValue": "monetary_amount", "counterpartyName": "string"}, "workflowTemplates": [{"id": "tmpl_abc123", "name": "NDA Template"}]}. See the documentationRead-onlyv0.0.2 -
Get Record
actionRetrieves a single Ironclad record by its ID, returning the record's name, type, properties, and metadata. Run Search Records first to find a valid record ID. Example: setrecordIdto"rec_abc123"to retrieve a record with fields such asid,name,type, andproperties. See the documentationRead-onlyv0.0.2 -
Get Workflow
actionRetrieves the full Ironclad workflow object, including its schema and current attribute keys and types. Use the returned schema to construct a validupdatespayload for Update Workflow Attributes. Run Search Workflows first to find a workflow ID. Example: setworkflowIdto"wf_xyz789"to retrieve a workflow with fields such asid,title,status,currentStep, andattributes(a map of attribute key → value). Use the optionalfieldsparam (e.g."id,title,status") to return only specific top-level keys. See the documentationRead-onlyv0.0.2 -
Launch Workflow
actionLaunches a new workflow in Ironclad. Run Describe Workspace to find a template ID, then run Describe Workflow Template to discover the field keys, types, and constraints (including conditional fields) needed to build theattributespayload. Example: settemplateIdto"tmpl_abc123"andattributesto{"counterpartyName": "Acme Corp", "paperSource": "Our paper", "startDate": "2026-09-01"}; returns{"id": "wf_xyz789", "status": "review"}. See the documentationWritev1.0.1 -
List Properties Options
actionReturns all Ironclad record property keys and their display names (including the requiredtypefor each) as{label, value}pairs. Call this before setting thepropertiesfield in Create Record to find valid property keys and their exact type — do not guess a property's type. Example return:[{"label": "Counterparty Name (type: string)", "value": "counterpartyName"}, {"label": "Contract Value (type: monetary_amount)", "value": "contractValue"}, ...]. See the documentationRead-onlyv0.0.3
Triggers
-
New Approval Event Instant
triggerEmit new event when a fresh approval event is generated.Instantv0.0.2 -
New Workflow Document Event (Instant)
triggerEmit new event when a workflow document event is freshly established.Instantv0.0.2 -
New Workflow Event (Instant)
triggerEmit new event when a new workflow event is created.Instantv0.0.2
TOOLS
Power Automate tools
The Power Automate tools this pairing puts in reach, each one running on your user's own connected account.
Actions
No Power Automate actions are available yet.
Triggers
No Power Automate triggers are available yet.
MULTI-APP
Works with more apps
The combinations customers connect alongside these two — nothing here is limited to a pair.
REFERENCE
Toolkit details
- x-pd-app-slug
- ironclad,power_automate
- Primary app
- Ironclad (ironclad)
- Second app
- Power Automate (power_automate)
- Authentication
- OAuth + OAuth
- Available actions
- 17
- Available triggers
- 3