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
116 lines (115 loc) • 4.24 kB
TypeScript
import { z } from 'zod';
import { RequestContext } from '../utils/requestContext.js';
export declare const PerplexityChatCompletionRequestSchema: z.ZodObject<{
model: z.ZodString;
messages: z.ZodArray<z.ZodObject<{
role: z.ZodEnum<["system", "user", "assistant"]>;
content: z.ZodString;
}, "strip", z.ZodTypeAny, {
role: "user" | "assistant" | "system";
content: string;
}, {
role: "user" | "assistant" | "system";
content: string;
}>, "many">;
max_tokens: z.ZodOptional<z.ZodNumber>;
temperature: z.ZodOptional<z.ZodNumber>;
top_p: z.ZodOptional<z.ZodNumber>;
search_domain_filter: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
return_images: z.ZodOptional<z.ZodBoolean>;
return_related_questions: z.ZodOptional<z.ZodBoolean>;
search_recency_filter: z.ZodOptional<z.ZodString>;
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>;
response_format: z.ZodOptional<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;
web_search_options: z.ZodOptional<z.ZodObject<{
search_context_size: z.ZodOptional<z.ZodEnum<["low", "medium", "high"]>>;
}, "strip", z.ZodTypeAny, {
search_context_size?: "high" | "low" | "medium" | undefined;
}, {
search_context_size?: "high" | "low" | "medium" | undefined;
}>>;
}, "strip", z.ZodTypeAny, {
model: string;
messages: {
role: "user" | "assistant" | "system";
content: string;
}[];
stream: boolean;
max_tokens?: number | undefined;
temperature?: number | undefined;
top_p?: number | undefined;
search_domain_filter?: string[] | undefined;
return_images?: boolean | undefined;
return_related_questions?: boolean | undefined;
search_recency_filter?: string | undefined;
top_k?: number | undefined;
presence_penalty?: number | undefined;
frequency_penalty?: number | undefined;
response_format?: {} | undefined;
web_search_options?: {
search_context_size?: "high" | "low" | "medium" | undefined;
} | undefined;
}, {
model: string;
messages: {
role: "user" | "assistant" | "system";
content: string;
}[];
max_tokens?: number | undefined;
temperature?: number | undefined;
top_p?: number | undefined;
search_domain_filter?: string[] | undefined;
return_images?: boolean | undefined;
return_related_questions?: boolean | undefined;
search_recency_filter?: string | undefined;
top_k?: number | undefined;
stream?: boolean | undefined;
presence_penalty?: number | undefined;
frequency_penalty?: number | undefined;
response_format?: {} | undefined;
web_search_options?: {
search_context_size?: "high" | "low" | "medium" | undefined;
} | undefined;
}>;
export type PerplexityChatCompletionRequest = z.infer<typeof PerplexityChatCompletionRequestSchema>;
export interface PerplexityChatCompletionResponse {
id: string;
model: string;
created: number;
usage: {
prompt_tokens: number;
completion_tokens: number;
total_tokens: number;
};
choices: Array<{
index: number;
finish_reason: string;
message: {
role: 'assistant';
content: string;
};
delta?: {
role?: 'assistant';
content?: string;
};
}>;
}
declare class PerplexityApiService {
private axiosInstance;
private apiKey;
private readonly apiBaseUrl;
constructor();
/**
* Calls the Perplexity Chat Completions API.
* @param requestData - The validated request data conforming to PerplexityChatCompletionRequest.
* @param context - The request context for logging and error tracking.
* @returns The Perplexity API response.
* @throws {McpError} If the API call fails or returns an error.
*/
chatCompletion(requestData: PerplexityChatCompletionRequest, context: RequestContext): Promise<PerplexityChatCompletionResponse>;
}
export declare const perplexityApiService: PerplexityApiService;
export {};