UNPKG

perplexity-mcp-server

Version:

A Perplexity API Model Context Protocol (MCP) server that unlocks Perplexity's search-augmented AI capabilities for LLM agents. Features robust error handling, secure input validation, and transparent reasoning with the showThinking parameter. Built with

284 lines (283 loc) 10.7 kB
import { z } from 'zod'; import { RequestContext } from '../utils/index.js'; export declare const PerplexityChatCompletionRequestSchema: z.ZodObject<{ model: z.ZodEnum<["sonar", "sonar-pro", "sonar-reasoning", "sonar-reasoning-pro", "sonar-deep-research"]>; messages: z.ZodArray<z.ZodObject<{ role: z.ZodEnum<["system", "user", "assistant"]>; content: z.ZodString; }, "strip", z.ZodTypeAny, { role: "system" | "user" | "assistant"; content: string; }, { role: "system" | "user" | "assistant"; content: string; }>, "many">; max_tokens: z.ZodOptional<z.ZodNumber>; temperature: z.ZodOptional<z.ZodNumber>; top_p: z.ZodOptional<z.ZodNumber>; top_k: z.ZodOptional<z.ZodNumber>; stream: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>; presence_penalty: z.ZodOptional<z.ZodNumber>; frequency_penalty: z.ZodOptional<z.ZodNumber>; return_images: z.ZodOptional<z.ZodBoolean>; return_related_questions: z.ZodOptional<z.ZodBoolean>; response_format: z.ZodOptional<z.ZodObject<{ type: z.ZodEnum<["json_object"]>; }, "strip", z.ZodTypeAny, { type: "json_object"; }, { type: "json_object"; }>>; web_search_options: z.ZodOptional<z.ZodObject<{ search_context_size: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>; search_domain_filter: z.ZodOptional<z.ZodArray<z.ZodString, "many">>; search_recency_filter: z.ZodOptional<z.ZodEnum<["last_day", "last_week", "last_month", "last_year"]>>; search_after_date_filter: z.ZodOptional<z.ZodString>; search_before_date_filter: z.ZodOptional<z.ZodString>; }, "strip", z.ZodTypeAny, { search_context_size?: "low" | "medium" | "high" | undefined; search_domain_filter?: string[] | undefined; search_recency_filter?: "last_day" | "last_week" | "last_month" | "last_year" | undefined; search_after_date_filter?: string | undefined; search_before_date_filter?: string | undefined; }, { search_context_size?: "low" | "medium" | "high" | undefined; search_domain_filter?: string[] | undefined; search_recency_filter?: "last_day" | "last_week" | "last_month" | "last_year" | undefined; search_after_date_filter?: string | undefined; search_before_date_filter?: string | undefined; }>>; search_domain_filter: z.ZodOptional<z.ZodArray<z.ZodString, "many">>; search_recency_filter: z.ZodOptional<z.ZodString>; search_after_date_filter: z.ZodOptional<z.ZodString>; search_before_date_filter: z.ZodOptional<z.ZodString>; search_mode: z.ZodOptional<z.ZodEnum<["web", "academic"]>>; reasoning_effort: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>; }, "strip", z.ZodTypeAny, { model: "sonar-reasoning-pro" | "sonar" | "sonar-pro" | "sonar-reasoning" | "sonar-deep-research"; messages: { role: "system" | "user" | "assistant"; content: string; }[]; stream: boolean; search_domain_filter?: string[] | undefined; search_recency_filter?: string | undefined; search_after_date_filter?: string | undefined; search_before_date_filter?: string | undefined; max_tokens?: number | undefined; temperature?: number | undefined; top_p?: number | undefined; top_k?: number | undefined; presence_penalty?: number | undefined; frequency_penalty?: number | undefined; return_images?: boolean | undefined; return_related_questions?: boolean | undefined; response_format?: { type: "json_object"; } | undefined; web_search_options?: { search_context_size?: "low" | "medium" | "high" | undefined; search_domain_filter?: string[] | undefined; search_recency_filter?: "last_day" | "last_week" | "last_month" | "last_year" | undefined; search_after_date_filter?: string | undefined; search_before_date_filter?: string | undefined; } | undefined; search_mode?: "web" | "academic" | undefined; reasoning_effort?: "low" | "medium" | "high" | undefined; }, { model: "sonar-reasoning-pro" | "sonar" | "sonar-pro" | "sonar-reasoning" | "sonar-deep-research"; messages: { role: "system" | "user" | "assistant"; content: string; }[]; search_domain_filter?: string[] | undefined; search_recency_filter?: string | undefined; search_after_date_filter?: string | undefined; search_before_date_filter?: string | undefined; max_tokens?: number | undefined; temperature?: number | undefined; top_p?: number | undefined; top_k?: number | undefined; stream?: boolean | undefined; presence_penalty?: number | undefined; frequency_penalty?: number | undefined; return_images?: boolean | undefined; return_related_questions?: boolean | undefined; response_format?: { type: "json_object"; } | undefined; web_search_options?: { search_context_size?: "low" | "medium" | "high" | undefined; search_domain_filter?: string[] | undefined; search_recency_filter?: "last_day" | "last_week" | "last_month" | "last_year" | undefined; search_after_date_filter?: string | undefined; search_before_date_filter?: string | undefined; } | undefined; search_mode?: "web" | "academic" | undefined; reasoning_effort?: "low" | "medium" | "high" | undefined; }>; export type PerplexityChatCompletionRequest = z.infer<typeof PerplexityChatCompletionRequestSchema>; declare const FinalResponsePayloadSchema: z.ZodObject<{ id: z.ZodString; model: z.ZodString; created: z.ZodNumber; usage: z.ZodObject<{ prompt_tokens: z.ZodNumber; completion_tokens: z.ZodNumber; total_tokens: z.ZodNumber; search_context_size: z.ZodOptional<z.ZodString>; citation_tokens: z.ZodOptional<z.ZodNumber>; num_search_queries: z.ZodOptional<z.ZodNumber>; reasoning_tokens: z.ZodOptional<z.ZodNumber>; }, "strip", z.ZodTypeAny, { prompt_tokens: number; completion_tokens: number; total_tokens: number; search_context_size?: string | undefined; citation_tokens?: number | undefined; num_search_queries?: number | undefined; reasoning_tokens?: number | undefined; }, { prompt_tokens: number; completion_tokens: number; total_tokens: number; search_context_size?: string | undefined; citation_tokens?: number | undefined; num_search_queries?: number | undefined; reasoning_tokens?: number | undefined; }>; object: z.ZodLiteral<"chat.completion">; choices: z.ZodArray<z.ZodObject<{ index: z.ZodNumber; finish_reason: z.ZodString; message: z.ZodObject<{ role: z.ZodEnum<["system", "user", "assistant"]>; content: z.ZodString; }, "strip", z.ZodTypeAny, { role: "system" | "user" | "assistant"; content: string; }, { role: "system" | "user" | "assistant"; content: string; }>; delta: z.ZodOptional<z.ZodObject<{ role: z.ZodOptional<z.ZodString>; content: z.ZodOptional<z.ZodString>; }, "strip", z.ZodTypeAny, { role?: string | undefined; content?: string | undefined; }, { role?: string | undefined; content?: string | undefined; }>>; }, "strip", z.ZodTypeAny, { message: { role: "system" | "user" | "assistant"; content: string; }; index: number; finish_reason: string; delta?: { role?: string | undefined; content?: string | undefined; } | undefined; }, { message: { role: "system" | "user" | "assistant"; content: string; }; index: number; finish_reason: string; delta?: { role?: string | undefined; content?: string | undefined; } | undefined; }>, "many">; citations: z.ZodOptional<z.ZodArray<z.ZodString, "many">>; search_results: z.ZodOptional<z.ZodArray<z.ZodObject<{ title: z.ZodString; url: z.ZodString; date: z.ZodOptional<z.ZodString>; }, "strip", z.ZodTypeAny, { url: string; title: string; date?: string | undefined; }, { url: string; title: string; date?: string | undefined; }>, "many">>; }, "strip", z.ZodTypeAny, { object: "chat.completion"; model: string; usage: { prompt_tokens: number; completion_tokens: number; total_tokens: number; search_context_size?: string | undefined; citation_tokens?: number | undefined; num_search_queries?: number | undefined; reasoning_tokens?: number | undefined; }; id: string; created: number; choices: { message: { role: "system" | "user" | "assistant"; content: string; }; index: number; finish_reason: string; delta?: { role?: string | undefined; content?: string | undefined; } | undefined; }[]; citations?: string[] | undefined; search_results?: { url: string; title: string; date?: string | undefined; }[] | undefined; }, { object: "chat.completion"; model: string; usage: { prompt_tokens: number; completion_tokens: number; total_tokens: number; search_context_size?: string | undefined; citation_tokens?: number | undefined; num_search_queries?: number | undefined; reasoning_tokens?: number | undefined; }; id: string; created: number; choices: { message: { role: "system" | "user" | "assistant"; content: string; }; index: number; finish_reason: string; delta?: { role?: string | undefined; content?: string | undefined; } | undefined; }[]; citations?: string[] | undefined; search_results?: { url: string; title: string; date?: string | undefined; }[] | undefined; }>; export type PerplexityChatCompletionResponse = z.infer<typeof FinalResponsePayloadSchema>; declare class PerplexityApiService { private axiosInstance; private apiKey; constructor(); chatCompletion(requestData: PerplexityChatCompletionRequest, context: RequestContext): Promise<PerplexityChatCompletionResponse>; } export declare const perplexityApiService: PerplexityApiService; export {};