Execute actions with Embedded MCP
Run MindCloud app actions through Embedded MCP with arguments, connection selection, idempotency, and pagination.
execute-actions runs published app actions on the end user's connections. A Run Workflows key or higher can call it.
Each actions entry needs a unique ref, appRef, and actionRef. Add arguments from the action schema. Use connectionRef when the user has several accounts for the app. For writes, set idempotencyKey so a retry does not run the same write twice.
{
"actions": [
{
"ref": "send",
"appRef": "slack",
"actionRef": "sendMessage",
"arguments": {
"channel": "C123",
"text": "Deployment complete"
},
"connectionRef": "cred_public_1",
"idempotencyKey": "message-123"
}
]
}{
"success": true,
"data": {
"results": [
{
"ok": true,
"ts": "1727524800.000100"
}
]
},
"meta": {
"resultCount": 1,
"connectionId": "cred_public_1",
"page": {
"nextCursor": null
}
}
}The example output is shortened. The live response can include connection, page, and compaction metadata.
More than one action
Send up to 20 entries. Results use each entry's ref; independent entries run in parallel. If one action needs another's output, make separate calls.
{
"actions": [
{
"ref": "a",
"appRef": "slack",
"actionRef": "listChannels"
},
{
"ref": "b",
"appRef": "hubspot",
"actionRef": "listContacts"
}
]
}Before execution, the server resolves and validates every entry. One invalid entry stops the batch before any action runs. A provider failure after execution starts can still leave other entries completed.
Without resultTransformCode, a multi-action result uses data.byRef. For example:
{
"success": true,
"data": {
"byRef": {
"a": {
"results": [
{
"id": "channel_1"
}
]
},
"b": {
"results": [
{
"id": "contact_1"
}
]
}
}
}
}Use fields to select output field paths. Each entry can use query.filter, query.sort, and query.page when its schema allows them. Page mode is single by default; all drains within server limits. Follow meta.page.nextCursor for another page.
This example requests one filtered page. The field names and operators must match the live action schema:
{
"actions": [
{
"ref": "contacts",
"appRef": "hubspot",
"actionRef": "listContacts",
"query": {
"filter": {
"where": [
{
"field": "status",
"operator": "eq",
"value": "active"
}
]
},
"sort": [
{
"field": "createdAt",
"direction": "desc"
}
],
"page": {
"mode": "single",
"size": 25
}
}
}
],
"fields": [
"id",
"email"
]
}For large results, read meta.notice and pass meta.compaction.resultSet to query-result-set. Stored results last 30 minutes from the last query. resultTransformCode takes a JavaScript function expression and shapes returned rows; it does not change the provider action.
For one action, the function receives { data } and returns an array. For several actions, it receives { refs, dataByRef, metaByRef }. Use separate calls when later action arguments depend on earlier output.