Skip to main content
Glama
barankrky

Perplexity MCP Server

by barankrky
README.md
# Perplexity MCP Server

Exposes Perplexity AI's search and synthesis capabilities through the [Model Context Protocol (MCP)](https://github.com/modelcontextprotocol/python-sdk), enabling Claude Desktop and other MCP clients to search the web, synthesize sources, and get cited answers.

```
Claude Desktop
    ↓ stdio
Perplexity MCP Server
    ├── perplexity_ask       → Ask a question, get answer + sources
    ├── perplexity_search    → In-depth web search
    ├── set_cookies          → Set Perplexity cookies (JSON / Netscape format)
    ├── list_models          → List available models
    └── reset_conversation   → Reset conversation context
    ↓
PerplexityClient (curl_cffi → Chrome impersonation → Cloudflare bypass)
    ↓
Perplexity.ai internal API (SSE)
```

## Installation

```bash
pip install -r requirements.txt
```

Requires **Python 3.10+**. Only two dependencies:
- [`curl_cffi`](https://github.com/yifeikong/curl_cffi) — TLS fingerprint impersonation (Chrome 120)
- [`mcp`](https://github.com/modelcontextprotocol/python-sdk) — Model Context Protocol SDK

## Getting Cookies

This MCP server uses Perplexity's internal API, which requires valid session cookies. Choose one of the following methods:

### Method 1: Browser Export (Recommended)

1. Log in to [Perplexity.ai](https://www.perplexity.ai) in Chrome
2. Open DevTools → Application → Cookies → `www.perplexity.ai`
3. Export all cookies as JSON
4. Save to `cookies/perplexity_cookies.json`

### Method 2: Playwright (Automated)

```bash
pip install playwright
playwright install chromium
python get_cookies.py
# Browser opens → log in to Perplexity → press Enter in terminal
```

For headless mode: `python get_cookies.py --headless`

### Method 3: Netscape Format

Export cookies from any browser in Netscape format and save to `cookies/perplexity_cookies.txt`. The server reads them automatically.

### Method 4: Environment Variable

```bash
export PERPLEXITY_COOKIES_JSON='{"cookie_name": "value", ...}'
```

### Method 5: MCP Tool (Runtime)

If you already have cookie values (e.g., from another AI agent), use the `set_cookies` tool at runtime. It accepts both JSON and Netscape formats:

```json
{
  "cookies_data": "{\"__Secure-next-auth.session-token\": \"...\", \"cf_clearance\": \"...\"}"
}
```

or Netscape format:

```json
{
  "cookies_data": ".perplexity.ai\ttrue\t/\ttrue\t1787873851\tcookie_name\tcookie_value"
}
```

This is especially useful when an AI agent possesses cookie values and needs to configure the MCP server without filesystem access.

## Usage

### Claude Desktop

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "perplexity": {
      "command": "python",
      "args": ["C:/full/path/to/mcp_server.py"]
    }
  }
}
```

### Cursor / VS Code

Add to `.cursor/mcp.json` or VS Code MCP settings:

```json
{
  "mcpServers": {
    "perplexity": {
      "command": "python",
      "args": ["C:/full/path/to/mcp_server.py"]
    }
  }
}
```

### Direct Testing

```bash
# Start the MCP server
python mcp_server.py

# In another terminal, test with MCP Inspector
npx @modelcontextprotocol/inspector python mcp_server.py
```

## Tools

### `perplexity_ask`

Ask a question. Perplexity searches the web and returns a cited answer.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `message` | string | **required** | Question or topic |
| `model` | string | `"auto"` | Model: `gpt-4o`, `claude-4.5-sonnet`, `o3-mini`, `deepseek-r1`, ... |
| `search_focus` | enum | `"internet"` | `"internet"` or `"writing"` |
| `sources` | string[] | `["web"]` | Sources: `web`, `scholar`, `social`, `edgar` |

### `perplexity_search`

In-depth web search. An alias for `perplexity_ask` with different default parameters focused on search.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `query` | string | **required** | Search query |
| `search_focus` | enum | `"internet"` | `"internet"` or `"writing"` |
| `sources` | string[] | `["web"]` | Source types: `web`, `scholar`, `social`, `edgar` |
| `model` | string | `"auto"` | Model preference |

### `set_cookies`

Set Perplexity cookies at runtime via MCP. Accepts JSON objects or Netscape-format cookie strings.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `cookies_data` | string | **required** | Cookie data — JSON (`{"name":"value"}`) or Netscape format (tab-separated) |
| `session_id` | string | `"default"` | Session ID |

### `list_models`

Lists all available models with their Perplexity internal IDs and use-case descriptions.

### `reset_conversation`

Resets conversation history and starts a fresh context.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `session_id` | string | `"default"` | Session ID |

## Supported Models

| Name | Perplexity ID | Use Case |
|------|---------------|----------|
| `gpt-5` | gpt5 | Balanced, general purpose |
| `gpt-5-thinking` | gpt5_thinking | Complex reasoning, broad sources (~28) |
| `gpt-4o` | gpt4o | Multimodal |
| `gpt-4.5` | gpt45 | General purpose |
| `o3` | o3 | Advanced reasoning, math |
| `o3-pro` | o3pro | Highest reasoning |
| `o3-mini` | o3mini | Fast reasoning, code |
| `o4-mini` | o4mini | Broad sources (~28), balanced |
| `o1` | o1 | Step-by-step reasoning |
| `claude-4.5-sonnet` | claude45sonnet | Detailed analysis, coding |
| `claude-4.5-sonnet-thinking` | claude45sonnetthinking | Complex reasoning |
| `claude-4-opus` | claude40opus | Security-focused |
| `claude-4.1-opus` | claude41opusthinking | Latest Opus, advanced reasoning |
| `grok-4` | grok4 | Latest news, breaking stories |
| `gemini-2.5-pro` | gemini30pro | Multimodal, 1M+ token context |
| `deepseek-r1` | r1 | Price/performance, open source |
| `sonar-pro` | pplx_pro | Fast, concise answers |
| `sonar-deep-research` | o3pro_research | Deep research |
| `perplexity-reasoning` | pplx_reasoning | Balanced, efficient |

Full details: call the `list_models` tool.

## Notes

- **Cookie expiry:** Cookies expire over time. If Perplexity logs you out or returns errors, re-export fresh cookies.
- **Guest mode:** The server works without cookies but will fall back to the `turbo` model only. Authentication significantly expands model availability.
- **Multi-turn conversations:** Supported via `session_id`. Context is maintained server-side through `backend_uuid`, `read_write_token`, and `thread_url_slug`.
- **Reasoning models:** Models like `deepseek-r1`, `o3`, `gpt-5-thinking`, `claude-4.5-sonnet-thinking` emit a separate reasoning/thinking stream that is prepended to the response.
- **Security:** Cookie files in `cookies/` are gitignored by default. Never commit live credentials to version control.