# Fellow MCP Server A local MCP (Model Context Protocol) server that wraps the Fellow.ai API, providing tools to access meeting data, transcripts, summaries, action items, and participants. **Features:** - Local SQLite database for caching meeting data - Automatic incremental sync to keep action items fresh - Full-text search across cached notes - Find meetings by participant ## Installation ```bash npm install -g fellow-mcp ``` ## Setup ### 1. Get your Fellow API credentials 1. Log into your Fellow account 2. Navigate to Developer API settings in your User settings 3. Generate a new API key 4. Note your workspace subdomain (the part before `.fellow.app` in your URL) ### 2. Configure your MCP client Add the following to your MCP client configuration (e.g., `~/.config/opencode/opencode.json`): ```json { "mcp": { "fellow": { "type": "local", "command": ["npx", "-y", "fellow-mcp"], "environment": { "FELLOW_API_KEY": "YOUR_FELLOW_API_KEY_HERE", "FELLOW_SUBDOMAIN": "YOUR_SUBDOMAIN" }, "enabled": true } } } ``` ## Available Tools ### API Tools (Direct Fellow API calls) #### `search_meetings` Search for meetings/recordings in Fellow. **Parameters:** - `title` (optional): Filter by meeting title (case-insensitive partial match) - `created_at_start` (optional): Filter meetings created after this date (ISO format) - `created_at_end` (optional): Filter meetings created before this date (ISO format) - `limit` (optional): Maximum number of results (1-50, default 20) #### `get_meeting_transcript` Get the full transcript of a meeting recording with speaker labels and timestamps. **Parameters:** - `recording_id` (optional): The ID of the recording - `meeting_title` (optional): Search by meeting title #### `get_meeting_summary` Get the meeting summary/notes content including agenda items, discussion topics, and decisions. **Parameters:** - `note_id` (optional): The ID of the note - `recording_id` (optional): Get the summary for a recording's associated note - `meeting_title` (optional): Search by meeting title #### `get_action_items` Extract action items from a single meeting's notes. **Parameters:** - `note_id` (optional): The ID of the note - `meeting_title` (optional): Search by meeting title #### `get_meeting_participants` Get the list of participants/attendees for a meeting. **Parameters:** - `note_id` (optional): The ID of the note - `meeting_title` (optional): Search by meeting title ### Database Tools (Local SQLite cache) #### `sync_meetings` Sync meetings from Fellow API to local database. **Parameters:** - `force` (optional, default: false): If true, performs full re-sync. Otherwise does incremental sync (only new/updated since last sync) - `include_transcripts` (optional, default: false): If true, also fetches and stores transcripts (slower) #### `get_all_action_items` Get all action items from the local database. **Automatically performs incremental sync first** to ensure data is fresh. **Parameters:** - `assignee` (optional): Filter by assignee name (partial match) - `show_completed` (optional, default: false): If true, includes completed action items - `since` (optional): Only return action items from meetings on or after this date (ISO format: YYYY-MM-DD) #### `get_meetings_by_participants` Find meetings that included specific participants. **Parameters:** - `emails` (required): List of email addresses to search for - `require_all` (optional, default: false): If true, only return meetings where ALL specified participants attended #### `search_cached_notes` Full-text search across all cached meeting notes (titles and content). **Parameters:** - `query` (required): Search query #### `get_sync_status` Get the current sync status and database statistics. ## Local Database Meeting data is cached in a local SQLite database at `~/.fellow-mcp/fellow.db`. This enables: - Fast local searches - Querying across all action items - Finding meetings by participant - Offline access to cached data The database stores: - Notes (meeting summaries, agendas, content) - Recordings (with optional transcripts) - Action items (parsed from notes with assignee/due date extraction) - Participants (email addresses) ## Environment Variables | Variable | Required | Description | |----------|----------|-------------| | `FELLOW_API_KEY` | Yes | Your Fellow API key | | `FELLOW_SUBDOMAIN` | Yes | Your Fellow workspace subdomain | ## Development ```bash # Clone the repository git clone cd fellow-mcp # Install dependencies npm install # Create .env file with your credentials echo "FELLOW_API_KEY=your_api_key_here" > .env echo "FELLOW_SUBDOMAIN=your_subdomain" >> .env # Watch mode for development npm run dev # Build npm run build # Test API connection node --env-file=.env test-api.js # Test MCP server FELLOW_API_KEY=your_key FELLOW_SUBDOMAIN=your_subdomain node test-mcp.js ``` ## Requirements - Node.js >= 18.0.0 - A Fellow.ai account with API access ## License MIT ## API Reference This MCP server wraps the [Fellow Developer API](https://developers.fellow.ai/reference/introduction). The API uses: - `X-API-KEY` header for authentication - POST requests for list operations (with JSON body for filters/pagination) - GET requests for retrieving individual resources