@pluggedin/pluggedin-mcp-proxy
Version:
Unified MCP proxy that aggregates all your MCP servers (STDIO, SSE, Streamable HTTP) into one powerful interface. Access any tool through a single connection, search across unified documents with built-in RAG, and receive notifications from any model. Tes
103 lines (102 loc) • 4.7 kB
JavaScript
import { z } from "zod";
// Define the static discovery tool schema using Zod
export const DiscoverToolsInputSchema = z.object({
server_uuid: z.string().uuid().optional().describe("Optional UUID of a specific server to discover. If omitted, attempts to discover all."),
force_refresh: z.boolean().optional().default(false).describe("Set to true to bypass cache and force a fresh discovery. Defaults to false."),
}).describe("Triggers tool discovery for configured MCP servers in the Pluggedin App.");
// Define the static RAG query tool schema using Zod
export const RagQueryInputSchema = z.object({
query: z.string()
.min(1, "Query cannot be empty")
.max(1000, "Query too long")
.describe("The RAG query to perform."),
}).describe("Performs a RAG query against documents in the authenticated user's project.");
// Input schema for send notification validation
export const SendNotificationInputSchema = z.object({
title: z.string().optional(),
message: z.string().min(1, "Message cannot be empty"),
severity: z.enum(["INFO", "SUCCESS", "WARNING", "ALERT"]).default("INFO"),
link: z.string().url().optional(),
email: z.boolean().default(false),
});
// Input schema for list notifications validation
export const ListNotificationsInputSchema = z.object({
limit: z.number().int().min(1).max(100).default(20),
unreadOnly: z.boolean().default(false),
severity: z.enum(["INFO", "SUCCESS", "WARNING", "ALERT"]).optional(),
});
// Input schema for mark notification read validation
export const MarkNotificationReadInputSchema = z.object({
notificationId: z.string().min(1, "Notification ID cannot be empty"),
});
// Input schema for delete notification validation
export const DeleteNotificationInputSchema = z.object({
notificationId: z.string().min(1, "Notification ID cannot be empty"),
});
// Input schema for create document validation
export const CreateDocumentInputSchema = z.object({
title: z.string().min(1).max(255),
content: z.string().min(1),
format: z.enum(["md", "txt", "json", "html"]).default("md"),
tags: z.array(z.string()).max(20).optional(),
category: z.enum(["report", "analysis", "documentation", "guide", "research", "code", "other"]).default("other"),
metadata: z.object({
model: z.object({
name: z.string(),
provider: z.string(),
version: z.string().optional(),
}),
context: z.string().optional(),
visibility: z.enum(["private", "workspace", "public"]).default("private"),
}),
});
// Input schema for list documents validation
export const ListDocumentsInputSchema = z.object({
filters: z.object({
source: z.enum(["all", "upload", "ai_generated", "api"]).default("all"),
modelName: z.string().optional(),
modelProvider: z.string().optional(),
dateFrom: z.string().datetime().optional(),
dateTo: z.string().datetime().optional(),
tags: z.array(z.string()).optional(),
category: z.enum(["report", "analysis", "documentation", "guide", "research", "code", "other"]).optional(),
searchQuery: z.string().optional(),
}).optional(),
sort: z.enum(["date_desc", "date_asc", "title", "size"]).default("date_desc"),
limit: z.number().int().min(1).max(100).default(20),
offset: z.number().int().min(0).default(0),
});
// Define the search documents input schema using Zod
export const SearchDocumentsInputSchema = z.object({
query: z.string().min(1).max(500),
filters: z.object({
modelName: z.string().optional(),
modelProvider: z.string().optional(),
dateFrom: z.string().datetime().optional(),
dateTo: z.string().datetime().optional(),
tags: z.array(z.string()).optional(),
source: z.enum(["all", "upload", "ai_generated", "api"]).default("all"),
}).optional(),
limit: z.number().int().min(1).max(50).default(10),
});
// Define the get document input schema using Zod
export const GetDocumentInputSchema = z.object({
documentId: z.string().uuid(),
includeContent: z.boolean().default(false),
includeVersions: z.boolean().default(false),
});
// Define the update document input schema using Zod
export const UpdateDocumentInputSchema = z.object({
documentId: z.string().uuid(),
operation: z.enum(["replace", "append", "prepend"]),
content: z.string().min(1),
metadata: z.object({
tags: z.array(z.string()).optional(),
changeSummary: z.string().optional(),
model: z.object({
name: z.string(),
provider: z.string(),
version: z.string().optional(),
}),
}).optional(),
});