Skip to main content
Glama
validation.ts3.02 kB
import { z } from 'zod'; // MCP Message schemas export const MCPRequestSchema = z.object({ jsonrpc: z.literal('2.0'), id: z.union([z.string(), z.number()]).optional(), // ID is optional for notifications method: z.string(), params: z.any().optional() }); export const MCPResponseSchema = z.object({ jsonrpc: z.literal('2.0'), id: z.union([z.string(), z.number()]), result: z.any().optional(), error: z.object({ code: z.number(), message: z.string(), data: z.any().optional() }).optional() }); // Tool input schemas export const LocalLLMInputSchema = z.object({ provider: z.enum(['ollama', 'lmstudio']), model: z.string(), prompt: z.string(), temperature: z.number().min(0).max(2).optional(), stream: z.boolean().optional() }); export const CodeExecuteInputSchema = z.object({ cmd: z.string(), args: z.array(z.string()).optional(), cwd: z.string().optional(), timeoutMs: z.number().default(15000) }); // AI Coordination schemas export const InitializeConversationSchema = z.object({ title: z.string(), objective: z.string(), orchestrator: z.enum(["claude", "openai", "replit"]).default("claude"), participants: z.array(z.string()).default(["claude", "openai", "replit"]), context: z.object({}).default({}) }); export const SendMessageSchema = z.object({ session_id: z.string(), participant: z.enum(["claude", "openai", "replit"]), message_type: z.enum(["discussion", "proposal", "agreement", "objection", "question", "decision", "task_assignment"]).default("discussion"), content: z.string(), context: z.object({}).default({}), references_message_id: z.number().optional() }); export const PlanningSessionSchema = z.object({ session_id: z.string(), planning_objective: z.string(), participants: z.array(z.string()), planning_context: z.object({}).default({}) }); export const TaskAssignmentSchema = z.object({ session_id: z.string(), assigned_to: z.enum(["claude", "openai", "replit"]), assigned_by: z.enum(["claude", "openai", "replit"]), task_description: z.string(), task_type: z.string(), parameters: z.object({}).default({}), planning_session_id: z.number().optional() }); export const GetConversationStatusSchema = z.object({ session_id: z.string(), include_full_history: z.boolean().default(false) }); export const TaskUpdateSchema = z.object({ task_id: z.number(), status: z.enum(["assigned", "in_progress", "completed", "failed", "delegated"]), result: z.object({}).default({}), message: z.string().optional() }); // Tool response schemas export const ToolResponseSchema = z.object({ content: z.array(z.object({ type: z.literal('text'), text: z.string() })) }); export type MCPRequest = z.infer<typeof MCPRequestSchema>; export type MCPResponse = z.infer<typeof MCPResponseSchema>; export type LocalLLMInput = z.infer<typeof LocalLLMInputSchema>; export type CodeExecuteInput = z.infer<typeof CodeExecuteInputSchema>; export type ToolResponse = z.infer<typeof ToolResponseSchema>;

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/bermingham85/mcp-puppet-pipeline'

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