# Notta MCP Server

Model Context Protocol (MCP) server for audio/video transcription, record and folder management, AI summaries, and exports through Notta.

## Installation

```bash
npm install -g @notta-labs/notta-mcp
```

## Configuration

#### Configuration File Locations

| Client | Config Path |
| --- | --- |
| Claude Desktop (macOS) | `~/Library/Application Support/Claude/claude_desktop_config.json` |
| Claude Desktop (Windows) | `%APPDATA%\Claude\claude_desktop_config.json` |
| Cursor | `~/.cursor/mcp.json` |
| Codex | `~/.codex/config.toml` |

#### Claude Desktop and Cursor

```json
{
  "mcpServers": {
    "notta": {
      "command": "notta-mcp",
      "args": [
        "/Users/you/Notta Media",
        "/Users/you/Notta Exports"
      ]
    }
  }
}
```

#### Codex

```toml
[mcp_servers.notta]
command = "notta-mcp"
args = [
  "/Users/you/Notta Media",
  "/Users/you/Notta Exports",
]
```

The `args` entries define the directories that Notta MCP may access when `transcribe` reads local media or `export_download` saves files. Relative directory paths are resolved against the MCP server process's working directory. Use existing absolute directory paths to avoid client-dependent resolution. Files selected for transcription and export destinations must remain inside these directories. Restart your MCP client after changing the configuration.

## Available Tools

| Tool | Purpose | Inputs |
| --- | --- | --- |
| `auth_setup` | Authorize this MCP server with a Notta account using OAuth with PKCE. | `port` (optional) |
| `auth_status` | Show safe local authorization status without exposing tokens. | none |
| `auth_user_info` | Show the user bound to the current Notta access token. | none |
| `auth_logout` | Revoke the refresh token remotely and clear local credentials after successful revocation. | none |
| `transcribe` | Upload an allowed local media file and create a Notta transcription record, optionally in a folder and with a custom name. | `file` (required), `language`, `folder_id`, `record_name` (optional) |
| `record_list` | List records, optionally filtered by folder. | `folder_id`, `cursor`, `page_size` (all optional) |
| `record_search` | Search records by a non-empty keyword. | `keyword` (required), `cursor`, `page_size` (optional) |
| `record_status` | Get a transcription status or wait for its terminal state. | `record_id` (required), `wait`, `timeout`, `interval` (optional) |
| `record_view` | Get a transcription result. | `record_id` (required) |
| `record_access` | Get access permissions for one to ten unique records. | `record_ids` (required; max 10) |
| `record_trash` | Move a record to trash. | `record_id` (required) |
| `record_delete` | Permanently delete a record that is already in trash after explicit confirmation. First move the record to trash with record_trash. This cannot be undone. | `record_id` (required), `confirm` (required `true`) |
| `record_restore` | Restore a trashed record to a folder. | `record_id` (required), `folder_id` (optional) |
| `folder_list` | List folders, optionally filtered by parent. | `folder_id`, `cursor`, `page_size` (all optional) |
| `summary_batch` | Get completed summaries for up to ten records. | `record_ids` (required; max 10) |
| `export_create` | Create a record export task. Use `file_type=media` to export record media (audio or video). | `record_id`, `file_type` (`txt`, `docx`, `pdf`, `srt`, `excel`, or `media`) required; `export_options`, `extra_info`, `request_id` (optional) |
| `export_status` | Get an export task status or wait for completion. | `task_id` (required), `wait`, `timeout` (optional) |
| `export_status_list` | List local export tasks with pagination and optional case-insensitive status filtering. | `page_size`, `cursor`, `status` (optional) |
| `export_download` | Download a successful export to an allowed local output path. | `task_id`, `output_path` (required), `force` (optional) |

## Example Usage

Once configured and authorized, you can ask your AI assistant:

- "List my recent Notta records."
- "Search my Notta records for 'quarterly review'."
- "Transcribe the allowed local file `/path/to/meeting.mp4` and name the record `Weekly meeting`."
- "Wait for record `<record_id>` to finish, then show me the transcript."
- "Read the completed summaries for records `<record_id_1>` and `<record_id_2>`."
- "Export record `<record_id>` as a PDF to an allowed local path."
- "Export the audio for record `<record_id>` to an allowed local path."
