API docs Skills Install

PlungeAI MCP — User Guide

Connect your AI client (Claude Code, Claude Desktop, Cursor, Lovable, Replit…) to the PlungeAI platform, then ask for things in plain language. Your client picks the right tool and runs it on the platform.

See also: API docs · Skills · Install

Connecting

Claude Code (one command):

claude mcp add --transport http plungeai https://mcp.plungeai.com/v1 \
  --header "Authorization: Bearer YOUR_KEY"

Claude Code / Cursor / other JSON-configured clients.mcp.json in a project (or the client's global MCP config), same shape everywhere:

{
  "mcpServers": {
    "plungeai": {
      "type": "http",
      "url": "https://mcp.plungeai.com/v1",
      "headers": {
        "Authorization": "Bearer YOUR_KEY"
      }
    }
  }
}

Claude Desktop / claude.ai: the custom-connector UI is OAuth-centric and can't set a bearer header, so bridge it with mcp-remote:

{
  "mcpServers": {
    "plungeai": {
      "command": "npx",
      "args": [
        "mcp-remote", "https://mcp.plungeai.com/v1",
        "--header", "Authorization: Bearer YOUR_KEY"
      ]
    }
  }
}

Other clients: point them at https://mcp.plungeai.com/v1 and set the header Authorization: Bearer YOUR_KEY (some clients accept X-API-Key: YOUR_KEY instead).

Raw HTTP (no client)

No MCP client? It is plain JSON-RPC over Streamable HTTP — initialize, then tools/list, then tools/call:

# stateless Streamable HTTP — no session id needed
curl -s https://mcp.plungeai.com/v1 -H "Authorization: Bearer YOUR_KEY" \
  -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'
curl -s https://mcp.plungeai.com/v1 -H "Authorization: Bearer YOUR_KEY" -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
curl -s https://mcp.plungeai.com/v1 -H "Authorization: Bearer YOUR_KEY" -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"plungeai_whoami","arguments":{"user_request":"who am I"}}}'

Treat the key like a password — it identifies you to the platform. It is shown only once at creation. If you need a new one, or think yours has leaked, generate a replacement yourself at Dashboard → One API → Keys (https://dashboard.plungeai.com) and revoke the old one. For a shared team key, ask the account owner instead.

Quick start once connected: in Claude Code, type /plungeai — the platform's one activation prompt. Run it bare and your client asks what you want; give it text (/plungeai research Tesla's Q2) and it goes straight to work. You can also just talk normally — the prompt is a convenience, not a requirement.


One-click installs

The install page at https://mcp.plungeai.com/install generates ready-made setup for Claude Code, claude.ai/Desktop, Cursor, VS Code, Replit, Lovable, Bolt.new, v0, Windsurf, and ChatGPT (pending OAuth). Machine-readable: https://mcp.plungeai.com/install.json. Lovable admins: connector pack at https://mcp.plungeai.com/lovable/SETUP.md.

Each tool also has a thin operating skill at https://mcp.plungeai.com/connect//SKILL.md (replit, cursor, vscode, windsurf, codex, gemini-cli, opencode, lovable, bolt, v0, api) — installable everywhere via npx skills add PlungeAI/plungeai-agent-skills --skill plungeai-<tool>.

From a terminal: the ocean CLI. @plungeai/ocean-cli wraps the same platform — AI chat REPL, workflow run/schedule, ocean whoami, memory, templates, missions — over your ozk_ key and/or Studio session. Install: npm i -g @plungeai/ocean-cli, then ocean auth set-key and ocean --help.


How it works

you type a sentence
   └─ your client reads it and decides which tool to call
        └─ mcp.plungeai.com
             └─ the platform: ~90 active agents, workflow engine, saved workflows

One account, everywhere. A workflow you run here is the same workflow you see in Studio and in the mini app. There is no separate "MCP workspace" — anything you create shows up in the other surfaces immediately.

You don't name tools. Describe what you want. Your client chooses between the 20 available tools and fills in the arguments (the full list is in "Every tool on the server" below).

"My agents" means your workflows. In everyday use your saved workflows are your agents — "show me my agents" lists them. The registry is different: ~90 platform building-block agents (search, finance, documents…) that workflows are made of. Say "agents in the registry" or "what can the platform do" when you mean those.

Every run is visible everywhere. Runs started here appear in Studio's results sidebar and the ops dashboard with your question as the title and the workflow + agents that actually ran as the subtitle — same as runs started in Studio itself.

Nothing runs silently. While a call is working, the server streams live status — which agents are running, which just finished, how much has been written, and a final completion line:

⚙️  Agents working — 5/18 agents complete · ✓ brave-agent · 13 active (tavily-agent, exa-agent…)
✍️  Writing (3,516 chars) — …the agent's answer as it is produced
✅  Complete — 18 agents in 24.6s

Conversational and builder calls narrate themselves too — a follow-up reports whether it continued an open session or loaded the run's stored result, and the workflow builder says when it is generating, validating and saving. A task that runs long reports who is still working (⚙️ harness-agent still working — 45s elapsed…).

Two things worth knowing about that feed:

If a tool seems missing, reconnect your client. Clients read the tool list once, when they connect. After a platform update, restart the client to pick up changes.


30 things to ask

Type these as normal sentences.

Finding what the platform can do

1. "What agents do you have for financial analysis and SEC filings?" Searches ~90 live agent cards semantically. Returns matches with what each is good at and what to use instead.

2. "Show me the full card for sec-agent — what operations does it support?" One agent's complete card: every operation, examples, and its "not for this → use X instead" redirects. Worth doing before using an unfamiliar agent.

3. "What connectors are available?" Slack, Google Calendar, GitHub, Notion, Stripe, Salesforce, HubSpot, Shopify, Linear… Also try personas, experts, skills, models.

4. "Which agent should I use to turn a PDF into markdown?" Describe the capability, not the name — the search is semantic. You'll get markitdown, doc-converter, crawl4ai-agent with the differences spelled out.

Tip: ask for a filtered search, never "list all agents". An unfiltered listing returns the whole catalog — about 135 KB into your context in one go.

The catalog is active-only. Discovery lists only agents that are deployed and callable, and asking to run anything else is refused rather than failing halfway. So take agent names from a search, not from memory or another platform — a name that isn't in the catalog will not run here.

Your own workflows

This is the core of the platform — most of what you'll do day to day is discover, run, and inspect your own saved workflows.

5. "Show me all the workflows in my Finance folder." Your folders (rubrics) and what's in them.

6. "What folders do I have and how many workflows in each?" e.g. Finance 15 · Personal 23 · Technology 11 · Business Strategy 14 · Blockchain 8…

7. "Find my workflow about due diligence." Searches your saved workflows by name and description.

8. "Run the Acquisition Scanner with Adobe as the input." Runs a saved workflow. Most finish in seconds — the engine fans out over agents in parallel.

9. "Show me my workflows in the Finance folder, then run the Acquisition Scanner with Tesla as the input." One request, two steps — your client lists the folder to find the workflow you meant, then executes it with your input.

10. "Show me my Acquisition Scanner workflow — what does it actually do?" Fetches the saved workflow's definition so you can see exactly what it runs (which agents, in what order) before you trust it with real input.

11. "Run my Company Snapshot Research Brief with Apple as the input." Same run-a-saved-workflow pattern as #8 — swap in whichever workflow and company you mean.

One-off runs

12. "Ask llm-agent in one sentence what a Cloudflare Durable Object is." Runs a single agent once, no workflow needed.

13. "Ask your harness agent a quick question: what's notable about Sun Valley, Idaho?" A bounded, one-shot harness-agent question — fast and reliable. Keep goals like this short and specific; open-ended "research everything about X" style goals can run long enough to need checking on later (see Troubleshooting).

14. "Build me a workflow that scans a company for acquisition news and writes a briefing." Generates and saves a real multi-agent workflow from a description, choosing actual registry agents.

15. "What workflow templates are available? Start one from the due-diligence template." A library of ready-made workflows. Starting from one copies it into your account so you can edit it.

16. "Rename my Acquisition Scanner, move it to the Finance folder, and save a version first." Direct edits to your saved workflows — create, update, delete, and versioning so you can roll back. YAML is validated before it saves. Creating a workflow can file it straight into a folder ("…and put it in Finance") — no separate move needed.

Calling one agent directly (typed)

Structured agents are forms, not chats — and your client can fill the form for you. It looks up the agent's contract (its exact typed field list, operations, worked examples, and whether your credentials are connected) and then calls the agent directly. You just ask.

This also means you can interrogate any agent in plain language before using it — "What is the x402 broker for?", "Can I search Amazon and pay with x402? What information do you need from me?" — the answer comes from the agent's live card (what it's good at, what to use instead) and its contract (the exact fields, and whether you're set up to use it).

17. "Give me a five-day weather forecast for Sun Valley, including air quality." Runs weather-agent directly with typed fields — by place name, no coordinates needed. The weather agent implements the full OpenWeather surface: current conditions, hourly/daily forecast, air quality, and more.

18. "Before I use the Gmail agent — what exactly does it need from me, and am I connected?" Fetches the agent's contract: every parameter (typed), its operations, a worked example, and the live credential status for your account ("connected as you@…" / "not connected yet"). Great habit before first use of any unfamiliar agent.

19. "Ask llm-agent, using claude-haiku-4-5, to summarize this paragraph." You can pick the model for a single-agent run. Model names are checked against the live catalog before anything runs — a name that doesn't exist is refused instantly with suggestions, never a hang. ("What models are available?" lists them.)

Results and follow-ups

20. "Show me the result of that last run." Fetches the output.

21. "Show me the full result for that specific task, not just the summary." Pass the task_id from one branch of a workflow to get that part's complete output, instead of only the top-level final result. You don't have to guess the ids: a multi-task result ends with a "Steps in this run" index — each step's task id and the agent that ran it — so any step is one ask away. Conversational runs come back with the full conversation thread, not just the last message.

22. "Is that still running?" Status, duration, which task it's on.

23. "Show me my last 10 executions." Your run history with status and timing.

24. "Now do the same analysis but focus on the competitive landscape." A follow-up against a finished run — it keeps the context instead of starting over.

25. "Yes, go ahead" / "Use the second option" Answers a run that paused to ask you something.

Payments

26. "Check my x402 wallet balance, then use the broker to find and buy access to a weather API." The wallet shows your balance and the price; the broker handles discovery and asks your approval before it spends anything.

27. "Use the x402 broker to find StablePhone and place a call to [phone number]." The broker discovers and pays for the calling service (asking your approval first), then places the call — check on it afterward with your x402 wallet.

When a run pauses to ask you something

Some agents stop instead of finishing — always before spending money, and sometimes to ask a question ("which wallet?", "what should the call say?"). Your client will relay it and wait for you:

  1. The run comes back with ⏸ AWAITING USER APPROVAL (a staged action + its cost) or ⏸ AWAITING USER (a question). Nothing has been executed yet.
  2. Your client asks you to decide. Reply naturally — "yes"/"approve" to proceed, "no" or any normal answer to change course. It is instructed to never approve on its own.
  3. On approve, the held action executes exactly once (a stale or repeated approve is harmless — it just answers "nothing awaiting approval", it can never double-pay).

Long-running (async) runs surface pending approvals too — checking the run's status reports them, so a paused background run is never invisible.

A structured tool you call directly (plungeai_execute_tool) is fenced the same way: an outward, irreversible operation — send, pay, transfer, buy, withdraw — comes back ⏸ NEEDS APPROVAL with nothing executed, and only an interactive session (Ocean Studio, where a human can approve) can run it. Unattended, it never spends.

Scheduling, memory, identity

28. "Run the S&P 500 weekly performance analysis every Monday at 7am." Creates a cron schedule. Also: "what do I have scheduled?"

Any active registry agent (or a saved query) is schedulable the same way — the platform wraps it into a saved, visible workflow named "Scheduled: " and schedules that, so every run lands in your normal execution history. A job's run history shows a real execution id per run (fetch any of them like any other result) and an error column, and "run it now" reports the run's actual outcome — not just "triggered". Deleting a job stops it but keeps its run history readable; a deleted job refuses run-now, updates, pause, and resume. Scheduling an unknown or inactive agent is refused at create time, before anything is saved.

29. "What do you remember about Circle's acquisitions?" Long-term memory across runs — facts missions have written down.

Also: "Remember that our fiscal year ends in June." Writes a durable memory — the same store recall reads, and the same mechanism Studio's harness uses — so every later run knows it. Past-run history is deliberately separate from memory: ask "find my past runs about Tesla" or "show me that run" to search and read the run journal.

30. "Who am I, what tier am I on, and how much of my rate limit have I used?" Your identity, and your current usage window.

Bonus — start a plan conversation: "Let's design a due-diligence workflow together" keeps a persistent thread and can save the result as a workflow.


Every tool on the server

What your client sees when it connects — the same 20 tools and descriptions Claude Code shows under /mcp. You never call these by name; this is the reference for what the server can handle.

Tool What it does
plungeai_execute_workflow Run a CNL workflow — a saved one by id, or ad-hoc YAML (the workflow: wrapper is optional — bare top-level name/tasks is accepted). Streams progress; mode:"async" for long runs.
plungeai_execute_agent Run a single prompt-driven agent once (e.g. llm-agent, or skill-agent with a persona). Optionally pick the model — names are validated against the live catalog before anything runs. session_id continues a conversation.
plungeai_get_tool_contract The exact "API docs" for one registry agent: parameters (typed), operations, examples — and whether YOUR account has the credentials it needs connected.
plungeai_execute_tool Run one structured tool-agent directly with typed parameters. Never answers with a raw error: if something is missing it tells your client exactly what — a field, a connected account (e.g. Google), your own API key, or your approval. An outward, irreversible operation (send, pay, transfer, buy, withdraw) comes back ⏸ NEEDS APPROVAL with nothing run — the platform fences it in the engine, so a directly-called tool can no longer spend or send unattended.
plungeai_run_mission Bounded autonomous mission (loop agent): goal, optional tool fence, iteration cap. Reads/writes long-term memory. Async by default.
plungeai_learn Manage your private skill library. action: learn (default) turns a URL, PDF, or past run into a reusable skill (needs source; async by default — poll status with plungeai_get_workflow_status). action: list shows your learned skills. action: forget deletes one by name (its id from list).
plungeai_list_agents Search the platform registry (~90 building-block agents) semantically. Not your own agents — that's plungeai_list_workflows.
plungeai_list_workflows Your saved workflows — what you mean by "my agents". Folders (non-empty only) + recent; filter by folder/search.
plungeai_get_result Fetch an execution's output by its execution_id (optionally one task's output via task_id). Multi-task runs end with a "Steps in this run" index; conversational runs include the full thread. An id that doesn't exist comes back as structured NEEDS INPUT naming the id, never a bare "not found" error.
plungeai_get_workflow_status Status of a run; self-heals stuck ones; reports pending approvals/questions (continuation). A run that stopped at its turn/iteration budget before finishing reports incomplete (its partial result is still stored), not completed.
plungeai_workflow Manage saved workflows: create / get / update / delete / versioning. Create can file straight into a folder. Syncs live to Studio and the apps.
plungeai_executions Your run history: list / get / output / conversation / delete.
plungeai_followup Ask a follow-up about a finished run — keeps its context. Reports live whether it continued an open session or loaded the run's stored result.
plungeai_continue Continue a paused run: answer its question, or approve its staged action (only after you said yes).
plungeai_chat Persistent chat with the platform assistant; conversations appear in Studio too.
plungeai_build_workflow Generate (or refine) a saved workflow from a plain-language goal, using real registry agents. Reports generating → validating → saving while it works (30–60s).
plungeai_memory Your long-term memory: recall / remember (writes the durable store recall reads) / search and read past runs.
plungeai_templates Ready-made workflow templates: list / get / use (copies into your account).
plungeai_schedule Cron jobs: create / list / pause / resume / run now / run history. Agent and query jobs are saved as visible workflows; runs carry real execution ids; delete is soft (history stays readable).
plungeai_whoami Your identity: user id, tier, key label, rate-limit usage.

There is also one prompt, /plungeai — activates the platform with everything above and an optional free-form request.

Markdown by default, JSON on request. Results come back as Markdown — the format an AI reads best. If your client needs machine-parseable output instead, add format: "json" to a result-bearing tool (plungeai_whoami, the list/discovery tools, plungeai_get_result, plungeai_executions, and the execute/contract tools): the reply's text becomes a JSON document and the same object is attached as structuredContent. Leave format off and nothing changes.


You never get a bare error — you get feedback

When something can't run, the platform doesn't fail — it answers with a status that says exactly what's missing and how to fix it. Your client reads these itself and usually self-corrects; this table is so you know what's happening:

The answer says What it means What to do
ok It ran — this is your result. Nothing.
needs_input A required field is missing or malformed. The answer names the exact field and includes the agent's full form with a worked example. Say "do what it suggests" — your client fills the form and retries.
needs_connection The agent acts as you (Google, Microsoft…) and your account isn't connected. Nothing was run — the check happens first. Connect the service once in Studio → Connectors, then ask again.
needs_api_key A bring-your-own-key agent (wallets, private APIs) has no key saved for you. Save your key once in Studio; every surface can then use it.
needs_approval An action is staged and waiting — always before money is spent. Nothing has executed. Reply "yes"/"approve" to proceed, or anything else to change course.
unavailable That agent isn't in the live catalog (retired, or registered but not deployed — a platform-side gap, not your mistake). The answer suggests live alternatives — pick one.
error A genuine failure, with the real reason (e.g. an upstream API limit) stated in your language. Fix the input and rerun — don't keep polling.

One thing worth knowing about refusals: a refusal is not a run. If the platform stops you before dispatch (missing field, missing connection, unknown agent or model), no execution is created — nothing half-happens, and your history stays clean. This now covers looking up a result or workflow by an id that doesn't exist: you get a needs_input answer that names the id, never a bare "not found".

Two more guarantees (shipped 2026-08-02):

And one convenience: if you send plain prose to a tool whose form has exactly one required field (like a report generator's content), the platform fills that field with your prose and tells you it did so in a warning — visible mapping, never guessing.


Your key and its limits

Your key is your identity on the platform. Everything you can see or run is scoped to the account it belongs to — you see what that account owns, never the whole system.

Tier Per minute Per day
free 30 1,000
pro 100 10,000
enterprise 300 100,000

Only tool calls count against these. Ask "how much of my rate limit have I used?" any time.

Your key may be restricted. Depending on how it was issued it can be limited to:

If something you expect is missing or refused, that's why. Restrictions are set when the key is minted — self-service keys default to unrestricted; for a fenced team key, ask the account owner who issued it.


Gotchas worth knowing

These are real failures, not hypotheticals.

"Category" and "folder" are different things. Your folders (Finance, Personal…) hold your workflows. Categories are the global agent taxonomy, and the finance one is called financials, not finance — asking for category finance returns zero results. Say "agents for financial analysis" and let the semantic search work.

Results need the execution id, not the workflow id. A workflow id identifies the recipe; each run gets its own execution id. If a result lookup comes back empty, ask "show me my recent executions" first and use that id.

Don't ask for "all agents". An unfiltered listing is large (~135 KB). Always filter by search term, category, or kind. Everything the catalog lists is live and callable — and names from outside it (memory, another platform, a guess) are refused, so when in doubt, search first.

Some agents are forms, not chats. Agents like markitdown, weather-agent, or the Gmail agent take specific fields (a URL, coordinates, a message id) rather than a sentence. Your client handles this itself now: it fetches the agent's exact form (the contract — every field, typed, with a worked example) and fills it in before running. If something is still missing, the answer names the exact fields and shows the form — it never comes back as a bare error, so "do what it suggests" is always enough.

Writing workflow YAML by hand? Quote your colons. A value like prompt: DD: memo breaks YAML — write prompt: "DD: memo", or put long text in a block (prompt: |). The top-level workflow: wrapper is optional — bare name: + tasks: at the top level is accepted and wrapped for you. Easier still: describe the goal and let "build me a workflow that…" write the YAML for you. On an llm-agent task, don't set provider: google — the agent accepts gemini / anthropic / … and refuses google; omit provider to use its default model.

"Needs a connected account" means exactly that. Google, Microsoft and similar agents act as you, so they need your account connected once in Studio → Connectors. The platform checks this before running anything: if the connection is missing (or expired), you get told exactly which service to connect and where — no run is started, nothing half-happens. The same goes for bring-your-own-key agents (wallets, private APIs): save your key once in Studio and every surface can use it. Asking your client "what does this agent need?" shows the live status — "connected as you@…" or "not connected yet".

Broad questions about the platform's own structure can be slow. Something like "what are all the categories and how many agents in each?" makes your client fetch agent cards one at a time — that took 28 seconds once. Ask a narrower question.

Background runs return immediately. A long workflow answers with an execution id, not a result. That's normal — ask for the result once it's finished.

A quiet client is not a stalled run. If you see no live status while something takes a while, the run is still fine — some clients simply don't display the progress channel. Two ways to tell: the result arrives normally when the call ends, and the run is visible in Studio's sidebar the whole time it is executing.

Results are already formatted — ask for them "in full". Everything the server returns is finished markdown (tables, headings, links), including a step index for multi-step runs and the whole conversation thread for runs you have followed up on. Chat clients sometimes summarize long answers on their own; adding "show it verbatim, don't summarize" stops that. Studio, the mini app and the CLI render it directly.

A company name works better than a bare ticker fragment. Financial agents resolve entities from your wording ("latest annual revenue for ticker CRCL", "Apple insider trading Form 4"). If a prompt is ambiguous the answer lists what it tried and asks for the company, ticker or CIK — pass one of those and it resolves.

Free-tier data providers run out. Market-data agents on a free plan exhaust their daily quota; you then get an honest "daily call limit reached on the current plan" rather than a broken-looking error. Retry later, upgrade the key, or use an agent that reads the same numbers from filings.

Claude Desktop caps a single tool call at ~4 minutes. For anything longer, ask for it to run "in the background" — you get an execution id immediately, and you can ask for status or the result any time after.


Troubleshooting

Symptom Cause
401 on every call Key wrong, replaced, or not valid from your location
401 only from a new place Key is restricted to specific network locations
429 with a Retry-After Rate limit for your tier — wait, or ask about your usage
Tool not permitted for this key Your key is limited to a subset of tools
Fewer tools than expected Same — a restricted key
A tool your client doesn't know about Reconnect to refresh the tool list
Long run returns an id instead of a result Normal for background work — ask for the result
"This run failed: …" The run genuinely failed and this is the reason — fix the input and rerun, don't keep polling
A background run shows "Interrupted (run did not complete)" It ran too long for background mode and was cut off — rerun it, or run it in the foreground
"…is not status:active" That agent isn't in the live catalog — search for a working alternative

Platform health, no key needed: https://mcp.plungeai.com/health

Need a new key? Self-serve one at Dashboard → One API → Keys (https://dashboard.plungeai.com). Anything else — or a shared team key — goes to the account owner.