The only Perplexity MCP server with multi-account pooling, an admin dashboard, and zero-cost monitoring.
No API keys. No per-query fees. Uses your existing Perplexity Pro session.
Features Β· Quick Start Β· Admin Panel Β· Configuration Β· Architecture
Most Perplexity MCP servers are single-account wrappers around the paid Sonar API. This one is different:
- π No API costs β uses session cookies, not the paid API. Same features, zero per-query fees
- π Multi-account pool β round-robin across N accounts with automatic failover
- π Admin dashboard β React UI to monitor quotas, manage tokens, tail logs in real-time
- β€οΈ Zero-cost health checks β monitors all accounts via rate-limit API without consuming queries
- π‘οΈ Downgrade protection β detects when Perplexity silently returns a regular result instead of deep research
- π± Telegram alerts β get notified when tokens expire or quota runs out
|
|
Stats grid, monitor controls, sortable token table with per-account quotas (Pro / Research / Agentic), filter pills, and one-click actions.
Live log streaming with auto-refresh, level filtering, search highlighting, follow mode, and line numbers.
git clone https://github.com/teoobarca/perplexity-mcp.git
cd perplexity-mcp
uv syncπ£ Claude Code
claude mcp add perplexity -s user -- uv --directory /path/to/perplexity-mcp run perplexity-mcpπ’ Cursor
Go to Settings β MCP β Add new server and paste:
{
"command": "uv",
"args": ["--directory", "/path/to/perplexity-mcp", "run", "perplexity-mcp"]
}π΅ Windsurf / VS Code / Other MCP clients
Add to your MCP config file:
{
"mcpServers": {
"perplexity": {
"command": "uv",
"args": ["--directory", "/path/to/perplexity-mcp", "run", "perplexity-mcp"]
}
}
}That's it. Works immediately with anonymous sessions. Add your tokens for Pro access β see Authentication.
Two MCP tools with LLM-optimized descriptions so your AI assistant picks the right one automatically:
AI-powered answer engine for tech questions, documentation lookups, and how-to guides.
| Parameter | Type | Default | Description |
|---|---|---|---|
query |
string | required | Natural language question with context |
model |
string | null |
Model selection (see models) |
sources |
array | ["web"] |
Sources: web, scholar, social |
language |
string | en-US |
ISO 639 language code |
Mode auto-detection: Models with thinking or reasoning in the name automatically switch to Reasoning mode.
"gpt-5.2" β Pro Search
"gpt-5.2-thinking" β Reasoning Mode β auto-detected
Deep research agent for comprehensive analysis. Returns extensive reports with 10-30+ citations.
| Parameter | Type | Default | Description |
|---|---|---|---|
query |
string | required | Detailed research question with full context |
sources |
array | ["web", "scholar"] |
Sources: web, scholar, social |
language |
string | en-US |
ISO 639 language code |
Tip
Deep research takes 2-5 minutes per query. Provide detailed context and constraints for better results. The server has a 15-minute timeout to accommodate this.
A built-in web dashboard for managing your token pool. Start it with:
perplexity-serverOpens automatically at http://localhost:8123/admin/
| Feature | Description |
|---|---|
| π Stats Grid | Total clients, Online/Exhausted counts, Monitor status |
| π Token Table | Sortable columns, filter pills (Online/Exhausted/Offline/Unknown), icon actions |
| π° Quota Column | Per-token breakdown β Pro remaining, Research quota, Agentic research |
| β€οΈ Health Monitor | Zero-cost checks via rate-limit API, configurable interval |
| π± Telegram Alerts | Notifications on token state changes (expired, exhausted, back online) |
| π Fallback Toggle | Enable/disable automatic Pro β free fallback |
| π₯ Import/Export | Bulk token management via JSON config files |
| π Log Viewer | Live streaming, level filter (Error/Warning/Info/Debug), search, follow mode |
| π§ͺ Test Button | Run health check on individual tokens or all at once |
By default, the server uses anonymous Perplexity sessions (rate limited). For Pro access, add your session tokens.
- Sign in at perplexity.ai
- Open DevTools (F12) β Application β Cookies
- Copy these two cookies:
next-auth.csrf-tokennext-auth.session-token
Create token_pool_config.json in the project root:
{
"tokens": [
{
"id": "my-account",
"csrf_token": "your-csrf-token-here",
"session_token": "your-session-token-here"
}
]
}Add multiple accounts for round-robin rotation with automatic failover:
{
"monitor": {
"enable": true,
"interval": 6,
"tg_bot_token": "optional-telegram-bot-token",
"tg_chat_id": "optional-chat-id"
},
"fallback": {
"fallback_to_auto": true
},
"tokens": [
{ "id": "account-1", "csrf_token": "...", "session_token": "..." },
{ "id": "account-2", "csrf_token": "...", "session_token": "..." },
{ "id": "account-3", "csrf_token": "...", "session_token": "..." }
]
}Note
Session tokens last ~30 days. The monitor detects expired tokens and alerts you via Telegram.
| Variable | Default | Description |
|---|---|---|
PERPLEXITY_TIMEOUT |
900 |
Request timeout in seconds (15 min for deep research) |
SOCKS_PROXY |
β | SOCKS5 proxy URL (socks5://host:port) |
Token state is computed automatically from session_valid + rate_limits (never set manually):
| State | Meaning | Badge | Behavior |
|---|---|---|---|
π’ normal |
Session valid, pro quota available | Online | Used for all requests |
π‘ exhausted |
Session valid, pro quota = 0 | Exhausted | Skipped for Pro, used as auto fallback |
π΄ offline |
Session invalid/expired | Offline | Not used for any requests |
π΅ unknown |
Not yet checked | Unknown | Used normally (quota assumed available) |
When a Pro request fails, the server tries progressively:
1. β
Next client with Pro quota (round-robin)
2. β
Next client with Pro quota ...
3. π‘ Any available client (auto mode)
4. π΅ Anonymous session (auto mode)
5. β Error returned to caller
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Your AI Assistant (Claude Code / Cursor / Windsurf) β
ββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββ
β MCP (stdio)
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β perplexity-mcp β
β ββββββββββββββββββ ββββββββββββββββββββββββββββββββββ β
β β tools.py β β server.py β β
β β β’ ask ββββ β’ Pool state sync β β
β β β’ research β β β’ Timeout handling β β
β ββββββββββββββββββ ββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Backend Engine (perplexity/) β
β β
β βββββββββββββββ ββββββββββββββββ ββββββββββββββββββ β
β β client.py β β client_pool β β admin.py β β
β β β’ Search β β β’ Rotation β β β’ REST API β β
β β β’ Upload β β β’ Backoff β β β’ Static β β
β β β’ Validate β β β’ Monitor β β files β β
β ββββββββ¬ββββββββ β β’ Fallback β ββββββββββ¬ββββββββ β
β β ββββββββββββββββ β β
β βΌ βΌ β
β βββββββββββββββ ββββββββββββββββββ β
β β Perplexity β β React Admin UI β β
β β (web API) β β :8123/admin/ β β
β βββββββββββββββ ββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
| Component | File | Role |
|---|---|---|
| MCP Server | src/server.py |
Stdio transport, pool state sync, timeout handling |
| Tool Definitions | src/tools.py |
2 MCP tools with LLM-optimized descriptions |
| API Client | perplexity/client.py |
Perplexity API via curl_cffi (bypasses Cloudflare) |
| Client Pool | perplexity/server/client_pool.py |
Round-robin, backoff, monitor, state persistence |
| Query Engine | perplexity/server/app.py |
Rotation loop, 3-level fallback, validation |
| Admin API | perplexity/server/admin.py |
REST endpoints + static file serving |
| Admin UI | perplexity/server/web/ |
React + Vite + Tailwind dashboard |
# Install in development mode
uv pip install -e ".[dev]" --python .venv/bin/python
# Run unit tests (53 tests)
.venv/bin/python -m pytest tests/ -v
# Frontend development
cd perplexity/server/web
npm install
npm run dev # Dev server with proxy to :8123
npm run build # Production buildsrc/ # MCP stdio server (thin wrapper)
server.py # Entry point, pool state sync
tools.py # Tool definitions
perplexity/ # Backend engine
client.py # Perplexity API client (curl_cffi)
config.py # Constants, endpoints, model mappings
exceptions.py # Custom exception hierarchy
logger.py # Centralized logging
server/
app.py # Starlette app, query engine
client_pool.py # ClientPool, rotation, monitor
admin.py # Admin REST API
utils.py # Validation helpers
main.py # HTTP server entry point
web/ # React admin frontend (Vite + Tailwind)
tests/ # 53 unit tests
- Unofficial β uses Perplexity's web interface, may break if they change it
- Cookie-based auth β session tokens expire after ~30 days
- Rate limits β anonymous sessions have strict query limits
- Deep research β takes 2-5 minutes per query (this is normal)