# leexi-mcp-server Read-only MCP server for the [Leexi public API](https://docs.public-api.leexi.ai/reference/public-api). Provides access to meeting notes, transcripts, action items, and call metadata. ## Tools | Tool | Description | |------|-------------| | `leexi_list_users` | List workspace users (name, email, UUID, team) | | `leexi_list_teams` | List workspace teams | | `leexi_list_calls` | List calls/meetings with filtering (date, owner, source, participant, customer) | | `leexi_get_call` | Full call details: chapters, tasks, topics, speakers, AI summaries, transcript | | `leexi_list_meeting_events` | List scheduled meeting events | | `leexi_get_meeting_event` | Meeting event details with associated call recordings | All tools support `response_format` parameter: `'markdown'` (default, human-readable) or `'json'` (structured data). ## Setup ### 1. Get API credentials Generate API keys at https://app.leexi.ai/settings/api_keys ### 2. Build ```bash cd ~/Workspace/AI/leexi-mcp-server npm install npm run build ``` ### 3. Configure in OpenCode Add to `~/.config/opencode/config.json` (or the relevant MCP config): ```json { "mcpServers": { "leexi": { "command": "node", "args": ["/home/ssavinel/Workspace/AI/leexi-mcp-server/dist/index.js"], "env": { "LEEXI_KEY_ID": "", "LEEXI_KEY_SECRET": "" } } } } ``` Or for Claude Code (`~/.claude/claude_desktop_config.json`): ```json { "mcpServers": { "leexi": { "command": "node", "args": ["/home/ssavinel/Workspace/AI/leexi-mcp-server/dist/index.js"], "env": { "LEEXI_KEY_ID": "", "LEEXI_KEY_SECRET": "" } } } } ``` ### 4. Test with MCP Inspector (optional) ```bash LEEXI_KEY_ID= LEEXI_KEY_SECRET= npx @modelcontextprotocol/inspector node dist/index.js ``` ## Data quality notes - **Leexi AI summaries**: Machine-generated and may be imprecise. The `leexi_get_call` markdown output labels these clearly and suggests using chapters/transcript instead. - **Speaker names**: In room-based calls, Leexi may use the room/device name as a speaker, representing multiple people. The tool flags speakers without email/phone as potentially being room names. - **Multi-language transcripts**: Calls mixing languages may have transcript artifacts. The raw data is passed through for the consuming LLM to interpret. ## Architecture ``` src/ ├── index.ts # Entry point, McpServer + stdio transport ├── types.ts # TypeScript interfaces for Leexi API responses ├── constants.ts # API base URL, character limit ├── services/ │ └── leexi-client.ts # Shared HTTP client (Basic auth, error handling) ├── schemas/ │ └── input-schemas.ts # Zod input validation for all tools └── tools/ ├── users.ts # leexi_list_users, leexi_list_teams ├── calls.ts # leexi_list_calls, leexi_get_call └── meetings.ts # leexi_list_meeting_events, leexi_get_meeting_event ```