Perplexity MCP Server
Perplexity MCP Server
Python MCP server that exposes Perplexity Sonar Chat Completions to any MCP client (Cursor, Claude Desktop, custom agents).
Tools
Tool | Default model | Purpose |
|
| General web search |
|
| Comprehensive synthesis |
Both tools accept optional Sonar parameters and return JSON:
{
"answer": "...",
"citations": ["https://..."],
"search_results": [],
"model": "sonar-pro",
"usage": {}
}Optional parameters
Parameter | Values / format | When to use |
|
| Lower = more focused; raise only for more varied phrasing |
|
| Cap answer length; omit for API default |
|
| News / “latest” questions; omit for evergreen topics |
|
| Absolute start of publication window |
|
| Absolute end of publication window |
| up to 20 domains; allowlist or | Trusted sources only, or exclude noisy sites |
|
| Papers ( |
|
| Override tool default only when you need a different speed/depth tradeoff |
Prefer date filters over search_recency_filter when the window is known exactly. Queries are capped at 4,000 characters. The API key is never logged or returned in tool output.
Setup
Copy env template and add your Perplexity API key:
cp .env.example .envInstall with uv:
uv syncRun locally (stdio)
uv run mcp-perplexityCursor / Claude Desktop
Add to your MCP config (adjust the project path):
{
"mcpServers": {
"perplexity": {
"command": "uv",
"args": ["--directory", "C:/Users/KozakJ/git/mcp_perplexity", "run", "mcp-perplexity"],
"env": {
"PERPLEXITY_API_KEY": "pplx-your-api-key-here"
}
}
}
}Or rely on a .env file in the project directory (PERPLEXITY_API_KEY=...).
Cursor / Claude Desktop (container, stdio)
Rebuild after image changes, then only the API key is required — other settings use the same defaults as local runs:
{
"mcpServers": {
"perplexity": {
"command": "podman",
"args": [
"run", "-i", "--rm",
"-e", "PERPLEXITY_API_KEY",
"mcp-perplexity"
],
"env": {
"PERPLEXITY_API_KEY": "pplx-your-api-key-here"
}
}
}
}Override any setting the same way (-e MCP_PORT, etc.) only when you need non-defaults.
Run with Podman (streamable HTTP)
podman compose needs a compose provider (podman-compose or Docker Compose). On a plain Podman install, use build + run:
podman build -t mcp-perplexity .
podman run --rm -p 8000:8000 --env-file .env ^
-e MCP_TRANSPORT=streamable-http ^
-e MCP_HOST=0.0.0.0 ^
-e MCP_PORT=8000 ^
--name mcp-perplexity mcp-perplexity(On bash/zsh, replace ^ with \.)
If you have a compose provider installed (pip install podman-compose, or Docker Compose):
podman compose up --buildEndpoint: http://localhost:8000/mcp (Streamable HTTP). Bind to trusted networks only — this image does not add HTTP auth.
Configuration
Variable | Default | Description |
| (required) | Perplexity API key |
|
|
|
|
| HTTP bind host |
|
| HTTP bind port |
|
| Soft client-side requests/minute limit |
|
| Max concurrent API calls |
|
| Search timeout (seconds) |
|
| Deep research timeout (seconds) |
|
| Retries on 429/5xx and transport errors |
Retries use exponential backoff (honors Retry-After when present). Logging goes to stderr only so stdio JSON-RPC stays clean.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jujubytes-a11y/mcp_perplexity'
If you have feedback or need assistance with the MCP directory API, please join our Discord server