Skip to main content
Glama
README.md
# Paper MCP Server

MCP server that connects to Paper's WebSocket API for canvas node operations.

## Setup

1. Install dependencies:
```bash
npm install
```

2. Build the project:
```bash
npm run build
```

## Configuration

1. Copy `env.example` to `.env`:
```bash
cp env.example .env
```

2. Edit `.env` and fill in your values (or set environment variables directly):

```bash
# Required: Full cookie string from Paper website
# Get this from your browser's developer tools -> Application -> Cookies -> paper.design
# Should include all three cookies: paper-preauth-user-info, D7pPzj4phQRAjBC01, and ph_phc_...
PAPER_COOKIES=paper-preauth-user-info=...; D7pPzj4phQRAjBC01=...; ph_phc_dYB3kPJF9dv2vFhHjPmuuU5D7yQVDFtMYJQpVEXu9Ku_posthog=...

# Optional: Document ID to connect to (defaults to example ID)
# You can get document IDs from the list_user_documents tool or from Paper URLs
PAPER_DOCUMENT_ID=01KBWAZRVPXZZ1Y0EZ5FDT7ZYW

# Optional: Enable debug logging for WebSocket messages
DEBUG=false
```

### Getting Your Cookies

1. Open Paper in your browser (https://app.paper.design)
2. Open Developer Tools (F12)
3. Go to Application → Cookies → https://app.paper.design
4. Copy the values for these cookies:
   - `paper-preauth-user-info`
   - `D7pPzj4phQRAjBC01`
   - `ph_phc_dYB3kPJF9dv2vFhHjPmuuU5D7yQVDFtMYJQpVEXu9Ku_posthog`
5. Format them as: `cookie1=value1; cookie2=value2; cookie3=value3`

## Connecting to Cursor

### Option 1: Using Cursor Settings (Recommended)

1. Open Cursor Settings (Ctrl+, or Cmd+,)
2. Search for "MCP" or navigate to **Features → Model Context Protocol**
3. Click **"Add MCP Server"** or **"Edit Config"**
4. Add the following configuration:

**On Windows:**
```json
{
  "mcpServers": {
    "paper": {
      "command": "node",
      "args": ["C:\\Users\\grim\\paper-mcp\\dist\\index.js"],
      "env": {
        "PAPER_COOKIES": "your-cookie-string-here",
        "PAPER_DOCUMENT_ID": "01KBWAZRVPXZZ1Y0EZ5FDT7ZYW",
        "DEBUG": "false"
      }
    }
  }
}
```

**On macOS/Linux:**
```json
{
  "mcpServers": {
    "paper": {
      "command": "node",
      "args": ["/path/to/paper-mcp/dist/index.js"],
      "env": {
        "PAPER_COOKIES": "your-cookie-string-here",
        "PAPER_DOCUMENT_ID": "01KBWAZRVPXZZ1Y0EZ5FDT7ZYW",
        "DEBUG": "false"
      }
    }
  }
}
```

5. Replace the paths and cookie values with your actual values
6. Restart Cursor

### Option 2: Using MCP Config File

1. Find your Cursor MCP config file:
   - **Windows**: `%APPDATA%\Cursor\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json`
   - **macOS**: `~/Library/Application Support/Cursor/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`
   - **Linux**: `~/.config/Cursor/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json`

2. Add the server configuration (same JSON as above)

3. Restart Cursor

### Option 3: Using dotenv (Alternative)

If you prefer using a `.env` file:

1. Install `dotenv-cli`: `npm install -g dotenv-cli`
2. Update the Cursor config to use:
```json
{
  "mcpServers": {
    "paper": {
      "command": "dotenv",
      "args": ["-e", ".env", "--", "node", "dist/index.js"],
      "cwd": "C:\\Users\\grim\\paper-mcp"
    }
  }
}
```

## Usage

Once connected to Cursor, you can use the Paper tools in your conversations:

- "List my Paper documents"
- "Show me all nodes on the canvas"
- "Get details of node XYZ"
- "Create a new rectangle node at position (100, 200)"
- "Update node ABC with new properties"
- "Delete node DEF"

The server communicates via stdio using MCP JSON-RPC protocol.

## Tools

- `list_user_documents`: Get user's recent Paper documents
- `list_nodes`: List all nodes on the canvas
- `get_node`: Get details of a specific node
- `create_node`: Create a new node
- `update_node`: Update node properties
- `delete_node`: Delete a node