Log in

Docs › Developers

Developers

Build on the memory.

MeetCrew has two developer surfaces, and they point in opposite directions. Your backend agent answers when MeetCrew calls it during a meeting. Your own agent reads the meeting memory back from MeetCrew’s MCP server and acts on it. Keep the direction of call straight and the rest is simple.

Agent backend contract

MeetCrew calls you. When the teammate is addressed in a meeting, MeetCrew POSTs to your endpoint and speaks what you return. Front Copilot Studio, Microsoft Foundry Agent Service, an OpenAI-compatible endpoint, or your own webhook.

MCP memory server

You call MeetCrew. Your own agent connects over MCP and reads structured cross-meeting memory — decisions, open questions, action items, statements, topics — then acts on it in your systems.

Auth is Microsoft Entra throughout. Backend credentials are stored as Azure Key Vault secret references, never raw secrets. Every call is scoped to one tenant, enforced server-side. v1  The MCP surface reads memory and acts on the workflow records — action items, decisions, and open questions; it can’t delete, or alter transcripts, statements, provenance, or the audit log. Streaming responses and per-utterance retries are planned.

MCP memory server

Your agent reads — and acts on — the memory.

Endpoint https://mcp.meetcrew.ai/v1 over Streamable HTTP. Authenticate with a Microsoft Entra bearer token for a service principal you grant in the admin console. The tenant is derived from the token — a client can’t reach another tenant’s memory even by guessing IDs. Reads and actions are scoped to a deployment (one named teammate); cross-deployment access requires an admin opt-in grant.

Resources

meetcrew://deployments

List the named teammates the caller may read.

meetcrew://meetings/{meeting_id}

A single meeting’s canonical record — participants and a memory rollup.

Tools

listDecisions

Decisions recorded across meetings.

deployment_id · since? · until? · meeting_id? · cursor? · limit?

listOpenQuestions

Unresolved questions raised in meetings, with status open | resolved.

deployment_id · since? · until? · meeting_id? · cursor? · limit?

listActionItems

Action items and their assignees, with status open | done.

deployment_id · status? · assignee_entra_id? · since? · until? · cursor? · limit?

listStatements

Attributed statements made in a meeting. High volume — scope by date or meeting.

deployment_id · since? · until? · meeting_id? · cursor? · limit?

listTopics

Topics discussed, with the meetings that touched each one.

deployment_id · since? · until? · cursor? · limit?

searchMemory

Semantic + keyword search across every record type.

deployment_id · query · types? · since? · until? · limit?

getMeeting

One meeting with its participants and a per-type memory count.

meeting_id · deployment_id

Every record carries attribution — a Microsoft Entra platform identity, or anonymous — plus created_at and deployment_id. No voiceprints are ever used for attribution.

Actions v1

createActionItem

Create an action item from what the meeting decided.

deployment_id · text · assignee_entra_id? · due_date? · meeting_id?

updateActionItem

Change status open | done, reassign, or set a due date.

action_item_id · status? · assignee_entra_id? · due_date?

resolveOpenQuestion

Mark an open question resolved (or reopen it), with an optional note.

open_question_id · status · note?

updateDecision

Move a decision to confirmed or superseded, with an optional note.

decision_id · status · note?

Actions are confined to workflow state on action items, decisions, and open questions. There is no delete, and no action can alter a transcript, a statement, provenance, or the audit log. Every action is authenticated, tenant- and deployment-scoped, and logged.

Example — search memory

// MCP tools/call
{
  "name": "searchMemory",
  "arguments": {
    "deployment_id": "dep_jim",
    "query": "pricing decision",
    "types": ["decision", "open_question"],
    "since": "2026-06-01",
    "limit": 2
  }
}
{
  "results": [
    {
      "id": "dec_5521", "type": "decision", "score": 0.94,
      "text": "Hold list pricing flat through Q3; revisit at QBR.",
      "decided_at": "2026-06-30T16:20:00Z", "meeting_id": "mtg_4790",
      "attribution": { "kind": "platform_identity", "display_name": "Priya Shah" },
      "deployment_id": "dep_jim"
    },
    {
      "id": "oq_0912", "type": "open_question", "score": 0.71, "status": "open",
      "text": "Do enterprise renewals get the same flat-pricing treatment?",
      "raised_at": "2026-06-30T16:24:00Z", "meeting_id": "mtg_4790",
      "attribution": { "kind": "anonymous" }, "deployment_id": "dep_jim"
    }
  ],
  "next_cursor": null
}

Example — close an action item

// MCP tools/call
{
  "name": "updateActionItem",
  "arguments": {
    "action_item_id": "ai_3315",
    "status": "done"
  }
}
{
  "id": "ai_3315", "type": "action_item", "status": "done",
  "text": "Add pricing revisit to QBR agenda",
  "assignee": { "kind": "platform_identity", "display_name": "Dana Ruiz" },
  "updated_at": "2026-07-07T15:40:00Z",
  "updated_by": { "kind": "service_principal", "display_name": "Renewals Agent" },
  "deployment_id": "dep_jim"
}
Agent backend contract

MeetCrew calls your agent.

Register your endpoint per deployment. When the teammate is addressed, MeetCrew POSTs the meeting and participant context, the addressed utterance, and any relevant retrieved memory. Return the text to speak. Hard timeout 3s; aim under 1.5s — the teammate is speaking in real time. On timeout or error it speaks a brief disclosed fallback, so the meeting never hangs.

Request — MeetCrew → your backend

{
  "delivery_id": "dlv_9f2c",
  "deployment": { "id": "dep_jim", "name": "Jim", "platform": "teams" },
  "meeting": { "id": "mtg_4823", "title": "Q3 Renewals sync",
    "participants": [
      { "entra_object_id": "b1e2", "display_name": "Dana Ruiz", "anonymous": false },
      { "display_name": "Guest 2", "anonymous": true }
    ] },
  "utterance": {
    "text": "Jim, did we ever close the pricing decision from last week?",
    "addressed_to": "dep_jim",
    "speaker": { "entra_object_id": "b1e2", "display_name": "Dana Ruiz" }
  },
  "retrieved_memory": [
    { "type": "decision",
      "text": "Hold list pricing flat through Q3; revisit at QBR.",
      "decided_at": "2026-06-30T16:20:00Z",
      "attribution": { "display_name": "Priya Shah" } }
  ]
}

Response — your backend → MeetCrew

{
  "speech": "Yes — last week you decided to hold list pricing flat through Q3 and revisit at the QBR. Priya owns the follow-up.",
  "actions": [
    { "type": "create_action_item",
      "text": "Add pricing revisit to QBR agenda",
      "assignee_entra_id": "b1e2", "due_date": "2026-09-15" }
  ]
}

Auth: an Entra bearer token (recommended) or an HMAC X-MeetCrew-Signature keyed by a Key Vault secret reference. speech is required and spoken verbatim; actions are advisory — MeetCrew records well-formed actions into memory but never blocks speaking on them, and ignores unknown types.

Quickstart

First 15 minutes.

Zero to a teammate answering in a test meeting, and your agent reading that meeting’s memory over MCP.

  1. Sign in to the admin console with an Entra admin account. Confirm your tenant region is US (excluding Illinois) or Canada.
  2. Create a deployment — name the teammate (say, “Jim”), pick platform, voice, and avatar. This provisions memory scoped to dep_jim.
  3. Register your agent backend endpoint. Choose Entra or a shared secret; for a secret, paste a Key Vault secret reference, not the secret.
  4. Stub the backend: return { "speech": "Hi, I'm Jim." } and confirm it answers within the 3s budget.
  5. Admit the teammate into a test meeting. Confirm the disclosure banner shows Jim as AI.
  6. Say “Jim, are you there?” and hear the stubbed reply. The backend contract now works end to end.
  7. Point the endpoint at your real Copilot Studio, Microsoft Foundry, or custom agent. Use utterance + retrieved_memory to compose the reply.
  8. Grant your agent MCP access — create a service-principal grant in the console.
  9. Connect your MCP client to https://mcp.meetcrew.ai/v1 with an Entra bearer token. List meetcrew://deployments and confirm dep_jim appears.
  10. Call getMeeting, then listDecisions scoped to dep_jim. Your agent is now reading cross-meeting memory. Ship from here.

Ready to wire it up?

Start a pilot and we’ll set up a deployment, connect your backend, and issue an MCP grant with you.