Tutorial

TOOLS_REFERENCE

MCP Tools Reference

The MCP Server exposes 10 high-level tools for Claude Desktop and other MCP clients, which internally use 28 primitive functions for data access and processing.

Table of Contents


MCP Tools

These are the tools available when connecting via MCP (Claude Desktop, HTTP/SSE transport).

natural_query (Recommended)

The recommended entry point. Routes your question to the optimal handler automatically.

"Show my rooms"
"Summarize my last meeting"
"Create a meeting for tomorrow at 2pm"
"Who do I collaborate with most?"

Parameters:

Parameter Type Required Description
query string Yes Natural language question or command
showReasoning boolean No Include step-by-step reasoning for complex queries

query_data

Query meeting data using natural language. Translates your question into database queries.

Parameters:

Parameter Type Required Description
question string Yes Natural language question about your data

Examples:

  • "Show my meetings this week"
  • "How many rooms have I used?"
  • "List recordings from January"

agent_query

AI agent for complex queries requiring multi-step reasoning.

Parameters:

Parameter Type Required Description
query string Yes Complex question requiring multiple operations
showReasoning boolean No Include step-by-step reasoning
forceAgent boolean No Always use agent even for simple queries

Examples:

  • "Find meetings with John and summarize what we discussed"
  • "Schedule a follow-up with everyone from yesterday's standup"

summarize_meeting

Get an AI-powered summary of a meeting.

Parameters:

Parameter Type Required Description
roomName string No Room name to summarize
participant string No Find meeting with this person
meetingOffset number No 0=most recent, 1=second to last, etc.
summaryType string No meeting-summary, action-items, key-decisions, full

query_meeting_context

Analyze meeting mood, sentiment, and engagement.

Parameters:

Parameter Type Required Description
query string Yes Question about mood/sentiment
roomName string No Room to analyze

search_content

Search through transcriptions, chat messages, and documents using semantic similarity.

Parameters:

Parameter Type Required Description
query string Yes What to search for
contentTypes array No Types: transcriptions, chats, documents
limit number No Max results (default: 10)
roomId string No Limit to specific room

start_meeting

Start an instant meeting or create a persistent room.

Parameters:

Parameter Type Required Description
roomName string Yes Name for the meeting room
createOnly boolean No Create room without starting
participants array No Emails to invite
copyLinkToClipboard boolean No Copy room link to clipboard

create_room

Create a new persistent room.

Parameters:

Parameter Type Required Description
roomName string Yes Name for the room
enableOffline boolean No Enable transcription and AI
usePassword boolean No Require password
useWaitingRoom boolean No Enable waiting room

create_schedule

Create a new scheduled meeting.

Parameters:

Parameter Type Required Description
roomName string Yes Name for the meeting room
startDateTime string Yes Start date/time in ISO format
endDateTime string No End date/time
duration number No Duration in minutes
description string No Meeting description
participants array No Emails to invite
timezone string No Timezone (default: UTC)

cancel_schedule

Cancel a scheduled meeting.

Parameters:

Parameter Type Required Description
scheduleId string Yes ID of the schedule to cancel
reason string No Reason for cancellation

Primitive Functions

The 28 primitive functions are internal building blocks used by the MCP tools. They are organized into five categories.

Category Count Purpose
Data 9 Query meeting data, recordings, files
Search 1 Semantic content search
Graph 8 Network and relationship analysis
AI 4 Text processing and AI assistance
Action 6 Create meetings, schedules, send invites

Common Parameters

All primitives accept these parameters internally:

Parameter Type Required Description
apiKey string Yes Organization/tenant ID
userId string Yes User identifier
_userContext Object Yes Security context from buildSecurityContext()

Data Query Tools

query_rooms

Query meeting room sessions with filtering and pagination.

Parameters:

Parameter Type Required Default Description
limit number No 20 Max results to return
offset number No 0 Skip first N results
startDate string No - Filter by start date (ISO 8601)
endDate string No - Filter by end date (ISO 8601)
roomName string No - Filter by room name pattern
sortBy string No 'createdAt' Sort field
sortOrder string No 'desc' Sort direction

Response:

{
  success: true,
  rooms: [
    {
      _id: 'room_id',
      name: 'Weekly Standup',
      owner: 'user@example.com',
      participants: ['user1@example.com', 'user2@example.com'],
      startTime: '2026-01-10T10:00:00Z',
      endTime: '2026-01-10T10:30:00Z',
      hasRecording: true,
      hasTranscription: true
    }
  ],
  total: 42,
  page: 1,
  limit: 20
}

Example:

const result = await toolHandlers.query_rooms({
  limit: 10,
  startDate: '2026-01-01',
  endDate: '2026-01-11',
  apiKey: userContext.apiKey,
  userId: userContext.userId,
  _userContext: securityContext
});

query_schedules

Query scheduled meetings.

Parameters:

Parameter Type Required Default Description
limit number No 20 Max results
offset number No 0 Skip results
startDate string No - Filter by scheduled start
endDate string No - Filter by scheduled end
status string No - Filter by status (pending, completed, cancelled)
includeAttendees boolean No true Include attendee details

Response:

{
  success: true,
  schedules: [
    {
      _id: 'schedule_id',
      title: 'Project Review',
      description: 'Quarterly review meeting',
      scheduledStart: '2026-01-15T14:00:00Z',
      scheduledEnd: '2026-01-15T15:00:00Z',
      organizer: 'user@example.com',
      attendees: ['attendee1@example.com', 'attendee2@example.com'],
      roomName: 'project-review-q1',
      status: 'pending',
      recurring: false
    }
  ],
  total: 15
}

query_stored_rooms

Query saved/persistent rooms.

Parameters:

Parameter Type Required Default Description
limit number No 20 Max results
offset number No 0 Skip results
name string No - Filter by room name
includeSettings boolean No false Include room settings

Response:

{
  success: true,
  storedRooms: [
    {
      _id: 'stored_room_id',
      name: 'team-standup',
      displayName: 'Team Standup',
      owner: 'user@example.com',
      createdAt: '2025-06-01T00:00:00Z',
      lastUsed: '2026-01-10T10:00:00Z',
      settings: {
        autoRecord: true,
        autoTranscribe: true,
        maxParticipants: 20
      }
    }
  ],
  total: 5
}

query_files

Query uploaded files and documents.

Parameters:

Parameter Type Required Default Description
limit number No 20 Max results
offset number No 0 Skip results
roomSession string No - Filter by room session
fileType string No - Filter by MIME type
filename string No - Filter by filename pattern

Response:

{
  success: true,
  files: [
    {
      _id: 'file_id',
      filename: 'presentation.pdf',
      mimeType: 'application/pdf',
      size: 2048576,
      uploadedBy: 'user@example.com',
      uploadedAt: '2026-01-10T09:30:00Z',
      roomSession: 'room_123',
      url: 'https://s3.../file.pdf'
    }
  ],
  total: 25
}

query_recordings

Query meeting recordings.

Parameters:

Parameter Type Required Default Description
limit number No 20 Max results
offset number No 0 Skip results
roomSession string No - Filter by room session
hasTranscription boolean No - Filter by transcription availability
startDate string No - Filter by recording date
endDate string No - Filter by recording date

Response:

{
  success: true,
  recordings: [
    {
      _id: 'recording_id',
      roomSession: 'room_123',
      roomName: 'Weekly Standup',
      duration: 1800,
      fileSize: 104857600,
      hasTranscription: true,
      transcriptionId: 'trans_456',
      createdAt: '2026-01-10T10:30:00Z',
      url: 'https://s3.../recording.mp4'
    }
  ],
  total: 100
}

get_transcript

Get transcript metadata and content for a recording.

Parameters:

Parameter Type Required Default Description
recordingId string Yes* - Recording ID
transcriptionId string Yes* - Transcription ID
includeContent boolean No false Include full transcript text
includeSpeakers boolean No true Include speaker information

*Either recordingId or transcriptionId is required.

Response:

{
  success: true,
  transcript: {
    _id: 'trans_456',
    recordingId: 'recording_id',
    roomName: 'Weekly Standup',
    duration: 1800,
    speakers: ['user1@example.com', 'user2@example.com'],
    wordCount: 5432,
    createdAt: '2026-01-10T10:30:00Z',
    content: [  // if includeContent: true
      {
        speaker: 'user1@example.com',
        text: 'Good morning everyone...',
        timestamp: 0
      }
    ]
  },
  actionType: 'VIEW_TRANSCRIPT'
}

open_file

Open a file for viewing.

Parameters:

Parameter Type Required Default Description
fileId string Yes - File ID to open

Response:

{
  success: true,
  file: {
    _id: 'file_id',
    filename: 'presentation.pdf',
    mimeType: 'application/pdf',
    url: 'https://s3.../signed-url',
    expiresAt: '2026-01-11T10:00:00Z'
  },
  actionType: 'VIEW_FILE'
}

summarize_transcript

Generate a summary of a meeting transcript.

Parameters:

Parameter Type Required Default Description
recordingId string Yes* - Recording ID
transcriptionId string Yes* - Transcription ID
summaryType string No 'comprehensive' Type of summary
maxLength number No 500 Max summary length

*Either recordingId or transcriptionId is required.

Summary Types:

  • comprehensive - Full meeting summary with key points
  • brief - Short executive summary
  • action_items - Focus on action items and decisions
  • topics - Topic-based summary

Response:

{
  success: true,
  summary: {
    type: 'comprehensive',
    content: '## Meeting Summary\n\nThe team discussed...',
    keyPoints: [
      'Agreed on Q1 priorities',
      'Budget approved for new hire'
    ],
    actionItems: [
      { task: 'Send proposal', assignee: 'John', deadline: '2026-01-15' }
    ],
    participants: ['user1@example.com', 'user2@example.com'],
    duration: 1800
  }
}

query_meeting_context

Query meeting sentiment, mood, and engagement data.

Parameters:

Parameter Type Required Default Description
roomSession string Yes - Room session ID
includeTimeline boolean No false Include sentiment timeline

Response:

{
  success: true,
  context: {
    roomSession: 'room_123',
    overallSentiment: 'positive',
    sentimentScore: 0.72,
    engagementLevel: 'high',
    participationBalance: 0.85,
    keyMoments: [
      { timestamp: 300, type: 'decision', description: 'Budget approved' },
      { timestamp: 900, type: 'action_item', description: 'Follow-up scheduled' }
    ],
    timeline: [  // if includeTimeline: true
      { timestamp: 0, sentiment: 0.65 },
      { timestamp: 60, sentiment: 0.70 }
    ]
  }
}

Search Tools

search_content

Semantic search across all content (transcripts, files, messages).

Parameters:

Parameter Type Required Default Description
query string Yes - Search query text
limit number No 10 Max results
contentTypes array No all Filter content types
startDate string No - Filter by date range
endDate string No - Filter by date range
threshold number No 0.5 Relevance threshold (0-1)

Content Types:

  • transcript - Meeting transcripts
  • file - Uploaded files
  • message - Chat messages

Response:

{
  success: true,
  results: [
    {
      type: 'transcript',
      id: 'trans_456',
      roomName: 'Project Review',
      snippet: '...discussed the budget allocation for Q1...',
      relevance: 0.92,
      timestamp: '2026-01-10T10:15:00Z',
      speaker: 'user@example.com'
    },
    {
      type: 'file',
      id: 'file_789',
      filename: 'Q1-Budget.xlsx',
      snippet: '...quarterly budget projections...',
      relevance: 0.85
    }
  ],
  total: 15,
  query: 'budget allocation'
}

Example:

const result = await toolHandlers.search_content({
  query: 'project timeline discussion',
  limit: 5,
  contentTypes: ['transcript'],
  startDate: '2026-01-01',
  apiKey: userContext.apiKey,
  userId: userContext.userId,
  _userContext: securityContext
});

Graph Analysis Tools

find_collaborators

Find people the user collaborates with most.

Parameters:

Parameter Type Required Default Description
targetUser string No current user User to analyze
limit number No 10 Max collaborators
minMeetings number No 1 Min meetings together
startDate string No - Filter by date range
endDate string No - Filter by date range

Response:

{
  success: true,
  collaborators: [
    {
      email: 'colleague@example.com',
      name: 'John Smith',
      meetingCount: 45,
      totalDuration: 81000,
      lastMeeting: '2026-01-10T10:00:00Z',
      commonTopics: ['project-alpha', 'budget', 'planning']
    }
  ],
  total: 32
}

get_person_meetings

Get all meetings involving a specific person.

Parameters:

Parameter Type Required Default Description
personEmail string Yes - Person's email
limit number No 20 Max results
startDate string No - Filter by date
endDate string No - Filter by date

Response:

{
  success: true,
  person: {
    email: 'colleague@example.com',
    name: 'John Smith'
  },
  meetings: [
    {
      roomName: 'Weekly Standup',
      date: '2026-01-10T10:00:00Z',
      duration: 1800,
      participants: ['user@example.com', 'colleague@example.com'],
      hasRecording: true
    }
  ],
  total: 45
}

get_graph_stats

Get network statistics for the user.

Parameters:

Parameter Type Required Default Description
startDate string No - Filter by date range
endDate string No - Filter by date range

Response:

{
  success: true,
  stats: {
    totalCollaborators: 32,
    totalMeetings: 271,
    totalDuration: 489600,
    avgMeetingDuration: 1806,
    topCollaborators: [
      { email: 'john@example.com', meetings: 45 }
    ],
    topTopics: [
      { topic: 'project-alpha', mentions: 156 }
    ],
    meetingsByMonth: [
      { month: '2026-01', count: 42 }
    ]
  }
}

find_related_topics

Find topics related to a given topic.

Parameters:

Parameter Type Required Default Description
topic string Yes - Topic to find relations for
limit number No 10 Max related topics
minRelevance number No 0.3 Min relevance score

Response:

{
  success: true,
  topic: 'project-alpha',
  relatedTopics: [
    {
      topic: 'budget-planning',
      relevance: 0.85,
      coOccurrences: 23,
      lastMentioned: '2026-01-10T10:00:00Z'
    }
  ]
}

get_meeting_topics

Get topics discussed in a meeting.

Parameters:

Parameter Type Required Default Description
roomSession string Yes - Room session ID
limit number No 20 Max topics

Response:

{
  success: true,
  roomSession: 'room_123',
  topics: [
    {
      topic: 'quarterly-review',
      confidence: 0.95,
      mentions: 12,
      speakers: ['user1@example.com', 'user2@example.com']
    }
  ]
}

find_similar_topics

Find semantically similar topics.

Parameters:

Parameter Type Required Default Description
topic string Yes - Topic to find similar
limit number No 10 Max similar topics
threshold number No 0.5 Similarity threshold

Response:

{
  success: true,
  topic: 'budget planning',
  similarTopics: [
    {
      topic: 'financial forecasting',
      similarity: 0.89
    },
    {
      topic: 'resource allocation',
      similarity: 0.76
    }
  ]
}

get_network_stats_graph

Get network statistics with graph visualization data.

Parameters:

Parameter Type Required Default Description
startDate string No - Filter by date range
endDate string No - Filter by date range
maxNodes number No 50 Max graph nodes

Response:

{
  success: true,
  stats: { /* same as get_graph_stats */ },
  graph: {
    nodes: [
      { id: 'user@example.com', label: 'You', type: 'user' },
      { id: 'john@example.com', label: 'John', type: 'collaborator' }
    ],
    edges: [
      { source: 'user@example.com', target: 'john@example.com', weight: 45 }
    ]
  },
  actionType: 'VIEW_GRAPH'
}

get_collaborator_graph

Get graph data focused on collaborator relationships.

Parameters:

Parameter Type Required Default Description
centerUser string No current user Center of graph
depth number No 2 Relationship depth
maxNodes number No 30 Max graph nodes

Response:

{
  success: true,
  graph: {
    center: 'user@example.com',
    nodes: [
      { id: 'user@example.com', type: 'center', meetings: 271 },
      { id: 'john@example.com', type: 'direct', meetings: 45 },
      { id: 'sarah@example.com', type: 'indirect', meetings: 12 }
    ],
    edges: [
      { source: 'user@example.com', target: 'john@example.com', meetings: 45 },
      { source: 'john@example.com', target: 'sarah@example.com', meetings: 12 }
    ]
  },
  actionType: 'VIEW_GRAPH'
}

AI Helper Tools

summarize_text

Summarize provided text using AI.

Parameters:

Parameter Type Required Default Description
text string Yes - Text to summarize
maxLength number No 200 Max summary length
style string No 'concise' Summary style

Styles:

  • concise - Brief, to the point
  • detailed - Comprehensive summary
  • bullet_points - Bullet point format

Response:

{
  success: true,
  summary: 'The meeting covered three main topics...',
  originalLength: 5432,
  summaryLength: 187
}

extract_info

Extract structured information from text.

Parameters:

Parameter Type Required Default Description
text string Yes - Text to extract from
extractionType string Yes - Type of extraction
schema Object No - Custom extraction schema

Extraction Types:

  • action_items - Tasks and action items
  • decisions - Decisions made
  • questions - Questions raised
  • dates - Dates and deadlines
  • people - People mentioned
  • custom - Use custom schema

Response:

{
  success: true,
  extractionType: 'action_items',
  extracted: [
    {
      task: 'Send proposal to client',
      assignee: 'John',
      deadline: '2026-01-15',
      priority: 'high'
    }
  ]
}

answer_question

Answer a question about provided text.

Parameters:

Parameter Type Required Default Description
text string Yes - Context text
question string Yes - Question to answer

Response:

{
  success: true,
  question: 'What was decided about the budget?',
  answer: 'The team approved a $50,000 budget for Q1...',
  confidence: 0.92,
  relevantExcerpts: [
    '...after discussion, we agreed to allocate $50,000...'
  ]
}

generate_response

Generate a formatted response from data.

Parameters:

Parameter Type Required Default Description
data Object Yes - Data to format
format string No 'markdown' Output format
template string No - Response template

Formats:

  • markdown - Markdown formatted
  • plain - Plain text
  • html - HTML formatted

Response:

{
  success: true,
  response: '## Meeting Summary\n\n- **Date:** Jan 10, 2026\n...',
  format: 'markdown'
}

Action Tools

start_meeting

Start an instant meeting or join existing room.

Parameters:

Parameter Type Required Default Description
roomName string No auto-generated Room name
displayName string No - Display name for room
autoRecord boolean No false Start recording
autoTranscribe boolean No false Enable transcription

Response:

{
  success: true,
  room: {
    name: 'instant-meeting-abc123',
    displayName: 'Quick Meeting',
    joinUrl: 'https://app.example.com/room/instant-meeting-abc123'
  },
  actionType: 'NAVIGATE_TO_ROOM'
}

create_room

Create a persistent room.

Parameters:

Parameter Type Required Default Description
name string Yes - Room name (URL-safe)
displayName string No - Display name
settings Object No - Room settings

Settings:

{
  autoRecord: boolean,
  autoTranscribe: boolean,
  maxParticipants: number,
  waitingRoom: boolean,
  allowGuests: boolean
}

Response:

{
  success: true,
  room: {
    _id: 'stored_room_id',
    name: 'team-standup',
    displayName: 'Team Standup',
    settings: { ... },
    joinUrl: 'https://app.example.com/room/team-standup'
  },
  actionType: 'CREATE_ROOM'
}

create_schedule

Schedule a future meeting.

Parameters:

Parameter Type Required Default Description
title string Yes - Meeting title
description string No - Meeting description
scheduledStart string Yes - Start time (ISO 8601)
scheduledEnd string Yes - End time (ISO 8601)
attendees array No [] Attendee emails
roomName string No auto-generated Room name
sendInvites boolean No true Send email invitations
recurring Object No - Recurrence settings

Recurring Settings:

{
  frequency: 'daily' | 'weekly' | 'monthly',
  interval: number,
  daysOfWeek: number[],  // 0=Sunday
  endDate: string,
  count: number
}

Response:

{
  success: true,
  schedule: {
    _id: 'schedule_id',
    title: 'Project Review',
    scheduledStart: '2026-01-15T14:00:00Z',
    scheduledEnd: '2026-01-15T15:00:00Z',
    roomName: 'project-review-abc123',
    attendees: ['attendee@example.com'],
    joinUrl: 'https://app.example.com/room/project-review-abc123'
  },
  actionType: 'SCHEDULE_CREATED'
}

cancel_schedule

Cancel a scheduled meeting.

Parameters:

Parameter Type Required Default Description
scheduleId string Yes - Schedule ID
reason string No - Cancellation reason
notifyAttendees boolean No true Send cancellation emails

Response:

{
  success: true,
  schedule: {
    _id: 'schedule_id',
    title: 'Project Review',
    status: 'cancelled',
    cancelledAt: '2026-01-11T10:00:00Z',
    cancelledBy: 'user@example.com',
    reason: 'Rescheduling to next week'
  },
  actionType: 'SCHEDULE_CANCELLED'
}

send_invites

Send meeting invitations via email.

Parameters:

Parameter Type Required Default Description
scheduleId string Yes* - Schedule ID
roomName string Yes* - Room name for instant invite
recipients array Yes - Email addresses
message string No - Custom message

*Either scheduleId or roomName is required.

Response:

{
  success: true,
  invitesSent: 3,
  recipients: ['user1@example.com', 'user2@example.com', 'user3@example.com'],
  failedRecipients: [],
  actionType: 'SEND_INVITES'
}

request_input

Request additional input from the user via form.

Parameters:

Parameter Type Required Default Description
fields array Yes - Form field definitions
message string No - Message to user
context Object No - Context for follow-up

Field Definition:

{
  name: string,          // Field identifier
  label: string,         // Display label
  type: 'text' | 'email' | 'date' | 'select' | 'multiselect',
  required: boolean,
  options: string[],     // For select/multiselect
  defaultValue: any
}

Response:

{
  success: true,
  message: 'Please provide the following information:',
  fields: [
    { name: 'attendees', label: 'Attendees', type: 'multiselect' }
  ],
  actionType: 'NEEDS_INFO'
}

Related Documentation