Skip to main content
Glama
index.ts4.91 kB
import { z } from 'zod'; // Common schemas const EnvVarSchema = z.object({ key: z.string().min(1), value: z.string(), description: z.string().optional(), }); const GitRepositorySchema = z.object({ url: z.string().url(), branch: z.string().optional(), commitSha: z.string().optional(), }); // Project schemas export const ListProjectsSchema = z.object({ teamId: z.string().optional(), }); export const CreateProjectSchema = z.object({ name: z.string().min(1).max(255), description: z.string().optional(), teamId: z.string().optional(), }); // Application schemas export const ListAppsSchema = z.object({ projectId: z.string().min(1), }); export const GetAppSchema = z.object({ id: z.string().min(1), }); export const CreateAppSchema = z.object({ projectId: z.string().min(1), name: z.string().min(1).max(255), description: z.string().optional(), type: z.enum(['dockerfile', 'image', 'compose']), gitRepository: GitRepositorySchema.optional(), dockerImage: z.string().optional(), dockerCompose: z.string().optional(), environment: z.record(z.string()).optional(), ports: z.array(z.number().int().positive()).optional(), }); export const UpdateAppSchema = z.object({ id: z.string().min(1), name: z.string().min(1).max(255).optional(), description: z.string().optional(), environment: z.record(z.string()).optional(), ports: z.array(z.number().int().positive()).optional(), }); export const DeleteAppSchema = z.object({ id: z.string().min(1), }); // Deployment schemas export const DeployAppSchema = z.object({ id: z.string().min(1), force: z.boolean().default(false), }); export const GetDeploymentStatusSchema = z.object({ deploymentId: z.string().min(1), }); export const GetDeploymentLogsSchema = z.object({ deploymentId: z.string().min(1), lines: z.number().int().positive().max(1000).optional().default(100), }); // Template schemas export const TemplateEnvVarSchema = z.object({ key: z.string().min(1), description: z.string(), required: z.boolean(), defaultValue: z.string().optional(), }); export const DeployTemplateSchema = z.object({ templateName: z.string().min(1), projectId: z.string().min(1), appName: z.string().min(1).max(255), environment: z.record(z.string()), gitRepo: z.string().url().optional(), dockerImage: z.string().optional(), buildType: z.enum(['dockerfile', 'image', 'compose']).default('dockerfile'), branch: z.string().optional(), overwrite: z.boolean().default(false), }); // Safety schemas export const CheckQuotaSchema = z.object({ projectId: z.string().min(1), }); export const CheckNameConflictsSchema = z.object({ projectId: z.string().min(1), name: z.string().min(1), }); // Response schemas for validation export const ProjectResponseSchema = z.object({ id: z.string(), name: z.string(), description: z.string().nullable(), teamId: z.string().nullable(), createdAt: z.string(), updatedAt: z.string(), }); export const ApplicationResponseSchema = z.object({ id: z.string(), name: z.string(), description: z.string().nullable(), projectId: z.string(), type: z.enum(['dockerfile', 'image', 'compose']), gitRepository: GitRepositorySchema.nullable(), dockerImage: z.string().nullable(), dockerCompose: z.string().nullable(), environment: z.record(z.string()), ports: z.array(z.number()), domains: z.array(z.string()), status: z.enum(['running', 'stopped', 'error', 'deploying']), createdAt: z.string(), updatedAt: z.string(), }); export const DeploymentResponseSchema = z.object({ id: z.string(), applicationId: z.string(), status: z.enum(['pending', 'running', 'success', 'failed']), logs: z.array(z.string()), startedAt: z.string(), completedAt: z.string().nullable(), url: z.string().nullable(), }); export const QuotaCheckResponseSchema = z.object({ withinLimit: z.boolean(), currentApps: z.number(), maxApps: z.number(), projectId: z.string(), }); export const NameConflictCheckResponseSchema = z.object({ isAvailable: z.boolean(), conflictingApp: ApplicationResponseSchema.optional(), projectName: z.string().optional(), }); // Error response schema export const ErrorResponseSchema = z.object({ code: z.string(), message: z.string(), details: z.any().optional(), }); // Template metadata schema export const TemplateMetadataSchema = z.object({ name: z.string(), description: z.string(), source: z.object({ type: z.enum(['git', 'docker_image']), repository: z.string().optional(), branch: z.string().optional(), image: z.string().optional(), }), buildType: z.enum(['dockerfile', 'image', 'compose']), ports: z.array(z.number()), requiredEnvVars: z.array(TemplateEnvVarSchema), optionalServices: z.array(z.enum(['postgres', 'redis', 'mysql', 'mongo'])).optional(), iconUrl: z.string().url().optional(), tags: z.array(z.string()).optional(), });

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/Thedurancode/Coolify-MCP'

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