Docs › Developers
DevelopersBuild 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.
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
List the named teammates the caller may read.
A single meeting’s canonical record — participants and a memory rollup.
Tools
Decisions recorded across meetings.
deployment_id · since? · until? · meeting_id? · cursor? · limit?
Unresolved questions raised in meetings, with status open | resolved.
deployment_id · since? · until? · meeting_id? · cursor? · limit?
Action items and their assignees, with status open | done.
deployment_id · status? · assignee_entra_id? · since? · until? · cursor? · limit?
Attributed statements made in a meeting. High volume — scope by date or meeting.
deployment_id · since? · until? · meeting_id? · cursor? · limit?
Topics discussed, with the meetings that touched each one.
deployment_id · since? · until? · cursor? · limit?
Semantic + keyword search across every record type.
deployment_id · query · types? · since? · until? · limit?
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
Create an action item from what the meeting decided.
deployment_id · text · assignee_entra_id? · due_date? · meeting_id?
Change status open | done, reassign, or set a due date.
action_item_id · status? · assignee_entra_id? · due_date?
Mark an open question resolved (or reopen it), with an optional note.
open_question_id · status · note?
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"
}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.
First 15 minutes.
Zero to a teammate answering in a test meeting, and your agent reading that meeting’s memory over MCP.
- Sign in to the admin console with an Entra admin account. Confirm your tenant region is US (excluding Illinois) or Canada.
- Create a deployment — name the teammate (say, “Jim”), pick platform, voice, and avatar. This provisions memory scoped to
dep_jim. - Register your agent backend endpoint. Choose Entra or a shared secret; for a secret, paste a Key Vault secret reference, not the secret.
- Stub the backend: return
{ "speech": "Hi, I'm Jim." }and confirm it answers within the 3s budget. - Admit the teammate into a test meeting. Confirm the disclosure banner shows Jim as AI.
- Say “Jim, are you there?” and hear the stubbed reply. The backend contract now works end to end.
- Point the endpoint at your real Copilot Studio, Microsoft Foundry, or custom agent. Use
utterance+retrieved_memoryto compose the reply. - Grant your agent MCP access — create a service-principal grant in the console.
- Connect your MCP client to
https://mcp.meetcrew.ai/v1with an Entra bearer token. Listmeetcrew://deploymentsand confirmdep_jimappears. - Call
getMeeting, thenlistDecisionsscoped todep_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.