Skip to main content
Glama
letsbuildagent

Perplexity Tool for Claude Desktop

ask_perplexity

Get answers to questions with citations by querying Perplexity AI through Claude Desktop for web-based research and information retrieval.

Instructions

Ask a question to Perplexity AI

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
questionYesThe question to ask
temperatureNoResponse randomness (0-2)
max_tokensNoMaximum tokens in response
search_domain_filterNoLimit search to specific domains
search_recency_filterNoFilter results by recencymonth

Implementation Reference

  • The core handler function for the 'ask_perplexity' tool. It destructures arguments, makes a POST request to the Perplexity API, processes the response including answer, citations, and token usage, and returns a formatted string.
    async function askPerplexity(args) { const { question, temperature = 0.2, max_tokens = 1000, search_domain_filter = [], search_recency_filter = "month" } = args; const response = await fetch("https://api.perplexity.ai/chat/completions", { method: "POST", headers: { "Authorization": `Bearer ${PERPLEXITY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ model: "llama-3.1-sonar-small-128k-online", messages: [ { role: "system", content: "You are a world-class researcher with strong attention to details" }, { role: "user", content: question } ], max_tokens, temperature, top_p: 0.9, stream: false, search_domain_filter, search_recency_filter, return_images: false, return_related_questions: false, frequency_penalty: 1, presence_penalty: 0 }) }); if (!response.ok) { throw new Error(`Perplexity API error: ${response.status} ${response.statusText}`); } const result = await response.json(); // Extract answer and citations const answer = result.choices[0].message.content; const citations = result.citations || []; const tokenUsage = result.usage || {}; // Format response const fullResponse = [ `Answer: ${answer}\n`, "\nSources:", ...citations.map((citation, i) => `${i + 1}. ${citation}`), "\nToken Usage:", `- Prompt tokens: ${tokenUsage.prompt_tokens || 'N/A'}`, `- Completion tokens: ${tokenUsage.completion_tokens || 'N/A'}`, `- Total tokens: ${tokenUsage.total_tokens || 'N/A'}` ].join('\n'); return fullResponse; }
  • The tool definition object containing the name, description, and inputSchema for validating arguments to 'ask_perplexity'.
    const PERPLEXITY_TOOL = { name: "ask_perplexity", description: "Ask a question to Perplexity AI", inputSchema: { type: "object", properties: { question: { type: "string", description: "The question to ask" }, temperature: { type: "number", description: "Response randomness (0-2)", default: 0.2 }, max_tokens: { type: "integer", description: "Maximum tokens in response", default: 1000 }, search_domain_filter: { type: "array", items: { type: "string" }, description: "Limit search to specific domains", default: [] }, search_recency_filter: { type: "string", enum: ["day", "week", "month", "year"], description: "Filter results by recency", default: "month" } }, required: ["question"], }, };
  • server.js:115-117 (registration)
    Registration of the tool in the ListToolsRequestSchema handler, exposing the PERPLEXITY_TOOL schema to clients.
    server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: [PERPLEXITY_TOOL], }));
  • The MCP CallToolRequestSchema handler that dispatches to askPerplexity based on tool name and handles errors.
    server.setRequestHandler(CallToolRequestSchema, async (request) => { try { const { name, arguments: args } = request.params; if (!args) { throw new Error("No arguments provided"); } if (name === "ask_perplexity") { if (!isPerplexityArgs(args)) { throw new Error("Invalid arguments for ask_perplexity"); } const results = await askPerplexity(args); return { content: [{ type: "text", text: results }], isError: false, }; } return { content: [{ type: "text", text: `Unknown tool: ${name}` }], isError: true, }; } catch (error) { return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}`, }, ], isError: true, }; } });
  • Helper function to validate arguments for the ask_perplexity tool.
    function isPerplexityArgs(args) { return (typeof args === "object" && args !== null && "question" in args && typeof args.question === "string"); }

Other Tools

Latest Blog Posts

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/letsbuildagent/perplexity-tool'

If you have feedback or need assistance with the MCP directory API, please join our Discord server