API & MCP Server

Access your IceCubes meetings, transcripts, and action items programmatically via the REST API, or connect Claude, ChatGPT, and other AI tools via the MCP server.

REST API

Query meetings, transcripts, and action items with simple HTTP requests.

MCP Server

Connect Claude Desktop, Claude Code, Cursor, or ChatGPT to your meeting data.

API Keys

Secure authentication with per-user API keys. Create up to 5 keys.

Authentication

All API and MCP requests require an API key. Create one from Settings → Developer.

Include your API key in the Authorization header:

Authorization: Bearer ik_a1b2c3d4_e5f6789012345678901234567890abcdef01234567

API keys start with ik_. The full key is only shown once when created — store it securely. You can revoke keys at any time from the Developer settings.

MCP Server Setup

The IceCubes MCP server lets AI tools like Claude and ChatGPT access your meeting data through the Model Context Protocol.

Claude Desktop

Add this to your claude_desktop_config.json (found at ~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "icecubes": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://icecubes-app.fly.dev/api/mcp",
        "--header",
        "Authorization: Bearer YOUR_API_KEY"
      ]
    }
  }
}

Restart Claude Desktop after saving. You should see "icecubes" in the MCP tools list.

Claude Code

Add to your project's .mcp.json or global MCP settings:

{
  "mcpServers": {
    "icecubes": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://icecubes-app.fly.dev/api/mcp",
        "--header",
        "Authorization: Bearer YOUR_API_KEY"
      ]
    }
  }
}

Cursor

Go to Cursor Settings → MCP and add a new server with the same configuration as Claude Desktop above.

ChatGPT

In ChatGPT Settings → Connectors → Create, enter the MCP server URL:

https://icecubes-app.fly.dev/api/mcp

Select Bearer Token authentication and paste your API key.

MCP Tools

The MCP server exposes 13 tools that AI assistants can call:

get_user

Get your profile including meeting count and organization info. No parameters required.

get_meetings

Search and list your meetings with optional filters.

keyword — Search by title

from_date / to_date — Date range (ISO 8601)

participant — Filter by participant email

limit — Max results (default 20, max 50)

get_meeting

Get full details of a specific meeting including summary and action items.

meeting_id — Required. The meeting ID.

get_transcript

Get the full transcript with speaker names and timestamps.

meeting_id — Required. The meeting ID.

get_action_items

List action items across all meetings or for a specific meeting.

meeting_id — Optional. Filter by meeting.

completed — Optional. Filter by completion status.

limit — Max results (default 20, max 50)

search_meetings

Search across all meeting content by keyword.

query — Required. Search query.

content_type — Filter by content type.

speaker — Filter by speaker name.

limit — Max results.

get_insights

Get sales insights for a meeting.

meeting_id — Required. The meeting ID.

category — Filter by insight category.

create_action_item

Create an action item for a meeting.

meeting_id — Required. The meeting ID.

text — Required. Action item text.

assignee_email — Optional. Assignee email.

due_date — Optional. Due date (ISO 8601).

update_action_item

Update an existing action item.

action_item_id — Required. The action item ID.

completed — Optional. Mark as complete/incomplete.

text — Optional. Updated text.

get_notes

Get meeting notes.

meeting_id — Required. The meeting ID.

update_notes

Update meeting notes.

meeting_id — Required. The meeting ID.

content — Required. The notes content.

get_contacts

List contacts from your meetings.

search — Search by name or email.

domain — Filter by email domain.

limit — Max results.

get_tags

List all available tags (organization and personal). No parameters required.

Example Prompts

Once connected, try asking Claude or ChatGPT:

  • "What were the key action items from my meetings last week?"
  • "Summarize my meeting with [client name]"
  • "What competitor mentions came up in recent sales calls?"
  • "Show me all open action items assigned to me"
  • "What were the main topics discussed in my last 5 meetings?"

REST API

The REST API provides direct HTTP access to your meeting data. Endpoints support both read (GET) and write (POST, PUT, PATCH) operations, and require API key authentication.

Base URL: https://icecubes-app.fly.dev/api/public

GET /api/public/user

Returns your user profile and meeting statistics.

curl https://icecubes-app.fly.dev/api/public/user \
  -H "Authorization: Bearer YOUR_API_KEY"

Response:

{
  "id": "user123",
  "email": "you@company.com",
  "displayName": "Your Name",
  "organizationId": "org123",
  "meetingCount": 42,
  "createdAt": "2024-01-15T10:00:00.000Z"
}

GET /api/public/meetings

List and search your meetings.

ParameterTypeDescription
limitnumberMax results (default 20, max 100)
offsetnumberSkip N results for pagination
keywordstringSearch by meeting title
fromISO dateMeetings after this date
toISO dateMeetings before this date
participantstringFilter by participant email
scopestringpersonal (default) or org to include team meetings
tagstringFilter by tag ID
curl "https://icecubes-app.fly.dev/api/public/meetings?limit=5&from=2024-06-01" \
  -H "Authorization: Bearer YOUR_API_KEY"

GET /api/public/meetings/:id

Get full meeting details including AI summary, key points, and action items.

curl https://icecubes-app.fly.dev/api/public/meetings/MEETING_ID \
  -H "Authorization: Bearer YOUR_API_KEY"

GET /api/public/meetings/:id/transcript

Get the full transcript with speaker names and timestamps.

curl https://icecubes-app.fly.dev/api/public/meetings/MEETING_ID/transcript \
  -H "Authorization: Bearer YOUR_API_KEY"

GET /api/public/action-items

List action items across all meetings or for a specific meeting.

ParameterTypeDescription
limitnumberMax results (default 20, max 100)
offsetnumberSkip N results for pagination
meetingIdstringFilter by meeting
completedbooleanFilter by completion status
curl "https://icecubes-app.fly.dev/api/public/action-items?completed=false&limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"

GET /api/public/search

Full-text search across transcripts, summaries, action items, notes, and key points.

ParameterTypeDescription
qstringSearch query (required)
typestringFilter by content type: transcript, summary, action_item, decision, note, key_point
speakerstringFilter by speaker name
limitnumberMax results (default 20, max 50)
offsetnumberSkip N results for pagination
curl "https://icecubes-app.fly.dev/api/public/search?q=competitor+pricing&type=transcript&limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"

GET /api/public/meetings/:id/insights

Get AI-extracted sales insights for a meeting.

ParameterTypeDescription
categorystringFilter by category: next_step, objection_budget, objection_authority, objection_need, objection_time, pricing, challenge, meddic_metrics, meddic_economic_buyer, meddic_decision_criteria, meddic_decision_process, meddic_identify_pain, meddic_champion
curl "https://icecubes-app.fly.dev/api/public/meetings/MEETING_ID/insights?category=pricing" \
  -H "Authorization: Bearer YOUR_API_KEY"

POST /api/public/action-items

Create a new action item.

Request body:

{
  "meetingId": "abc123",
  "text": "Follow up with client about pricing",
  "assigneeEmail": "john@example.com",
  "dueDate": "2026-03-01T00:00:00Z"
}

Example:

curl -X POST https://icecubes-app.fly.dev/api/public/action-items \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"meetingId":"abc123","text":"Follow up with client"}'

PATCH /api/public/action-items/:id

Update an action item (mark complete, change text, assignee, due date). All body fields are optional.

Request body:

{
  "completed": true,
  "text": "Updated text",
  "assigneeEmail": "jane@example.com",
  "dueDate": "2026-03-15T00:00:00Z"
}

Example:

curl -X PATCH https://icecubes-app.fly.dev/api/public/action-items/ITEM_ID \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"completed":true}'

GET /api/public/meetings/:id/notes and PUT /api/public/meetings/:id/notes

Read and write meeting notes.

GET response:

{
  "content": "Meeting notes...",
  "updatedAt": "...",
  "version": 3
}

PUT request body:

{
  "content": "Updated meeting notes..."
}

Examples:

curl https://icecubes-app.fly.dev/api/public/meetings/MEETING_ID/notes \
  -H "Authorization: Bearer YOUR_API_KEY"

curl -X PUT https://icecubes-app.fly.dev/api/public/meetings/MEETING_ID/notes \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"content":"Updated notes content"}'

GET /api/public/contacts

List contacts from your meetings.

ParameterTypeDescription
searchstringSearch by name or email
domainstringFilter by email domain
limitnumberMax results (default 25, max 100)
cursorstringPagination cursor from previous response
curl "https://icecubes-app.fly.dev/api/public/contacts?search=john&limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"

GET /api/public/tags

List all available tags (organization and personal).

curl https://icecubes-app.fly.dev/api/public/tags \
  -H "Authorization: Bearer YOUR_API_KEY"

Error Handling

All errors follow a consistent format:

{
  "error": {
    "code": "not_found",
    "message": "Meeting not found"
  }
}
HTTP StatusCodeDescription
401unauthorizedMissing, invalid, or revoked API key
403forbiddenNot authorized to access this resource
404not_foundResource not found
500internal_errorServer error

Rate Limits

The API currently does not enforce strict rate limits, but please be reasonable with your usage. Excessive requests may be throttled. Rate limiting will be introduced in a future update.