Connected Apps
Connect third-party CRMs and import contacts via Pipedream.
search_supported_apps
Search the thousands of third-party apps this agency can connect their agent to — CRMs, spreadsheets, analytics, helpdesks, anything Pipedream integrates with. Use this FIRST when someone names an app ("connect my Zoho", "can you read my HubSpot") to find its exact slug, which create_app_connect_link needs. Returns each app's slug, name, description, and whether we can also import review-invite contacts from it. With no query, returns the apps we can import contacts from. You don't pass an agency — it comes from your credentials.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_supported_apps",
"arguments": {}
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "..."
}
]
}
}Response shape shown for illustration — the actual content depends on the tool and your data.
create_app_connect_link
Produce a one-time authorisation link for connecting a third-party app (found with search_supported_apps). GIVE THE LINK TO THE USER — they must open it and sign in to the app themselves; you cannot complete the authorisation for them, and the connection does not exist until they do. The link expires in minutes, so generate it when they're ready rather than in advance. After they confirm they've finished, use list_connected_apps to verify it landed. You don't pass an agency — it comes from your credentials.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "create_app_connect_link",
"arguments": {}
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "..."
}
]
}
}Response shape shown for illustration — the actual content depends on the tool and your data.
list_connected_apps
List EVERY third-party app this agency has connected — CRMs, spreadsheets, databases, helpdesks, anything authorised through the Capabilities page — with its health. CALL THIS FIRST whenever the user mentions one of their own apps by name ("my Airtable", "our HubSpot", "the Google Sheet") BEFORE saying anything about whether it is connected or suggesting they install something: a connected app already has its tools available to you, named `pipedream-<slug>`. Also use it to confirm an authorisation landed, and to find the connectionId run_crm_import needs. Flags connections the provider has revoked or expired — those return no data until reconnected, which otherwise reads as an app with nothing in it. You don't pass an agency — it comes from your credentials.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_connected_apps",
"arguments": {}
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "..."
}
]
}
}Response shape shown for illustration — the actual content depends on the tool and your data.
run_crm_import
Start importing contacts from a connected CRM into review-invite campaigns. Returns a run id IMMEDIATELY — a real CRM takes minutes to read, so this queues the work rather than waiting. Tell the user it's started and that the result appears in Recipients → Import history; do not claim a contact count, you won't have one. Contacts are routed to locations by the connection's mapping rule; pass locationId to send everything to one location instead. Contacts whose location can't be resolved are skipped, never filed under a default. You don't pass an agency — it comes from your credentials.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "run_crm_import",
"arguments": {
"connectionId": "string"
}
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "..."
}
]
}
}Response shape shown for illustration — the actual content depends on the tool and your data.
list_imported_contacts
Read the contacts imported into review-invite campaigns — from connected CRMs, uploads or manual adds. Use it to answer anything about who is in the list: counts, coverage per location, which campaign or source a person came from, whether an email or phone is present, whether they've been sent to or replied. Filter by locationId, campaignId, source, or a search over name/email/phone. Paged — pass the returned nextOffset to continue. READ ONLY: it never sends anything. You don't pass an agency — it comes from your credentials.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_imported_contacts",
"arguments": {}
}
}{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "..."
}
]
}
}Response shape shown for illustration — the actual content depends on the tool and your data.