Lightweight MCP server for searching Perplexity.ai via browser automation
The server defines 3 tools with explicit schemas and descriptions visible in src/index.ts. All tools have non-empty descriptions (104-218 chars, within the 10-1024 baseline). Tool names follow verb_noun convention (search, search_advanced, login). However, there are significant gaps: (1) No output schema documentation, what fields do search results contain? What format are sources? (2) Parameter descriptions lack actionable constraints, search accepts any string with no guidance on format, length, or when to use search vs search_advanced. (3) search_advanced sources enum is documented but the multi-source behavior lacks clarity on how results are combined or prioritized. (4) No error handling guidance, what happens if Perplexity is unavailable, authentication fails mid-search, or timeouts occur? (5) login tool parameters are an empty object with no description of what triggers browser launch or what 'authenticated' means to the user. (6) The formatResult() function returns plain text; no structured output schema is exposed to the agent. (7) Missing dependency hints: search_advanced should state 'Use this when you need academic or social sources; prefer search for general queries', but doesn't guide when one is better. The server lands at the fair/poor boundary: descriptions exist but lack LLM optimization, schemas are incomplete (no output structure), and error recovery paths are absent.
Check if you are authenticated on Perplexity.ai. If not, opens a browser window so you can log in.
Search the web using Perplexity.ai and get an AI-synthesized answer with cited sources. Uses default Perplexity settings.
Search Perplexity.ai with specific source selection. Lets you combine multiple sources (e.g. web + academic). Use this when source control matters; prefer `search` for general queries.
No output schema documented. Tools return formatted text strings; agents cannot extract structured fields (answer, sources, URLs) for chaining. formatResult() produces markdown but response type is unspecified.
search parameter lacks actionable constraints. Description says 'The search query' but does not specify format, length limits, or examples of good/bad queries. No guidance on when multi-word queries work best.
login tool has empty parameter schema (z.object({})) and vague description. Does not explain what 'authenticated' means, when login is required, or how long authentication persists. No guidance on error recovery if login times out.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 55 | - | v1 |
No error handling guidance. Code references TIMEOUT_MS (20 seconds default) and auth failures but does not document what errors agents should expect or how to recover (retry, call login, escalate). Agents have no actionable next steps.
search vs search_advanced distinction is weak. Description of search_advanced says 'Use this when source control matters' but does not clarify what 'source control' means or when search_advanced yields better results than search. Agents may waste calls trying both.
search_advanced sources parameter is an enum ['web', 'academic', 'social'] but does not explain how results differ between sources or how multiple sources interact. Does the tool return combined results, ranked results, or separate sections per source?
No pagination or result limits documented. search() returns a formatted string with sources appended. If Perplexity returns 50+ sources, does the tool cap them, return all, or paginate? No limit is stated; unbounded responses risk token exhaustion.