Skip to main content
Glama
document-schemas.ts6.33 kB
import { z } from 'zod'; // Content format validation export const ContentFormatSchema = z.enum([ 'markdown', 'html', 'text/md', 'text/plain', 'text/html' ]); // Document creation schema export const CreateDocSchema = z.object({ workspace_id: z.string().optional(), space_id: z.string().optional(), folder_id: z.string().optional(), name: z.string().min(1, 'Document name is required').max(255, 'Document name too long'), content: z.string().optional(), public: z.boolean().optional().default(false), template_id: z.string().optional() }).refine(data => data.workspace_id || data.space_id || data.folder_id, { message: 'Must specify workspace_id, space_id, or folder_id', path: ['workspace_id'] } ); // Document update schema export const UpdateDocSchema = z.object({ name: z.string().min(1, 'Document name cannot be empty').max(255, 'Document name too long').optional(), content: z.string().optional(), public: z.boolean().optional() }).refine(data => data.name !== undefined || data.content !== undefined || data.public !== undefined, { message: 'Must specify at least one field to update', path: ['name'] } ); // Page creation schema export const CreatePageSchema = z.object({ name: z.string().min(1, 'Page name is required').max(255, 'Page name too long'), content: z.string().min(1, 'Page content is required'), content_format: z.enum(['markdown', 'html']).optional().default('markdown'), parent_page_id: z.string().optional(), position: z.number().int().min(0, 'Position must be non-negative').optional() }); // Page update schema export const UpdatePageSchema = z.object({ name: z.string().min(1, 'Page name cannot be empty').max(255, 'Page name too long').optional(), content: z.string().optional(), content_format: z.enum(['markdown', 'html']).optional(), position: z.number().int().min(0, 'Position must be non-negative').optional() }).refine(data => data.name !== undefined || data.content !== undefined || data.content_format !== undefined || data.position !== undefined, { message: 'Must specify at least one field to update', path: ['name'] } ); // Sharing configuration schema export const SharingConfigSchema = z.object({ public: z.boolean().optional(), public_share_expires_on: z.number().int().positive('Expiration must be a positive timestamp').optional(), public_fields: z.array(z.string()).optional(), team_sharing: z.boolean().optional(), guest_sharing: z.boolean().optional() }).refine(data => Object.keys(data).length > 0, { message: 'Must specify at least one sharing setting to update', path: ['public'] } ); // Template creation schema export const CreateFromTemplateSchema = z.object({ workspace_id: z.string().optional(), space_id: z.string().optional(), folder_id: z.string().optional(), name: z.string().min(1, 'Document name is required').max(255, 'Document name too long'), template_variables: z.record(z.any()).optional() }).refine(data => data.workspace_id || data.space_id || data.folder_id, { message: 'Must specify workspace_id, space_id, or folder_id', path: ['workspace_id'] } ); // Get docs parameters schema export const GetDocsParamsSchema = z.object({ cursor: z.string().optional(), deleted: z.boolean().optional().default(false), archived: z.boolean().optional().default(false), limit: z.number().int().min(1).max(100).optional().default(50) }); // Search docs parameters schema export const SearchDocsParamsSchema = z.object({ query: z.string().min(1, 'Search query is required'), cursor: z.string().optional() }); // Document ID validation export const DocIdSchema = z.string().min(1, 'Document ID is required'); // Page ID validation export const PageIdSchema = z.string().min(1, 'Page ID is required'); // Workspace ID validation export const WorkspaceIdSchema = z.string().min(1, 'Workspace ID is required'); // Combined schemas for tool validation export const DocumentToolSchemas = { // Document operations createDoc: CreateDocSchema, updateDoc: z.object({ doc_id: DocIdSchema, name: z.string().min(1).optional(), content: z.string().optional(), public: z.boolean().optional() }), deleteDoc: z.object({ doc_id: DocIdSchema }), getDoc: z.object({ doc_id: DocIdSchema }), // Page operations createPage: z.object({ doc_id: DocIdSchema, name: z.string().min(1), content: z.string().optional(), content_format: z.enum(['markdown', 'html']).optional().default('markdown'), position: z.number().min(0).optional() }), updatePage: z.object({ doc_id: DocIdSchema, page_id: PageIdSchema, name: z.string().min(1).optional(), content: z.string().optional(), content_format: z.enum(['markdown', 'html']).optional(), position: z.number().min(0).optional() }), deletePage: z.object({ doc_id: DocIdSchema, page_id: PageIdSchema }), getPage: z.object({ doc_id: DocIdSchema, page_id: PageIdSchema, content_format: ContentFormatSchema.optional() }), // Sharing operations getDocSharing: z.object({ doc_id: DocIdSchema }), updateDocSharing: z.object({ doc_id: DocIdSchema, public: z.boolean().optional(), public_share_expires_on: z.number().optional(), public_fields: z.array(z.string()).optional(), team_sharing: z.boolean().optional(), guest_sharing: z.boolean().optional() }), // Template operations createDocFromTemplate: z.object({ template_id: z.string().min(1, 'Template ID is required'), workspace_id: z.string().optional(), space_id: z.string().optional(), folder_id: z.string().optional(), name: z.string().min(1), template_variables: z.record(z.any()).optional() }), // Read operations getDocsFromWorkspace: z.object({ workspace_id: WorkspaceIdSchema, cursor: z.string().optional(), deleted: z.boolean().optional().default(false), archived: z.boolean().optional().default(false), limit: z.number().min(1).max(100).optional().default(25) }), getDocPages: z.object({ workspace_id: WorkspaceIdSchema, doc_id: DocIdSchema, content_format: ContentFormatSchema.optional().default('text/md') }), searchDocs: z.object({ workspace_id: WorkspaceIdSchema, query: z.string().min(1), cursor: 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/Chykalophia/ClickUp-MCP-Server---Enhanced'

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