Skip to main content
Glama
liba2k
by liba2k
README.md
# Unofficial Fellow MCP Server

> **Disclaimer:** This is an unofficial, community-maintained MCP server for the [Fellow.ai](https://fellow.ai) API. It is **not** affiliated with, endorsed by, or associated with Fellow, Inc. "Fellow" is a registered trademark of Fellow, Inc.

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 unofficial-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", "unofficial-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 `~/.unofficial-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 <repo-url>
cd unofficial-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

TDQS

A3.5/5.0

Scored across 10 tools

Disambiguation4/5

Most tools have distinct purposes, such as get_action_items for extracting from notes versus get_all_action_items for querying the database, but there is some potential confusion between get_meeting_summary and get_meeting_transcript as both relate to meeting content. The descriptions clarify the differences, but overlap exists in the meeting data domain.

Naming Consistency5/5

All tool names follow a consistent snake_case pattern with clear verb_noun structure, such as get_action_items, search_meetings, and sync_meetings. This uniformity makes the tool set predictable and easy to navigate for an agent.

Tool Count5/5

With 10 tools, the server is well-scoped for managing meetings and action items in Fellow, covering key operations like retrieval, search, and synchronization. Each tool serves a specific function without redundancy, making the count appropriate for the domain.

Completeness4/5

The tool set provides comprehensive coverage for reading and searching meeting data, action items, and sync status, but lacks write operations such as creating or updating meetings or action items. This minor gap may require workarounds but does not severely hinder core workflows.

Maintenance

ActivityInactive
ResponsivenessUnresponsive