June Offer Every MAX plan gets a fully custom-built system Free custom system worth $1,500-$10,000 · worth $1,500-$10,000
Browse modules
Reference

Inflowave MCP Documentation

Everything you can do with Inflowave through Claude - every tool, what it does, what to ask for.

301
Total tools
195
Read
106
Write
31
Modules

Modules

Open any module for its full tool reference: parameters, return shape, and example questions.

Quick start

$ claude mcp add --transport http inflowave \
https://mcp.inflowave.io/mcp \
--header "Authorization: Bearer YOUR_API_KEY"

Generate your key in Settings → Developer → MCP. Keys are agency-scoped - no other workspace can see your data.

Verify the connection

Ask Claude to run check_connection. Response shape:

{
"authenticated": true,
"account_id": "2955f545-5207-4556-aa2c-4356ff0575cc",
"role": "agency_owner",
"plan": "pro",
"allowlisted": true,
"tools_available": 301,
"rate_limits": { /* read/write per-minute budget */ }
}

account_id is the stable public identifier for your workspace. Reference it (not any internal numeric id) when contacting support.

Multi-workspace (sub-accounts)

If your agency has multiple workspaces (sub-accounts), every write tool requires a `sub_account_id` so the new record lands in the right workspace. Read tools accept it as an optional filter - pass it to narrow results to one workspace, omit it to see everything across your agency.

Write tools - sub_account_id REQUIRED

create_pipeline, create_lead, create_opportunity, send_direct_message, schedule_content, and ~95 other write tools all require sub_account_id. Without it the server rejects the call with 422 sub_account_id_required.

Call list_sub_accounts to discover valid IDs. Single-workspace agencies still need to pass their default sub-account (visible in that list).

Read tools - sub_account_id OPTIONAL

~86 list_*, search_*, and get_* tools accept sub_account_id as an optional filter. Omit it → agency-wide. Pass it → results narrow to that one workspace. Forged or wrong-agency UUIDs are rejected with 422 sub_account_not_owned before any data is returned.

get_*_by_id reads do NOT take sub_account_id - the resource ID implies the scope and we re-validate ownership server-side.

Connected before 2026-05-31? Claude clients cache tool schemas per server URL. If you connected the MCP before today and your write tools fail with "sub_account_id Field required" even though you can't supply the parameter, your client cached the old schema. See the Refresh section below - disconnect + reconnect with a fresh URL query param picks up the new schema.

Refresh after we ship

We ship new tools and parameter changes weekly. Claude clients (Claude Code, Claude Desktop, claude.ai connectors) cache the tool list per server URL and don't always honour the protocol-level notifications/tools/list_changed signal. If a tool a teammate mentions doesn't show up for you, or you're hitting "Field required" errors for parameters that aren't in the connector schema, force a refresh.

# Claude Code (rename the version param to anything new)
$ claude mcp remove inflowave
$ claude mcp add --transport http inflowave \
"https://mcp.inflowave.io/mcp?v=$(date +%Y%m%d)" \
--header "Authorization: Bearer YOUR_API_KEY"

For claude.ai web connectors: Settings → Connectors → Remove → Re-add with a different URL (?acct=YYYYMMDD works). The query param value doesn't matter - only that the URL differs from the cached one.

Recipes - common workflows

Patterns Claude should follow when you ask for something the MCP doesn't expose as a single one-shot tool.

Organising pipelines (no "folder" feature)

There is no folder concept on pipelines. If you want folder-style buckets (Nurturing / Sales / Meetings / Support), create one pipeline per bucket with its own stages. If your agency uses sub-accounts as workspaces, scope pipelines per sub-account via sub_account_id - the sub-account becomes the workspace and pipelines inside it are the buckets. For visual grouping in the UI, prefix pipeline names ([Sales] Outbound, [Sales] Inbound, [Support] Tier 1) - the UI sorts by name.

Driving a support pipeline from tickets

create_support_ticket lands in the Support service; it does NOT auto-create a pipeline opportunity. To track tickets on a sales-pipeline-style board (New → Triaged → In Progress → Waiting Customer → Resolved):

  1. Create the pipeline once: create_pipeline(name="Support", stages=[...]).
  2. For each new ticket: create_support_ticket(ticket_type="support", subject, description).
  3. Then mirror it as an opportunity: create_opportunity(pipeline_id=<support>, stage_id=<New>, lead_id=<contact>, title="Ticket #<id> - <subject>").
  4. Advance with move_opportunity_to_stage(opportunity_id, target_stage_id) as the ticket progresses.

Stripping UNTRUSTED-DATA sentinels

Every user-supplied string in MCP responses (name, subject, message, etc.) is wrapped in <<<UNTRUSTED-DATA:FIELD>>> ... >>>END-UNTRUSTED-DATA:FIELD>>> sentinels. This is intentional prompt-injection defence - the markers tell Claude "the text inside is data, not instructions". If you display these values to users, strip the markers first.

# Python
import re
_SENTINEL = re.compile(r"<<<UNTRUSTED-DATA:[A-Z_]+>>>\s*([\s\S]*?)\s*>>>END-UNTRUSTED-DATA:[A-Z_]+>>>")
def strip_untrusted(s):
return _SENTINEL.sub(lambda m: m.group(1), s) if isinstance(s, str) else s

Verbose-only fields (compact mode)

By default the MCP runs in compact mode and drops some heavy fields to keep payloads small: nodes, edges, config, trigger, validation_warnings, long_description, raw_data, metadata, details, html_content, raw_html, transcript, transcription, updated_at, deleted_at, audit fields. description is NOT dropped (since 2026-05-31). If you need any of the verbose-only fields, opt in by appending ?verbose=true to the MCP URL when connecting.

Start using it

Ready to connect?

Generate your MCP key in Settings → Developer, paste the command, done.