96 lines
3.1 KiB
Markdown
96 lines
3.1 KiB
Markdown
# 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": "<your-key-id>",
|
|
"LEEXI_KEY_SECRET": "<your-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": "<your-key-id>",
|
|
"LEEXI_KEY_SECRET": "<your-key-secret>"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### 4. Test with MCP Inspector (optional)
|
|
|
|
```bash
|
|
LEEXI_KEY_ID=<key> LEEXI_KEY_SECRET=<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
|
|
```
|