UNPKG

xai-live-search-mcp

Version:

🔥 xAI Live Search integration for Claude Code via MCP - BEAST MODE!

85 lines • 3.63 kB
import { z } from 'zod'; // xAI Official Live Search API Types (based on official docs) export const XAIMessageSchema = z.object({ role: z.enum(['user', 'assistant', 'system']), content: z.string(), }); // Search Parameters Schema (from official docs) export const SearchSourceSchema = z.object({ type: z.enum(['web', 'x', 'news', 'rss']), country: z.string().optional(), // ISO alpha-2 code for web/news excluded_websites: z.array(z.string()).max(5).optional(), // max 5 websites for web/news safe_search: z.boolean().optional(), // web/news safe search (default: true) x_handles: z.array(z.string()).optional(), // X handles for X search links: z.array(z.string()).optional(), // RSS feed URLs (max 1 currently) }); export const SearchParametersSchema = z.object({ mode: z.enum(['auto', 'on', 'off']).default('auto'), sources: z.array(SearchSourceSchema).optional(), // defaults to web + x return_citations: z.boolean().optional(), from_date: z.string().optional(), // ISO8601 format YYYY-MM-DD to_date: z.string().optional(), // ISO8601 format YYYY-MM-DD max_search_results: z.number().min(1).max(50).default(20), }); export const XAIChatCompletionSchema = z.object({ id: z.string(), object: z.literal('chat.completion'), created: z.number(), model: z.string(), choices: z.array(z.object({ index: z.number(), message: XAIMessageSchema, finish_reason: z.string().optional(), })), usage: z.object({ prompt_tokens: z.number(), completion_tokens: z.number(), total_tokens: z.number(), }), citations: z.array(z.string()).optional(), // URLs from live search }); export const XAIApiErrorSchema = z.object({ error: z.object({ message: z.string(), type: z.string().optional(), code: z.string().optional(), }), }); // Configuration Types export const XAIConfigSchema = z.object({ apiKey: z.string(), baseUrl: z.string().default('https://api.x.ai'), model: z.string().default('grok-3-latest'), // Updated to official model name maxTokens: z.number().default(4096), temperature: z.number().min(0).max(2).default(0.7), }); // MCP Tool Parameter Types export const LiveSearchParamsSchema = z.object({ query: z.string().min(1, 'Query cannot be empty'), mode: z.enum(['auto', 'on', 'off']).default('auto'), sources: z.array(z.enum(['web', 'x', 'news', 'rss'])).optional(), maxResults: z.number().min(1).max(50).default(20), returnCitations: z.boolean().default(true), fromDate: z.string().optional(), // YYYY-MM-DD format toDate: z.string().optional(), // YYYY-MM-DD format country: z.string().optional(), // ISO alpha-2 code excludedWebsites: z.array(z.string()).max(5).optional(), safeSearch: z.boolean().default(true), xHandles: z.array(z.string()).optional(), rssLinks: z.array(z.string()).optional(), }); export const ChatWithSearchParamsSchema = z.object({ message: z.string().min(1, 'Message cannot be empty'), searchMode: z.enum(['auto', 'on', 'off']).default('auto'), sources: z.array(z.enum(['web', 'x', 'news', 'rss'])).optional(), returnCitations: z.boolean().default(true), maxSearchResults: z.number().min(1).max(50).default(10), fromDate: z.string().optional(), toDate: z.string().optional(), country: z.string().optional(), excludedWebsites: z.array(z.string()).max(5).optional(), safeSearch: z.boolean().default(true), xHandles: z.array(z.string()).optional(), rssLinks: z.array(z.string()).optional(), }); //# sourceMappingURL=types.js.map