Support non-containerized MCP servers via externalUrl field and add streamable-http session management for HA MCP proof of concept. - Add externalUrl, command, containerPort fields to McpServer schema - Skip Docker orchestration for external servers (virtual instances) - Implement streamable-http proxy with Mcp-Session-Id session management - Parse SSE-framed responses from streamable-http endpoints - Add command passthrough to Docker container creation - Create HA MCP example manifest (examples/ha-mcp.yaml) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
37 lines
1.6 KiB
TypeScript
37 lines
1.6 KiB
TypeScript
import { z } from 'zod';
|
|
|
|
const EnvTemplateEntrySchema = z.object({
|
|
name: z.string().min(1).max(100),
|
|
description: z.string().max(500).default(''),
|
|
isSecret: z.boolean().default(false),
|
|
setupUrl: z.string().url().optional(),
|
|
});
|
|
|
|
export const CreateMcpServerSchema = z.object({
|
|
name: z.string().min(1).max(100).regex(/^[a-z0-9-]+$/, 'Name must be lowercase alphanumeric with hyphens'),
|
|
description: z.string().max(1000).default(''),
|
|
packageName: z.string().max(200).optional(),
|
|
dockerImage: z.string().max(200).optional(),
|
|
transport: z.enum(['STDIO', 'SSE', 'STREAMABLE_HTTP']).default('STDIO'),
|
|
repositoryUrl: z.string().url().optional(),
|
|
externalUrl: z.string().url().optional(),
|
|
command: z.array(z.string()).optional(),
|
|
containerPort: z.number().int().min(1).max(65535).optional(),
|
|
envTemplate: z.array(EnvTemplateEntrySchema).default([]),
|
|
});
|
|
|
|
export const UpdateMcpServerSchema = z.object({
|
|
description: z.string().max(1000).optional(),
|
|
packageName: z.string().max(200).nullable().optional(),
|
|
dockerImage: z.string().max(200).nullable().optional(),
|
|
transport: z.enum(['STDIO', 'SSE', 'STREAMABLE_HTTP']).optional(),
|
|
repositoryUrl: z.string().url().nullable().optional(),
|
|
externalUrl: z.string().url().nullable().optional(),
|
|
command: z.array(z.string()).nullable().optional(),
|
|
containerPort: z.number().int().min(1).max(65535).nullable().optional(),
|
|
envTemplate: z.array(EnvTemplateEntrySchema).optional(),
|
|
});
|
|
|
|
export type CreateMcpServerInput = z.infer<typeof CreateMcpServerSchema>;
|
|
export type UpdateMcpServerInput = z.infer<typeof UpdateMcpServerSchema>;
|