Skip to content

Ignaru for agents

Everything an agent needs to work in Ignaru quickly and safely. The same text is in the MCP prompt quickstart and in ignaru help agents. Setup for each client is in CLI and MCP.

Ignaru runs a team's outbound growth as loops (the app also says canvases): boards of steps that find leads, enrich and research them, draft outreach, wait for a human Approve, handle replies and book calls. You reach it three ways, all acting as one person with their own key:

  • MCP: https://ignaru.com/api/mcp/mcp (Streamable HTTP), header Authorization: Bearer ig_pk_…
  • CLI: ignaru (add --json to any command for machine output)
  • REST: https://ignaru.com/api/v1 with the same header

First call

MCP context · CLI ignaru context --json · REST GET /api/v1/context

One answer with your team, your role, what your key may do, the credit balance and this week's spend, rate limits and batch sizes, and where work is waiting (drafts to approve, replies not handled, upcoming calls), plus every loop with its id.

Rules that never change

  • Nothing reaches a person outside the team until an Admin presses Approve in the Ignaru app. No key, CLI or MCP call can approve or send. Draft freely; say "it's waiting for your Approve in the app".
  • Keys act as Operator at most: they build loops, add and edit leads, and write drafts.
  • Inviting teammates emails real people. Show the user the list, get a yes, then send with confirm: true (CLI: --yes). Without it nothing is sent.

Saving calls

  • Name things instead of looking up ids. Loops by exact name, leads by email or exact name, steps by title or by kind when only one step has it. get_loop {"loopId":"UK fintech founders"}, connect_steps {"loopId":"…","from":"linkedin","to":"approve"}.
  • get_loop describes a loop in one call: steps in order, pipes, leads by stage, drafts waiting, spend, and why it can't go live.
  • create_loop builds a whole board: {"name":"Warm replies to calls","steps":["replies","booking","approve","call"]}. A step that writes to people (coldemail, followup, linkedin, booking…) feeds an approve step: its drafts wait there for an Admin.
  • add_leads takes 200 at a time and merges by email (the answer counts added and merged). dryRun: true previews.
  • enrich_leads takes 25 leads by id, email or name; dryRun: true gives the credit estimate first, part by part, and a real run needs maxCredits, the most it may spend.
  • search_leads answers with total, the team's count per stage (byStage) and nextCursor for the next page.
  • Every write takes an optional idempotencyKey (8 to 128 of A-Z a-z 0-9 _ . : -): retrying with the same key returns the first answer instead of writing twice.

When something fails

Errors carry a code, a message, a Fix (what to call next) and, where it helps, Valid (the values that would have worked: step ids, stages, loop names). Over REST they are JSON: {"ok":false,"code","message","hint","valid"}. 429 means wait the seconds it says. server_error is Ignaru's fault, not yours: retry once, then tell the user.

Common jobs

JobMCPCLI
Where am Icontextignaru context
Describe a loopget_loopignaru loop "<name>"
Build a loopcreate_loop with stepsignaru new-loop "<name>" --steps signals,enrich,coldemail,approve
Join, unjoin, remove stepsconnect_steps, disconnect_steps, remove_stepsignaru connect, ignaru disconnect, ignaru remove-steps
Rename, pause, set liveupdate_loop, set_loop_statusignaru rename, ignaru pause, ignaru resume, ignaru set-status
Spaces (Outbound, Inbound, your own) and which loops are in eachlist_spaces, create_space, move_loopignaru call list_spaces, ignaru call create_space '{"name":"Partners","parent":"outbound"}', ignaru call move_loop '{"loopId":"<loop>","space":"Partners"}'
What the team knows: the company Brain, the outbound brain, the inbound brainget_brain with brain, write_brain with brainignaru call get_brain '{"brain":"inbound"}'
Who the team sells to (profile, ICP)get_profile, update_profileignaru profile, ignaru profile set --roles "Founder,CEO"
A loop's goalupdate_loop with goal, get_profile with loopIdignaru goal "<loop>" "<goal>"
Ready to go live? Budgetgo_live_check, set_loop_budgetignaru call go_live_check, ignaru call set_loop_budget
Add leadsadd_leadsignaru add-leads --file leads.json (or "Name <email>" ...)
Change a lead, or move it onto a loopupdate_leadignaru lead "<email or name>" --stage call, ignaru lead "<lead>" --loop "<loop>"
Search the lead databasesearch_lead_databaseignaru leads search "<ask>" --country GB --round Seed --raised-within 90
Replieslist_repliesignaru replies
Draft a messagedraft_messageignaru draft "<lead>" [--body …]
What's waiting for approvallist_drafts_waitingignaru drafts
Credits and spendget_creditsignaru credits --week
What happeneddigest, stuck_steps, todayignaru digest --week, ignaru stuck, ignaru today
Step kinds and priceslist_step_kindsignaru steps
Anything elseask_iggy (costs credits)ignaru ask "…"
Any MCP tool from the CLIignaru tools, ignaru call <tool> '<json>'

To find companies and the people at them, ask Iggy (ask_iggy, spends credits). Adding anyone Iggy found needs a person's yes in the Ignaru app, in Iggy's chat or on the Leads page (Find people at companies). Give add_leads the people you already have, or set up a Find step (signals, list) on a loop.