One of the most common War Room jobs: after a call or a message, you want to add context to a contact (a note + tags) and move their opportunity into the correct pipeline and stage. You describe it in plain English — Ambrose resolves the contact, looks up the pipeline/stage IDs by name, writes the context, and moves the card.

What to type

Take contact Maria Lopez. She just finished her ACA enrollment call and is ready to enroll.
Add a note summarizing the call, tag her "aca-ready", and move her opportunity into the
"Enrollment" pipeline at the "Application Started" stage.

What happens

  1. Ambrose routes to Jordan (CRO).
  2. Resolve the contactghl_contact_search by name (or use the contact_id directly if you have it) → Maria's contactId.
  3. Read current stateghl_contact_get + ghl_opportunities_list find her existing opportunity, if any.
  4. Resolve pipeline + stage by nameghl_pipelines_list maps "Enrollment" → pipelineId and "Application Started" → stageId. You name them in plain English; the spoke does the ID lookup so you never paste raw IDs.
  5. Write the contextghl_contact_add_note (the call summary) and ghl_contact_add_tags ("aca-ready").
  6. Move the cardghl_opportunity_move_stage with the resolved pipelineId + stageId. If she has no opportunity yet, Jordan creates one in the target pipeline/stage with ghl_opportunity_create instead.
  7. (Optional) set statusghl_opportunity_set_status (open / won / lost / abandoned).

Approval — nothing moves without you

Stage moves and writes are write actions, so by default they stage for approval right in the War Room with Allow / Deny / Always Allow buttons. Click Approve and the change lands in GHL. If you do this constantly, set those tools to Allow on the Tools page so they run without prompting.

Sample output

Maria Lopez (contact 8aF…21)
  ✓ Note added: "ACA enrollment call 6/11 — ready to enroll, wants a Silver HMO,
                 confirmed income $40k, household of 2."
  ✓ Tag added: aca-ready
  ✓ Opportunity "Maria Lopez — ACA 2026" moved:
       Pipeline:  New Leads → Enrollment
       Stage:     Contacted → Application Started
  Status: open

Move many at once

Move every contact tagged "called-today" who replied that they're ready into the
Enrollment pipeline at "Application Started", add a one-line note on each, and give me a list.

Jordan lists the matching contacts and opportunities, resolves the pipeline + stage once, then loops the note + move per contact. Each write still respects your Allow/Ask setting, and you get a summary table at the end.

Other context moves you can ask for

  • "Move everyone in Application Started who hasn't replied in 7 days back to Follow-up and tag them stale." → ghl_opportunities_list + ghl_opportunity_move_stage + ghl_contact_add_tags.
  • "Mark Maria's opportunity won and add a note with her policy number." → ghl_opportunity_set_status + ghl_contact_add_note.
  • "Create an opportunity for John Park in the Medicare pipeline at New Lead, value $0, and assign it to me." → ghl_opportunity_create.

Tools used

ghl_contact_search, ghl_contact_get, ghl_pipelines_list, ghl_opportunities_list, ghl_opportunity_create, ghl_opportunity_move_stage, ghl_opportunity_set_status, ghl_contact_add_note, ghl_contact_add_tags.

Wiring

GHL integration with a PIT that has Opportunities, Contacts, and Notes scope. The same flow works against a user-installed GHL MCP — call its opportunities_* tools instead.