A Model Context Protocol (MCP) server for the Chorus.ai conversation intelligence platform. Connect Chorus to any MCP-compatible AI client to access sales call recordings, transcripts, scorecards, and analytics through natural language.
- 39 Tools -- Full Chorus API coverage: conversations, transcripts, scorecards, playlists, moments, emails, engagements, reports, and video conferences
- 6 Resources -- URI-based data access for users, teams, templates, searches, conversations, and playlists
- 6 Workflow Prompts -- Call analysis, deal risk scoring, competitive intel, meeting summaries, rep reviews, and customer feedback synthesis
- Token-Optimized -- Compact markdown and JSON responses reduce token consumption
- Smart Pagination -- Automatic handling on all list endpoints
- Annotation Presets -- READ_ONLY, CREATE, and DELETE access levels
- Node.js v20.9+, v22+, or v24+ (LTS versions)
- npm v9+
- MCP Client -- Claude Code, Continue.dev, or any MCP-compatible client
- Chorus API Key -- Generate one in your Chorus Personal Settings (API docs)
Run npx directly through Claude Code. No clone, no build.
- Log in to Chorus.ai
- Navigate to Personal Settings
- Generate an API token
claude mcp add --transport stdio chorus \
--scope user \
-e CHORUS_API_KEY=<YOUR_API_KEY> \
-e CHORUS_TOOL_MODE=readonly \
-- npx -y @opensourceops/chorus-mcpReplace <YOUR_API_KEY> with your Chorus API token. Set CHORUS_TOOL_MODE to all if you need write and delete tools.
Quit and reopen Claude Code for the new server to load.
Ask Claude:
List the available Chorus tools.
You should see 39 tools, including chorus_list_conversations, chorus_get_transcript, and chorus_search_conversations.
Install the package globally:
npm install -g @opensourceops/chorus-mcpThen configure your MCP client to run chorus-mcp-server instead of npx:
{
"mcpServers": {
"chorus": {
"command": "chorus-mcp-server",
"env": {
"CHORUS_API_KEY": "your_api_key",
"CHORUS_TOOL_MODE": "readonly"
}
}
}
}chorus_list_conversations-- List calls and meetings with filterschorus_get_conversation-- Get conversation metadatachorus_get_transcript-- Get speaker-attributed transcriptchorus_get_conversation_trackers-- Get tracker hits (competitors, keywords)chorus_search_conversations-- Search by keyword, participant, or date
chorus_list_users-- List all userschorus_get_user-- Get user detailschorus_search_users-- Search users by name or email
chorus_list_teams-- List all teamschorus_get_team-- Get team detailschorus_get_team_members-- List members of a team
chorus_list_scorecards-- List scorecardschorus_get_scorecard-- Get scorecard detailschorus_list_scorecard_templates-- List scoring templateschorus_get_scorecard_template-- Get template details
chorus_list_playlists-- List playlistschorus_get_playlist-- Get playlist detailschorus_list_playlist_moments-- List moments in a playlistchorus_list_moments-- List all momentschorus_get_moment-- Get moment detailschorus_create_moment-- Create a moment (write)chorus_delete_moment-- Delete a moment (write, destructive)
chorus_list_emails-- List tracked emailschorus_get_email-- Get email details
chorus_filter_engagements-- Filter engagements with criteriachorus_get_engagement-- Get engagement details
chorus_list_reports-- List available reportschorus_get_report-- Get report datachorus_get_activity_metrics-- Get activity metrics
chorus_list_saved_searches-- List saved searcheschorus_get_saved_search-- Get saved search detailschorus_execute_saved_search-- Run a saved search and return results
chorus_list_video_conferences-- List video conferenceschorus_get_video_conference-- Get video conference detailschorus_upload_recording-- Upload a recording (write)chorus_delete_recording-- Delete a recording (write, destructive)
chorus_list_integrations-- List connected integrationschorus_get_integration-- Get integration detailschorus_get_session-- Get current session info
Access data through MCP resource URIs:
| URI | Description |
|---|---|
chorus://users/{user_id} |
User profile |
chorus://teams/{team_id} |
Team details |
chorus://scorecard-templates/{template_id} |
Scorecard template |
chorus://saved-searches/{search_id} |
Saved search definition |
chorus://conversations/{conversation_id}/summary |
Conversation summary |
chorus://playlists/{playlist_id} |
Playlist with moments |
Built-in workflow prompts for common sales intelligence tasks:
| Prompt | Purpose |
|---|---|
chorus_call_analysis |
Generate coaching feedback from a sales call |
chorus_deal_risk_assessment |
Score deal risk for a prospect |
chorus_competitive_intelligence |
Report competitor mentions across calls |
chorus_meeting_summary |
Produce structured meeting summary with action items |
chorus_rep_performance_review |
Evaluate rep performance from scorecards and metrics |
chorus_customer_feedback_synthesis |
Synthesize product feedback from conversations |
| Variable | Default | Description |
|---|---|---|
CHORUS_API_KEY |
-- | Chorus API token (required) |
CHORUS_TOOL_MODE |
readonly |
Tool access level: readonly (read-only tools) or all (includes write and delete tools) |
TRANSPORT |
stdio |
Transport mode: stdio or http |
PORT |
3000 |
HTTP server port (when TRANSPORT=http) |
The server supports two transport modes:
stdio (default) -- Standard input/output. Use with Claude Code and most MCP clients.
Streamable HTTP -- HTTP-based transport for network deployments:
TRANSPORT=http PORT=3000 CHORUS_API_KEY=your_key CHORUS_TOOL_MODE=readonly npx @opensourceops/chorus-mcpClone the repository to modify the server, run tests, or contribute.
git clone https://github.com/opensourceops/chorus-mcp-server.git
cd chorus-mcp-server
npm install
npm run buildclaude mcp add --transport stdio chorus \
-e CHORUS_API_KEY=your_api_key \
-e CHORUS_TOOL_MODE=readonly \
-- $(which node) $(pwd)/dist/index.jsAdd to your MCP client's config file:
{
"mcpServers": {
"chorus": {
"command": "node",
"args": ["/absolute/path/to/chorus-mcp-server/dist/index.js"],
"env": {
"CHORUS_API_KEY": "your_api_key",
"CHORUS_TOOL_MODE": "readonly"
}
}
}
}Restart your MCP client, then ask:
Show me recent sales calls from Chorus.
chorus-mcp-server/
├── src/
│ ├── index.ts # Entry point
│ ├── constants.ts # Shared constants
│ ├── types.ts # Type definitions
│ ├── services/ # API client, error handler, formatters
│ ├── schemas/ # Zod validation schemas
│ ├── tools/ # 12 tool domain files
│ ├── resources/ # MCP resource handlers
│ └── prompts/ # Workflow prompts
├── tests/
│ ├── unit/
│ ├── integration/
│ └── fixtures/
├── dist/ # Compiled output (generated)
├── package.json
└── tsconfig.json
Test your key directly:
curl -H "Authorization: Bearer YOUR_API_KEY" https://api.chorus.ai/v1/conversationsA valid key returns conversation data.
- Rebuild after code changes:
npm run build - Restart your MCP client (quit and reopen)
- Use absolute paths in manual JSON configuration
Use Node.js LTS versions (20.9+, 22+, or 24+). Odd-numbered releases (23, 25) are non-LTS and unsupported. Switch with nvm use 22.
- Never commit
.envfiles or API keys - Store
CHORUS_API_KEYin environment variables, not in code - Destructive tools (
chorus_delete_moment,chorus_delete_recording) require explicit confirmation
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests
- Submit a pull request
Apache 2.0 -- See LICENSE.
- Issues -- GitHub Issues
- API Reference -- Chorus API Documentation