Skip to content

Developers

Work with your Agents from Claude, ChatGPT and your own code.

AgentWaves speaks the Model Context Protocol. Connect an AI app once and it can look up calls, contacts and tasks, see what your Agents are doing, and with your permission, have an Agent make a call.

Setup guides

Connected in a couple of minutes

Apps that support sign-in connect with your AgentWaves account. The rest use an API key you create in AgentWaves. Either way the app works as you, within your role.

ClaudeSign in
  1. In Claude (web, desktop or mobile), open Settings, then Connectors, and choose Add custom connector. Team and Enterprise: an admin adds it under Organization settings, Connectors.
  2. Name it AgentWaves and paste the connector URL. Leave the advanced OAuth fields empty.
  3. Click Add, then Connect. The AgentWaves sign-in opens: pick the workspace and what Claude may do, then Allow.
  4. In a new chat, turn on AgentWaves in the tools menu and ask: Where am I with AgentWaves?
The app's own guide
ChatGPTSign in
  1. In ChatGPT, open Settings, then Apps and Connectors, then Advanced settings, and turn on Developer mode (Plus, Pro, Business and Enterprise plans).
  2. Choose Create, name it AgentWaves, paste the connector URL and keep OAuth as the authentication.
  3. Save, then Connect: approve the AgentWaves sign-in with the workspace and access you want.
  4. In a chat, choose AgentWaves from the tools and ask what you need.
The app's own guide
Claude CodeSign in
  1. Run this in your terminal:
  2. Then type /mcp in Claude Code and choose AgentWaves to sign in. To use an API key instead, add --header "Authorization: Bearer YOUR_AGENTWAVES_KEY".
claude mcp add --transport http agentwaves https://agentwaves.net/mcp
The app's own guide
CursorAPI key
  1. In AgentWaves, open Developers and create an API key.
  2. Open Cursor Settings, then MCP, then Add new MCP server (or edit ~/.cursor/mcp.json) and add:
{
  "mcpServers": {
    "agentwaves": {
      "url": "https://agentwaves.net/mcp",
      "headers": { "Authorization": "Bearer YOUR_AGENTWAVES_KEY" }
    }
  }
}
VS Code (Copilot)API key
  1. In AgentWaves, open Developers and create an API key.
  2. Add this to .vscode/mcp.json in your project (or your user MCP settings), then start the server from the MCP list:
{
  "servers": {
    "agentwaves": {
      "type": "http",
      "url": "https://agentwaves.net/mcp",
      "headers": { "Authorization": "Bearer YOUR_AGENTWAVES_KEY" }
    }
  }
}
WindsurfAPI key
  1. In AgentWaves, open Developers and create an API key.
  2. Edit ~/.codeium/windsurf/mcp_config.json and add:
{
  "mcpServers": {
    "agentwaves": {
      "serverUrl": "https://agentwaves.net/mcp",
      "headers": { "Authorization": "Bearer YOUR_AGENTWAVES_KEY" }
    }
  }
}
Gemini CLIAPI key
  1. In AgentWaves, open Developers and create an API key.
  2. Edit ~/.gemini/settings.json and add:
{
  "mcpServers": {
    "agentwaves": {
      "httpUrl": "https://agentwaves.net/mcp",
      "headers": { "Authorization": "Bearer YOUR_AGENTWAVES_KEY" }
    }
  }
}
Any MCP clientAPI key
  1. Transport: Streamable HTTP at the connector URL.
  2. Authentication: send an API key as Authorization: Bearer YOUR_AGENTWAVES_KEY, or use OAuth 2.1 sign-in (discovery at /.well-known/oauth-protected-resource, PKCE S256, dynamic client registration).
  3. Start with the get_started tool.

Tool reference

What an AI app can do in AgentWaves

Read tools work on every connection. Act tools need read and act access, and each one checks the person's own role. Every action is written to the audit log.

Open the JSON schema

Read

Look things up. Nothing changes.

  • get_started

    Start here. The workspace, its plan, Agents, phone numbers and the last 7 days of calls, leads and tasks, plus what the connection is allowed to do.

  • list_agents

    Every Agent with its state (on, off or not published), what it focuses on, language, phone numbers, WhatsApp number and call count.

  • list_calls

    Recent phone calls, newest first, with summary and outcome. Filter by Agent name, direction, a phone number (any part) and how many days back.

  • get_call

    One call in full: details, summary, extracted details (name, email, company, follow-up) and the transcript.

  • find_contacts

    Search contacts and leads by name, phone, company or tag (use * for the newest), with what the Agents remember about each.

  • get_contact

    One contact: details, consent, what the Agents remember, open tasks and recent calls.

  • list_tasks

    Follow-up tasks from email, WhatsApp, calls and orders. Show open (default), done or all.

  • get_task

    One task with all its notes, the email it came from and its contact.

  • order_progress

    Where a call from order_call is now: waiting for approval, scheduled, ringing, talking or ended, with the time of each step, what the Agent did during the call and, once it ends, the outcome and summary. Give the task_id (or approval_id) that order_call returned.

  • list_campaigns

    Outbound campaigns with their status, Agent and progress.

  • search_knowledge

    Search what an Agent knows about the business (website, documents, notes).

Act

Changes something or places a call. Your AI app should confirm with you first.

  • order_call

    Have an Agent call a number and do something (ask for a price, confirm a delivery, remind someone), now or at a time. It becomes an order and a task, and the outcome is written on the task. Calls to other people follow calling hours; the owner's own saved phone rings at any hour. Confirm the number and the brief with the user first.

  • add_task_note

    Write a note on a task (what happened, what is next). An open task moves to in progress.

  • set_task_status

    Mark a task open, in progress, done or dismissed.

  • update_contact

    Change a contact's name, email, company or position, or put them on or take them off the do-not-call list.

  • set_agent_on

    Turn an Agent off (it stops answering calls and messages) or back on.

REST API

The same power from your own code

Plain HTTPS and JSON, built on the same tools as the MCP server, so access rules and the audit trail are identical. Send an API key from AgentWaves as a bearer token.

  • Answers arrive in a data field. Errors arrive in an error field with a code and a message, together with the usual HTTP status.
  • A read key sees the read endpoints only. Act endpoints also check the person's role.
  • Up to 300 requests a minute per key. Every change lands in the workspace audit log.
Download the OpenAPI spec

Example

curl "https://agentwaves.net/api/v1/calls?days=7" \
  -H "Authorization: Bearer $AGENTWAVES_KEY"

curl -X POST https://agentwaves.net/api/v1/call-orders \
  -H "Authorization: Bearer $AGENTWAVES_KEY" \
  -H "Content-Type: application/json" \
  -d '{"agent": "Layla", "phone": "+14155550123", "task": "Confirm the appointment tomorrow at 10:00"}'

Workspace

  • GET/workspaceThe workspace, its plan, Agents, numbers, the last 7 days, and what this key may doRead

Agents

  • GET/agentsEvery Agent with its state, focus, language and numbersRead
  • PATCH/agents/{agent}Turn an Agent off or back onAct
  • GET/agents/{agent}/knowledgeSearch what an Agent knows about the businessRead

Calls

  • GET/callsRecent calls, newest first, with summary and outcomeRead
  • GET/calls/{call_id}One call with summary, extracted details and transcriptRead
  • POST/call-ordersHave an Agent call a number now or at a set timeAct
  • GET/call-orders/statusWhere an ordered call is now, and its outcome once it endsRead

Contacts

  • GET/contactsSearch contacts by name, phone, company or tagRead
  • GET/contacts/{contact_id}One contact with consent, memory, open tasks and recent callsRead
  • PATCH/contacts/{contact_id}Change a contact's details or do-not-call statusAct

Tasks

  • GET/tasksFollow-up tasks from calls, WhatsApp, email and ordersRead
  • GET/tasks/{task_id}One task with its notes, source and contactRead
  • PATCH/tasks/{task_id}Mark a task open, in progress, done or dismissedAct
  • POST/tasks/{task_id}/notesWrite a note on a taskAct

Campaigns

  • GET/campaignsOutbound campaigns with status, Agent and progressRead

Webhooks

Know the moment a call ends

AgentWaves POSTs signed JSON to your system when calls, tasks and orders change, so your CRM, sheets or back office stay in step without polling. Signatures follow the Standard Webhooks spec, so ready-made libraries verify them.

  • Answer with any 2xx within 10 seconds. Anything else is retried after 1 minute, 5 minutes, 30 minutes, 2, 5, 10 and 14 hours.
  • The same event can arrive twice: use webhook-id to skip repeats. Order is not guaranteed, so use the timestamp.
  • Public https addresses only. An endpoint that keeps failing for three days is turned off, and you are told.
  • Add an endpoint in AgentWaves under Developers, choose its events, and copy the signing secret it shows once.

Events

  • call.startedA call starts ringing, inbound or outbound.
  • call.endedA call ends, with its duration and outcome.
  • call.summarizedThe call summary and the details the Agent picked up are ready.
  • task.createdA follow-up task is created from a call, WhatsApp, email or an order.
  • task.updatedA task changes: status, assignee, notes or due date.
  • order.createdSomeone orders an Agent to call or message a person.
  • order.updatedAn order moves on: scheduled, calling, or a new note from the Agent.
  • order.completedAn order is done or dismissed, with the Agent's last note.

What arrives

POST /your/endpoint
webhook-id: evt_3f1c0b9a7d2e4c5b6a7f8e9d
webhook-timestamp: 1792494954
webhook-signature: v1,K5oZfzN95Z9UVu1EsfQmfVNQhnkZ2pj9o9NDN/H/pI4=

{
  "id": "evt_3f1c0b9a7d2e4c5b6a7f8e9d",
  "type": "call.ended",
  "timestamp": "2026-10-20T09:15:54.000Z",
  "workspaceId": "cmw1org00001",
  "data": {
    "id": "cmw1call0001",
    "direction": "inbound",
    "status": "completed",
    "from": "+14155550123",
    "to": "+14155550199",
    "agent": {
      "id": "cmw1agent001",
      "name": "Layla"
    },
    "contact": {
      "id": "cmw1contact1",
      "name": "Daniel Reyes"
    },
    "campaignId": null,
    "startedAt": "2026-10-20T09:14:02.000Z",
    "answeredAt": "2026-10-20T09:14:03.000Z",
    "endedAt": "2026-10-20T09:15:54.000Z",
    "durationSeconds": 112,
    "outcome": "appointment_booked",
    "endReason": "caller_hung_up",
    "link": "https://agentwaves.net/app/calls/cmw1call0001"
  }
}

Verify the signature

import crypto from "node:crypto";

// body: the raw request body, as text, before any JSON parsing.
export function verifyAgentWaves(secret, headers, body) {
  const id = headers["webhook-id"];
  const ts = headers["webhook-timestamp"];
  if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;
  const key = Buffer.from(secret.replace("whsec_", ""), "base64");
  const expected = "v1," + crypto.createHmac("sha256", key).update(`${id}.${ts}.${body}`).digest("base64");
  return headers["webhook-signature"].split(" ").some(
    (sig) => sig.length === expected.length && crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected)),
  );
}

Agent skill

A skill that teaches your AI app the job

A short SKILL.md file your AI app loads when you ask about calls, contacts, tasks or your Agents. It knows which tool answers which question and the rules that keep customers safe.

  1. 01Starts every session with get_started, so it never guesses names
  2. 02Reads back the number, the Agent and the goal before ordering a call
  3. 03Never calls a contact on the do-not-call list
  4. 04Follows an ordered call to the end and notes what is still open

Access and safety

Your data, on your terms

  • OAuth 2.1 sign-in

    PKCE and dynamic client registration. The person picks the workspace and the access, and can revoke it any time.

  • Read only, or read and act

    Choose per app or per API key. Act tools stay hidden from read-only connections.

  • Your role still applies

    An app can never do more than the person who connected it.

  • Every action audited

    Calls ordered, tasks changed and contacts edited are logged under the person, marked as coming from an AI app.

Put your Agents inside the AI apps you already use.

Choose a plan, meet your Chief of Staff, then connect Claude or ChatGPT in a minute.