Skip to main content
Glama
Mega-Studios

Roomtone MCP

Official
by Mega-Studios
README.md
# Roomtone MCP

An [MCP](https://modelcontextprotocol.io) (Model Context Protocol) server that lets AI agents — Claude Code, Claude Desktop, and any other MCP client — work with your [Roomtone](https://roomtone.io) meeting notes.

Agents can list your meetings, read a note's write-up, add a source you already have (a YouTube link or pasted text), chat with what was said, and pull the raw transcript. Recording a meeting itself always happens in the Roomtone app — this server only reads and adds to what already exists.

## Getting an API key

1. Open the Roomtone web app and go to **Settings → API keys**.
2. Create a key — it starts with `ak_` and is shown **once**, so copy it right away.

More details: https://roomtone.io/mcp

## Setup

### Claude.ai (Connectors, no install)

Claude.ai connects directly to a remote MCP server over OAuth — this npm package (stdio)
isn't involved. In Claude.ai: **Settings → Connectors → Add custom connector**, and enter:

```
https://mcp.roomtone.io/mcp
```

Claude opens a sign-in prompt for your Roomtone account and asks you to approve access —
no API key needed. This remote server is implemented directly in the Roomtone backend
(`backend/app/mcp_server.py` + `backend/app/oauth_provider.py`), sharing the same 7 tools.

### Claude Code

```bash
claude mcp add roomtone -e ROOMTONE_API_KEY=ak_... -- npx -y roomtone-mcp
```

### Any MCP client (generic `mcpServers` JSON)

```json
{
  "mcpServers": {
    "roomtone": {
      "command": "npx",
      "args": ["-y", "roomtone-mcp"],
      "env": {
        "ROOMTONE_API_KEY": "ak_..."
      }
    }
  }
}
```

### Environment variables

| Variable | Required | Description |
|---|---|---|
| `ROOMTONE_API_KEY` | Yes | Your Roomtone API key (`ak_...`). The server exits with an error if it is missing. |
| `ROOMTONE_API_URL` | No | API base URL. Defaults to `https://meganotes-api.fly.dev`. |

## Tools

| Tool | Description |
|---|---|
| `list_notebooks` | List every meeting (id, title, emoji, sources_count, updated_at). |
| `get_notebook` | Get one meeting with its sources (id, type, url, status) and its generated note. |
| `create_notebook` | Start a meeting note with a title and optional emoji. Reports a friendly message if the free-plan limit is reached. |
| `add_source` | Add a source: `youtube` (by URL, transcribed asynchronously) or `text` (stored immediately). |
| `generate_note` | Generate or regenerate the write-up (only `summary` is supported). Runs in the background — read the result via `get_notebook`. |
| `chat_with_sources` | Ask a question answered from the meeting's transcript. |
| `get_transcript` | Get the raw transcript text of a single source. |

## Development

Requires Node.js 18+.

```bash
npm install
npm run build   # tsc → dist/
ROOMTONE_API_KEY=ak_... node dist/index.js
```

The server speaks MCP over stdio. On startup it prints a status line to stderr and then waits for JSON-RPC messages on stdin.

## License

MIT

TDQS

A4.2/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: listing, getting, creating notebooks, generating notes, adding sources, chat, and transcript retrieval. There is no overlap in functionality or resource action.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (e.g., list_notebooks, get_notebook, create_notebook). The pattern is predictable and uniform across all seven tools.

Tool Count5/5

Seven tools are well-suited for the server's scope of managing meeting notebooks, sources, and notes. Each tool serves a distinct purpose without redundancy.

Completeness4/5

The tool set covers the core lifecycle: create, list, get, add sources, generate notes, chat, and retrieve transcripts. However, there is no update or delete operation for notebooks or sources, which are common CRUD gaps that could limit full management.

Maintenance

ActivityMaintained
ResponsivenessNo issues