Zero-dependency MCP server for Perplexity's Agent API. Exposes multi-step web research with citations to any MCP client over stdio.
Two tools with complete input schemas and descriptions, but descriptions are generic and lack LLM-optimized guidance. perplexity_agent_research has 7 parameters with types and descriptions (good coverage), but descriptions lack actionable context (e.g., what 'preset' values mean in practice, when to use 'wide-research' vs 'high'). perplexity_agent_cancel is minimal but functional. No output schemas documented. No error handling guidance. No tool annotations (readOnlyHint/destructiveHint). Naming is clear (verb_noun pattern). Missing: composition guidance, recovery hints, and structured output documentation.
Cancel an in-progress research run by response ID
Execute a research query using Perplexity's Agent API with configurable depth and source filtering
Output schemas not documented. LLMs cannot plan downstream calls or extract structured data from research results. No documentation of what fields the response contains (e.g., sources, citations, answer structure).
Tool descriptions lack LLM-optimized guidance. 'Execute a research query...' is functional but does not explain WHEN to use this tool vs alternatives, what 'preset' values mean in practice, or what the agent should expect in the response. Descriptions should be 50-200 chars with clear intent signals.
No error handling guidance. If a research query times out, returns no results, or hits rate limits, the tool provides no recovery hints. Error responses should guide the LLM: 'Timeout after 55s. Try reducing preset to "low" or increasing timeout to 120s.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
No tool annotations. perplexity_agent_research is read-only (should have readOnlyHint=true); perplexity_agent_cancel is destructive (should have destructiveHint=true). Annotations help LLMs reason about side effects and retry safety.
Parameter descriptions lack constraint details. 'preset' accepts 6 values but description does not explain what each means (e.g., 'fast' = shallow, 'xhigh' = exhaustive). 'domains' accepts up to 20 items but no guidance on format (FQDN? with/without protocol?). 'timeout' has max 300s but no minimum stated.