mcp server for querying perplexity pro via webui session token.
this package is a local mcp wrapper (stdio transport) that launches the upstream perplexity-webui-scraper mcp server via uvx.
by default it pins the upstream runner to:
perplexity-webui-scraper[mcp]@git+https://github.com/henrique-coder/perplexity-webui-scraper.git@prod
override that only if you need to test a different upstream build:
PERPLEXITY_UPSTREAM_FROM="perplexity-webui-scraper[mcp]@git+https://github.com/henrique-coder/perplexity-webui-scraper.git@<ref>" \
PERPLEXITY_SESSION_TOKEN="your_token_here" \
npx perplexity-webui-mcpmanual run:
PERPLEXITY_SESSION_TOKEN="your_token_here" npx perplexity-webui-mcpmanual run through a proxy:
PERPLEXITY_SESSION_TOKEN="your_token_here" \
PERPLEXITY_PROXY_URL="socks5://127.0.0.1:1080" \
npx perplexity-webui-mcpmanual run with flaresolverr:
docker run -d --name flaresolverr -p 8191:8191 ghcr.io/flaresolverr/flaresolverr:latest
PERPLEXITY_SESSION_TOKEN="your_token_here" \
PERPLEXITY_FLARESOLVERR_URL="http://127.0.0.1:8191" \
npx perplexity-webui-mcpimportant: this uses perplexity's internal webui api with a session cookie. for personal/local tinkering only - not affiliated with perplexity ai.
perplexity-webui-mcp is a local stdio mcp wrapper that launches the upstream perplexity-webui-scraper mcp server through uvx. this keeps the package on npm while using the upstream webui implementation for browser impersonation, retry logic, model-specific tools, and token tooling.
paste this into your llm agent session:
Install and configure perplexity-webui-mcp by following the instructions here:
https://raw.githubusercontent.com/Microck/perplexity-webui-mcp/refs/heads/master/INSTALL.md
npm (recommended)
npm install -g perplexity-webui-mcpruntime requirement:
uv --versionif uv is missing, install it from https://docs.astral.sh/uv/getting-started/installation/
from source
git clone https://github.com/Microck/perplexity-webui-mcp.git
cd perplexity-webui-mcp
npm install
npm run buildfastest method (automatic via CLI):
uvx --with rich --from "perplexity-webui-scraper@git+https://github.com/henrique-coder/perplexity-webui-scraper.git@prod" get-perplexity-session-tokenthis interactive CLI asks for your email, handles OTP/magic-link verification, and prints the session token.
you can run that command from any directory.
manual method (browser):
- open perplexity.ai in your browser and log in
- open devtools (f12 or cmd+opt+i)
- go to application > cookies >
https://www.perplexity.ai - copy the value of
__Secure-next-auth.session-token
powered by token extraction flow from: https://github.com/henrique-coder/perplexity-webui-scraper
because this server uses stdio, you configure it as a local command and pass the token via env.
proxy support:
- standard proxy env vars already pass through:
HTTP_PROXY,HTTPS_PROXY,ALL_PROXY,NO_PROXYand their lowercase variants - for a simpler single-value setup, set
PERPLEXITY_PROXY_URL; the wrapper expands it into the standard proxy env vars before launching the upstream MCP server - optional bypass list:
PERPLEXITY_NO_PROXY - if perplexity keeps returning cloudflare challenge pages, set
PERPLEXITY_FLARESOLVERR_URLto a running flaresolverr instance. the wrapper solveshttps://www.perplexity.ai/search/new, injects the returned cookies into the upstreamcurl_cffisession, and stops forwarding the standard proxy env vars in that mode - optional flaresolverr overrides:
PERPLEXITY_FLARESOLVERR_SOLVE_URL- alternate url to solve first. default:https://www.perplexity.ai/search/newPERPLEXITY_FLARESOLVERR_MAX_TIMEOUT- flaresolverr solve timeout in milliseconds. default:60000
note: deep research can take longer than 60 seconds. if your client supports it, set a higher timeout (example: 10 minutes).
mcp client config (claude desktop, opencode, etc)
{
"mcpServers": {
"perplexity": {
"command": "perplexity-webui-mcp",
"timeout": 600000,
"env": {
"PERPLEXITY_SESSION_TOKEN": "your_session_token_here",
"PERPLEXITY_FLARESOLVERR_URL": "http://127.0.0.1:8191"
}
}
}
}from source
{
"mcpServers": {
"perplexity": {
"command": "node",
"args": ["/path/to/perplexity-webui-mcp/dist/index.js"],
"timeout": 600000,
"env": {
"PERPLEXITY_SESSION_TOKEN": "your_session_token_here",
"PERPLEXITY_FLARESOLVERR_URL": "http://127.0.0.1:8191"
}
}
}
}start flaresolverr:
docker run -d --name flaresolverr -p 8191:8191 ghcr.io/flaresolverr/flaresolverr:latest
curl http://127.0.0.1:8191/then point the wrapper at it:
PERPLEXITY_SESSION_TOKEN="your_token_here" \
PERPLEXITY_FLARESOLVERR_URL="http://127.0.0.1:8191" \
npx perplexity-webui-mcpflaresolverr mode:
- the wrapper solves the cloudflare wall in flaresolverr first, then injects the returned cookies into the upstream session
- the wrapper does not forward
HTTP_PROXY,HTTPS_PROXY,ALL_PROXY, orNO_PROXYto the upstream process in this mode because the solved cookies need to stay tied to the flaresolverr browser route - if flaresolverr itself needs a proxy, configure that on the flaresolverr side instead of on
perplexity-webui-mcp
if your cloud machine gets blocked by cloudflare but your home machine works, run the upstream mcp server on the home machine and connect to it from opencode as a remote mcp.
- copy templates from this repo:
deploy/systemd/perplexity-webui-mcp.env.exampledeploy/systemd/perplexity-webui-mcp-sse.shdeploy/systemd/perplexity-webui-mcp.service
- install and enable service on the home machine (user service):
mkdir -p ~/.config ~/.config/systemd/user ~/.local/bin
cp deploy/systemd/perplexity-webui-mcp.env.example ~/.config/perplexity-webui-mcp.env
cp deploy/systemd/perplexity-webui-mcp-sse.sh ~/.local/bin/perplexity-webui-mcp-sse.sh
cp deploy/systemd/perplexity-webui-mcp.service ~/.config/systemd/user/perplexity-webui-mcp.service
chmod 600 ~/.config/perplexity-webui-mcp.env
chmod 755 ~/.local/bin/perplexity-webui-mcp-sse.sh
systemctl --user daemon-reload
systemctl --user enable --now perplexity-webui-mcp.service- point opencode (cloud host) to the tailscale endpoint:
{
"mcp": {
"perplexity-webui": {
"type": "remote",
"url": "http://<tailscale-ip>:8790/sse",
"enabled": true,
"timeout": 600000,
"oauth": false
}
}
}- verify:
opencode mcp list| tool | description |
|---|---|
pplx_ask |
best-model query (auto model selection) |
pplx_deep_research |
deep research mode |
pplx_sonar |
sonar model |
pplx_gpt54 / pplx_gpt54_thinking |
gpt-5.4 variants |
pplx_claude_o46 / pplx_claude_o46_think |
claude opus 4.6 variants |
pplx_claude_s46 / pplx_claude_s46_think |
claude sonnet 4.6 variants |
pplx_gemini31_pro / pplx_gemini31_pro_think |
gemini 3.1 pro variants |
pplx_gemini_flash / pplx_gemini_flash_think |
gemini flash variants |
pplx_grok41 / pplx_grok41_think |
grok 4.1 variants |
pplx_nemotron3_super_think |
nemotron 3 super thinking |
all upstream model tools support source_focus values: web, academic, social, finance, all.
- old v1.0.0: one custom tool (
perplexity_search) implemented in local TypeScript HTTP logic. - current: delegates to upstream
perplexity-webui-scraperMCP, exposing the full upstream model-specific toolset. - result: significantly better compatibility with Perplexity anti-bot protections.
| problem | solution |
|---|---|
| token invalid / 401 | get a fresh token from browser cookies |
uvx not found |
install uv (uv --version should work) |
| no answer returned | check rate limits or whether your account can access the selected model |
| clarifying questions error | deep research mode may request clarifying questions first |
cloudflare challenge / Just a moment... |
run flaresolverr and set PERPLEXITY_FLARESOLVERR_URL=http://127.0.0.1:8191 |
| timeout | deep research can take several minutes - be patient |
PERPLEXITY_SESSION_TOKEN="your_token_here" npm run self-testthis checks both:
- regular search (
best) - deep research (
deep-research)
and prints pass/fail per mode.
perplexity-webui-mcp/
├── deploy/
│ └── systemd/
│ ├── perplexity-webui-mcp.env.example
│ ├── perplexity-webui-mcp-sse.sh
│ └── perplexity-webui-mcp.service
├── src/
│ └── index.ts # proxy launcher for upstream MCP
├── package.json
├── tsconfig.json
├── .env.example
├── .gitignore
├── LICENSE
├── INSTALL.md
└── README.md
mit
special thanks to henrique-coder/perplexity-webui-scraper for the WebUI reverse-engineering and token CLI workflow that helped this project.