@docrouter/mcp 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["z","Server","DocRouterOrg","ListToolsRequestSchema","CallToolRequestSchema","fileURLToPath","dirname","join","readFileSync","StdioServerTransport"],"mappings":"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","file":"index.js","sourcesContent":["#!/usr/bin/env node\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n Tool,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { z } from 'zod';\nimport { DocRouterOrg } from '@docrouter/sdk';\nimport { readFileSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { fileURLToPath } from 'url';\n\n// Configuration schema\nconst ConfigSchema = z.object({\n baseURL: z.string().default('https://app.docrouter.ai/fastapi'),\n organizationId: z.string(),\n orgToken: z.string(),\n timeout: z.number().default(30000),\n retries: z.number().default(3),\n});\n\ntype Config = z.infer<typeof ConfigSchema>;\n\n// Parse command line arguments and environment variables\nfunction parseConfig(): Config {\n const args = process.argv.slice(2);\n const config: Partial<Config> = {};\n\n // Parse command line arguments\n for (let i = 0; i < args.length; i += 2) {\n const key = args[i]?.replace('--', '');\n const value = args[i + 1];\n if (key && value) {\n switch (key) {\n case 'url':\n config.baseURL = value;\n break;\n case 'org-id':\n config.organizationId = value;\n break;\n case 'org-token':\n config.orgToken = value;\n break;\n case 'timeout':\n config.timeout = parseInt(value, 10);\n break;\n case 'retries':\n config.retries = parseInt(value, 10);\n break;\n }\n }\n }\n\n // Fall back to environment variables\n config.baseURL = config.baseURL || process.env.DOCROUTER_API_URL || 'https://app.docrouter.ai/fastapi';\n config.organizationId = config.organizationId || process.env.DOCROUTER_ORG_ID || '';\n config.orgToken = config.orgToken || process.env.DOCROUTER_ORG_API_TOKEN || '';\n\n return ConfigSchema.parse(config);\n}\n\n// Create the MCP server\nconst server = new Server(\n {\n name: 'docrouter-mcp',\n version: '0.1.0',\n },\n {\n capabilities: {\n tools: {},\n },\n }\n);\n\n// Global DocRouter client\nlet docrouterClient: DocRouterOrg;\n\n// Initialize DocRouter client\nfunction initializeClient(config: Config) {\n docrouterClient = new DocRouterOrg({\n baseURL: config.baseURL,\n orgToken: config.orgToken,\n organizationId: config.organizationId,\n timeout: config.timeout,\n retries: config.retries,\n });\n}\n\n// Helper function to handle errors\nfunction handleError(error: unknown): string {\n if (error instanceof Error) {\n return JSON.stringify({ error: error.message }, null, 2);\n }\n return JSON.stringify({ error: 'Unknown error occurred' }, null, 2);\n}\n\n// Helper function to serialize dates\nfunction serializeDates(obj: any): any {\n if (obj === null || obj === undefined) {\n return obj;\n }\n \n if (obj instanceof Date) {\n return obj.toISOString();\n }\n \n if (Array.isArray(obj)) {\n return obj.map(serializeDates);\n }\n \n if (typeof obj === 'object') {\n const result: any = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = serializeDates(value);\n }\n return result;\n }\n \n return obj;\n}\n\n// Helper function to safely get typed arguments\nfunction getArg<T>(args: Record<string, unknown>, key: string, defaultValue?: T): T {\n const value = args[key];\n if (value === undefined || value === null) {\n if (defaultValue !== undefined) {\n return defaultValue;\n }\n throw new Error(`Missing required argument: ${key}`);\n }\n return value as T;\n}\n\nfunction getOptionalArg<T>(args: Record<string, unknown>, key: string, defaultValue?: T): T | undefined {\n const value = args[key];\n if (value === undefined || value === null) {\n return defaultValue;\n }\n return value as T;\n}\n\n// Schema validation function\nfunction validateSchemaFormat(schema: any): { valid: boolean; errors: string[]; warnings: string[] } {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n try {\n // Check if schema is an object\n if (!schema || typeof schema !== 'object') {\n errors.push('Schema must be an object');\n return { valid: false, errors, warnings };\n }\n\n // Check for required top-level structure\n if (!schema.type || schema.type !== 'json_schema') {\n errors.push('Schema must have type: \"json_schema\"');\n }\n\n if (!schema.json_schema || typeof schema.json_schema !== 'object') {\n errors.push('Schema must have json_schema object');\n } else {\n const jsonSchema = schema.json_schema;\n\n // Check json_schema structure\n if (!jsonSchema.name || typeof jsonSchema.name !== 'string') {\n errors.push('json_schema must have a name field');\n }\n\n if (!jsonSchema.schema || typeof jsonSchema.schema !== 'object') {\n errors.push('json_schema must have a schema object');\n } else {\n const innerSchema = jsonSchema.schema;\n\n // Check inner schema structure\n if (innerSchema.type !== 'object') {\n errors.push('Inner schema type must be \"object\"');\n }\n\n if (!innerSchema.properties || typeof innerSchema.properties !== 'object') {\n errors.push('Schema must have properties object');\n }\n\n if (!Array.isArray(innerSchema.required)) {\n errors.push('Schema must have required array');\n }\n\n if (innerSchema.additionalProperties !== false) {\n errors.push('Schema must have additionalProperties: false');\n }\n\n // Check strict mode\n if (jsonSchema.strict !== true) {\n errors.push('Schema must have strict: true');\n }\n\n // Validate that all properties are in required array (strict mode requirement)\n if (innerSchema.properties && Array.isArray(innerSchema.required)) {\n const propertyNames = Object.keys(innerSchema.properties);\n const requiredNames = innerSchema.required;\n \n for (const propName of propertyNames) {\n if (!requiredNames.includes(propName)) {\n errors.push(`Property \"${propName}\" must be in required array (strict mode requirement)`);\n }\n }\n\n for (const reqName of requiredNames) {\n if (!propertyNames.includes(reqName)) {\n errors.push(`Required property \"${reqName}\" is not defined in properties`);\n }\n }\n }\n\n // Validate nested objects\n if (innerSchema.properties) {\n validateNestedObjects(innerSchema.properties, errors, warnings);\n }\n }\n }\n\n // Check for non-portable features (warnings)\n if (schema.json_schema?.schema?.properties) {\n checkForNonPortableFeatures(schema.json_schema.schema.properties, warnings);\n }\n\n } catch (error) {\n errors.push(`Schema validation error: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings\n };\n}\n\n// Helper function to validate nested objects\nfunction validateNestedObjects(properties: any, errors: string[], warnings: string[]): void {\n for (const [propName, propDef] of Object.entries(properties)) {\n if (typeof propDef === 'object' && propDef !== null) {\n const prop = propDef as any;\n \n if (prop.type === 'object') {\n if (!prop.properties || typeof prop.properties !== 'object') {\n errors.push(`Object property \"${propName}\" must have properties object`);\n }\n \n if (!Array.isArray(prop.required)) {\n errors.push(`Object property \"${propName}\" must have required array`);\n }\n \n if (prop.additionalProperties !== false) {\n errors.push(`Object property \"${propName}\" must have additionalProperties: false`);\n }\n\n // Recursively validate nested objects\n if (prop.properties) {\n validateNestedObjects(prop.properties, errors, warnings);\n }\n }\n \n if (prop.type === 'array' && prop.items) {\n if (prop.items.type === 'object') {\n if (!prop.items.properties || typeof prop.items.properties !== 'object') {\n errors.push(`Array items object \"${propName}\" must have properties object`);\n }\n \n if (!Array.isArray(prop.items.required)) {\n errors.push(`Array items object \"${propName}\" must have required array`);\n }\n \n if (prop.items.additionalProperties !== false) {\n errors.push(`Array items object \"${propName}\" must have additionalProperties: false`);\n }\n\n // Recursively validate nested objects in arrays\n if (prop.items.properties) {\n validateNestedObjects(prop.items.properties, errors, warnings);\n }\n }\n }\n }\n }\n}\n\n// Helper function to check for non-portable features\nfunction checkForNonPortableFeatures(properties: any, warnings: string[]): void {\n for (const [propName, propDef] of Object.entries(properties)) {\n if (typeof propDef === 'object' && propDef !== null) {\n const prop = propDef as any;\n\n // Check for enum (not recommended for portability)\n if (prop.enum) {\n warnings.push(`Property \"${propName}\" uses enum - consider using description instead for better portability`);\n }\n\n // Check for pattern (not recommended for portability)\n if (prop.pattern) {\n warnings.push(`Property \"${propName}\" uses pattern - consider using description instead for better portability`);\n }\n\n // Check for min/max constraints (not recommended for portability)\n if (prop.minimum !== undefined || prop.maximum !== undefined) {\n warnings.push(`Property \"${propName}\" uses min/max constraints - consider using description instead for better portability`);\n }\n\n if (prop.minItems !== undefined || prop.maxItems !== undefined) {\n warnings.push(`Property \"${propName}\" uses minItems/maxItems - consider using description instead for better portability`);\n }\n\n if (prop.uniqueItems !== undefined) {\n warnings.push(`Property \"${propName}\" uses uniqueItems - consider using description instead for better portability`);\n }\n\n // Recursively check nested objects\n if (prop.type === 'object' && prop.properties) {\n checkForNonPortableFeatures(prop.properties, warnings);\n }\n\n if (prop.type === 'array' && prop.items && prop.items.type === 'object' && prop.items.properties) {\n checkForNonPortableFeatures(prop.items.properties, warnings);\n }\n }\n }\n}\n\n// Form validation function\nfunction validateFormFormat(form: any): { valid: boolean; errors: string[]; warnings: string[] } {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n try {\n // Check if form is an object\n if (!form || typeof form !== 'object') {\n errors.push('Form must be an object');\n return { valid: false, errors, warnings };\n }\n\n // Check for required top-level structure\n if (!form.json_formio || !Array.isArray(form.json_formio)) {\n errors.push('Form must have json_formio array');\n return { valid: false, errors, warnings };\n }\n\n // Validate each component in the form\n validateFormComponents(form.json_formio, errors, warnings, '');\n\n // Validate field mappings if present\n if (form.json_formio_mapping) {\n validateFieldMappings(form.json_formio_mapping, form.json_formio, errors, warnings);\n }\n\n } catch (error) {\n errors.push(`Form validation error: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings\n };\n}\n\n// Helper function to validate Form.io components\nfunction validateFormComponents(components: any[], errors: string[], warnings: string[], path: string): void {\n const validFieldTypes = [\n 'textfield', 'email', 'number', 'select', 'textarea', 'checkbox',\n 'datetime', 'phoneNumber', 'panel', 'columns', 'fieldset', 'radio',\n 'selectboxes', 'currency', 'day', 'time', 'url', 'password', 'file'\n ];\n\n const collectedKeys = new Set<string>();\n\n for (let i = 0; i < components.length; i++) {\n const component = components[i];\n const componentPath = path ? `${path}[${i}]` : `component[${i}]`;\n\n if (!component || typeof component !== 'object') {\n errors.push(`${componentPath}: Component must be an object`);\n continue;\n }\n\n // Check required field: type\n if (!component.type) {\n errors.push(`${componentPath}: Component must have a \"type\" field`);\n } else if (!validFieldTypes.includes(component.type)) {\n warnings.push(`${componentPath}: Unknown field type \"${component.type}\" - may not render correctly`);\n }\n\n // For input components, validate key and label\n if (component.input === true || ['textfield', 'email', 'number', 'select', 'textarea', 'checkbox', 'datetime', 'phoneNumber'].includes(component.type)) {\n if (!component.key) {\n errors.push(`${componentPath}: Input component must have a \"key\" field`);\n } else {\n // Check for duplicate keys\n if (collectedKeys.has(component.key)) {\n errors.push(`${componentPath}: Duplicate key \"${component.key}\" found`);\n }\n collectedKeys.add(component.key);\n\n // Key should be valid identifier\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(component.key)) {\n warnings.push(`${componentPath}: Key \"${component.key}\" should be a valid identifier (alphanumeric and underscore only)`);\n }\n }\n\n if (!component.label) {\n warnings.push(`${componentPath}: Input component should have a \"label\" field for better UX`);\n }\n }\n\n // Validate select/dropdown fields\n if (component.type === 'select') {\n if (!component.data || !component.data.values) {\n errors.push(`${componentPath}: Select field must have data.values array`);\n } else if (!Array.isArray(component.data.values)) {\n errors.push(`${componentPath}: data.values must be an array`);\n } else if (component.data.values.length === 0) {\n warnings.push(`${componentPath}: Select field has empty values array`);\n }\n }\n\n // Validate nested components (panels, columns, etc.)\n if (component.type === 'panel' || component.type === 'fieldset') {\n if (!component.components || !Array.isArray(component.components)) {\n errors.push(`${componentPath}: ${component.type} must have components array`);\n } else {\n validateFormComponents(component.components, errors, warnings, `${componentPath}.components`);\n }\n }\n\n // Validate columns layout\n if (component.type === 'columns') {\n if (!component.columns || !Array.isArray(component.columns)) {\n errors.push(`${componentPath}: columns layout must have columns array`);\n } else {\n for (let j = 0; j < component.columns.length; j++) {\n const column = component.columns[j];\n if (!column.components || !Array.isArray(column.components)) {\n errors.push(`${componentPath}.columns[${j}]: Column must have components array`);\n } else {\n validateFormComponents(column.components, errors, warnings, `${componentPath}.columns[${j}].components`);\n }\n }\n }\n }\n\n // Check validation rules\n if (component.validate) {\n if (typeof component.validate !== 'object') {\n errors.push(`${componentPath}: validate must be an object`);\n }\n }\n }\n}\n\n// Helper function to validate field mappings\nfunction validateFieldMappings(mappings: any, formComponents: any[], errors: string[], warnings: string[]): void {\n if (typeof mappings !== 'object' || mappings === null) {\n errors.push('json_formio_mapping must be an object');\n return;\n }\n\n // Collect all field keys from form components\n const formKeys = new Set<string>();\n const collectKeys = (components: any[]) => {\n for (const comp of components) {\n if (comp.key) formKeys.add(comp.key);\n if (comp.components) collectKeys(comp.components);\n if (comp.columns) {\n for (const col of comp.columns) {\n if (col.components) collectKeys(col.components);\n }\n }\n }\n };\n collectKeys(formComponents);\n\n for (const [fieldKey, mapping] of Object.entries(mappings)) {\n if (!formKeys.has(fieldKey)) {\n warnings.push(`Mapping for \"${fieldKey}\" references a field key that doesn't exist in the form`);\n }\n\n if (typeof mapping !== 'object' || mapping === null) {\n errors.push(`Mapping for \"${fieldKey}\" must be an object`);\n continue;\n }\n\n const m = mapping as any;\n\n if (!m.sources || !Array.isArray(m.sources)) {\n errors.push(`Mapping for \"${fieldKey}\" must have sources array`);\n continue;\n }\n\n if (m.sources.length === 0) {\n warnings.push(`Mapping for \"${fieldKey}\" has empty sources array`);\n }\n\n for (let i = 0; i < m.sources.length; i++) {\n const source = m.sources[i];\n if (!source.promptId) {\n errors.push(`Mapping for \"${fieldKey}\".sources[${i}] must have promptId`);\n }\n if (!source.schemaFieldPath) {\n errors.push(`Mapping for \"${fieldKey}\".sources[${i}] must have schemaFieldPath`);\n }\n }\n\n if (!m.mappingType) {\n errors.push(`Mapping for \"${fieldKey}\" must have mappingType`);\n } else if (!['direct', 'concatenated'].includes(m.mappingType)) {\n errors.push(`Mapping for \"${fieldKey}\" has invalid mappingType \"${m.mappingType}\" (must be \"direct\" or \"concatenated\")`);\n }\n\n // Check concatenated mappings\n if (m.mappingType === 'concatenated' && m.sources.length < 2) {\n warnings.push(`Mapping for \"${fieldKey}\" is marked as concatenated but only has ${m.sources.length} source(s)`);\n }\n }\n}\n\n// Define tools - organized by category matching the SDK\nconst tools: Tool[] = [\n // ========== DOCUMENTS ==========\n {\n name: 'upload_documents',\n description: 'Upload documents to DocRouter',\n inputSchema: {\n type: 'object',\n properties: {\n documents: {\n type: 'array',\n description: 'Array of documents to upload',\n items: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'Document name' },\n content: { type: 'string', description: 'Base64 encoded document content' },\n type: { type: 'string', description: 'Document type (pdf, image, etc.)' },\n metadata: { type: 'object', description: 'Optional metadata' },\n },\n required: ['name', 'content', 'type'],\n },\n },\n },\n required: ['documents'],\n },\n },\n {\n name: 'list_documents',\n description: 'List documents from DocRouter',\n inputSchema: {\n type: 'object',\n properties: {\n skip: { type: 'number', description: 'Number of documents to skip', default: 0 },\n limit: { type: 'number', description: 'Number of documents to return', default: 10 },\n tagIds: { type: 'string', description: 'Comma-separated list of tag IDs to filter by' },\n nameSearch: { type: 'string', description: 'Search by document name' },\n metadataSearch: { type: 'string', description: 'Search by metadata' },\n },\n },\n },\n {\n name: 'get_document',\n description: 'Get document by ID from DocRouter',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document to retrieve' },\n fileType: { type: 'string', description: 'File type to retrieve (pdf, image, etc.)', default: 'pdf' },\n },\n required: ['documentId'],\n },\n },\n {\n name: 'update_document',\n description: 'Update document metadata',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document to update' },\n documentName: { type: 'string', description: 'New document name' },\n tagIds: { type: 'array', items: { type: 'string' }, description: 'Array of tag IDs' },\n metadata: { type: 'object', description: 'Document metadata' },\n },\n required: ['documentId'],\n },\n },\n {\n name: 'delete_document',\n description: 'Delete a document',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document to delete' },\n },\n required: ['documentId'],\n },\n },\n\n // ========== OCR ==========\n {\n name: 'get_ocr_blocks',\n description: 'Get OCR blocks for a document',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n },\n required: ['documentId'],\n },\n },\n {\n name: 'get_ocr_text',\n description: 'Get OCR text for a document',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n pageNum: { type: 'number', description: 'Optional page number' },\n },\n required: ['documentId'],\n },\n },\n {\n name: 'get_ocr_metadata',\n description: 'Get OCR metadata for a document',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n },\n required: ['documentId'],\n },\n },\n\n // ========== LLM ==========\n {\n name: 'run_llm',\n description: 'Run AI extraction on a document using a specific prompt',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n promptRevId: { type: 'string', description: 'ID of the prompt' },\n force: { type: 'boolean', description: 'Force re-extraction', default: false },\n },\n required: ['documentId', 'promptRevId'],\n },\n },\n {\n name: 'get_llm_result',\n description: 'Get LLM extraction results',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n promptRevId: { type: 'string', description: 'ID of the prompt' },\n fallback: { type: 'boolean', description: 'Use fallback results', default: false },\n },\n required: ['documentId', 'promptRevId'],\n },\n },\n {\n name: 'update_llm_result',\n description: 'Update LLM extraction results',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n promptId: { type: 'string', description: 'ID of the prompt' },\n result: { type: 'object', description: 'Updated result data' },\n isVerified: { type: 'boolean', description: 'Whether result is verified', default: false },\n },\n required: ['documentId', 'promptId', 'result'],\n },\n },\n {\n name: 'delete_llm_result',\n description: 'Delete LLM extraction results',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n promptId: { type: 'string', description: 'ID of the prompt' },\n },\n required: ['documentId', 'promptId'],\n },\n },\n\n // ========== TAGS ==========\n {\n name: 'create_tag',\n description: 'Create a new tag',\n inputSchema: {\n type: 'object',\n properties: {\n tag: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'Tag name' },\n color: { type: 'string', description: 'Tag color' },\n },\n required: ['name', 'color'],\n },\n },\n required: ['tag'],\n },\n },\n {\n name: 'get_tag',\n description: 'Get tag by ID',\n inputSchema: {\n type: 'object',\n properties: {\n tagId: { type: 'string', description: 'ID of the tag' },\n },\n required: ['tagId'],\n },\n },\n {\n name: 'list_tags',\n description: 'List all tags',\n inputSchema: {\n type: 'object',\n properties: {\n skip: { type: 'number', description: 'Number of tags to skip', default: 0 },\n limit: { type: 'number', description: 'Number of tags to return', default: 10 },\n nameSearch: { type: 'string', description: 'Search by tag name' },\n },\n },\n },\n {\n name: 'update_tag',\n description: 'Update a tag',\n inputSchema: {\n type: 'object',\n properties: {\n tagId: { type: 'string', description: 'ID of the tag' },\n tag: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'Tag name' },\n color: { type: 'string', description: 'Tag color' },\n },\n },\n },\n required: ['tagId', 'tag'],\n },\n },\n {\n name: 'delete_tag',\n description: 'Delete a tag',\n inputSchema: {\n type: 'object',\n properties: {\n tagId: { type: 'string', description: 'ID of the tag' },\n },\n required: ['tagId'],\n },\n },\n\n // ========== FORMS ==========\n {\n name: 'create_form',\n description: 'Create a new form',\n inputSchema: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'Form name' },\n response_format: { type: 'object', description: 'Form response format' },\n },\n required: ['name', 'response_format'],\n },\n },\n {\n name: 'list_forms',\n description: 'List all forms',\n inputSchema: {\n type: 'object',\n properties: {\n skip: { type: 'number', description: 'Number of forms to skip', default: 0 },\n limit: { type: 'number', description: 'Number of forms to return', default: 10 },\n tag_ids: { type: 'string', description: 'Comma-separated tag IDs' },\n },\n },\n },\n {\n name: 'get_form',\n description: 'Get form by ID',\n inputSchema: {\n type: 'object',\n properties: {\n formRevId: { type: 'string', description: 'ID of the form' },\n },\n required: ['formRevId'],\n },\n },\n {\n name: 'update_form',\n description: 'Update a form',\n inputSchema: {\n type: 'object',\n properties: {\n formId: { type: 'string', description: 'ID of the form' },\n form: { type: 'object', description: 'Form data' },\n },\n required: ['formId', 'form'],\n },\n },\n {\n name: 'delete_form',\n description: 'Delete a form',\n inputSchema: {\n type: 'object',\n properties: {\n formId: { type: 'string', description: 'ID of the form' },\n },\n required: ['formId'],\n },\n },\n {\n name: 'submit_form',\n description: 'Submit a form',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n formRevId: { type: 'string', description: 'ID of the form' },\n submission_data: { type: 'object', description: 'Form submission data' },\n submitted_by: { type: 'string', description: 'User who submitted' },\n },\n required: ['documentId', 'formRevId', 'submission_data'],\n },\n },\n {\n name: 'get_form_submission',\n description: 'Get form submission',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n formRevId: { type: 'string', description: 'ID of the form' },\n },\n required: ['documentId', 'formRevId'],\n },\n },\n {\n name: 'delete_form_submission',\n description: 'Delete form submission',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n formRevId: { type: 'string', description: 'ID of the form' },\n },\n required: ['documentId', 'formRevId'],\n },\n },\n\n // ========== PROMPTS ==========\n {\n name: 'create_prompt',\n description: 'Create a new prompt',\n inputSchema: {\n type: 'object',\n properties: {\n prompt: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'Prompt name' },\n content: { type: 'string', description: 'Prompt content' },\n },\n required: ['name', 'content'],\n },\n },\n required: ['prompt'],\n },\n },\n {\n name: 'list_prompts',\n description: 'List all prompts',\n inputSchema: {\n type: 'object',\n properties: {\n skip: { type: 'number', description: 'Number of prompts to skip', default: 0 },\n limit: { type: 'number', description: 'Number of prompts to return', default: 10 },\n document_id: { type: 'string', description: 'Filter by document ID' },\n tag_ids: { type: 'string', description: 'Comma-separated tag IDs' },\n nameSearch: { type: 'string', description: 'Search by prompt name' },\n },\n },\n },\n {\n name: 'get_prompt',\n description: 'Get prompt by ID',\n inputSchema: {\n type: 'object',\n properties: {\n promptRevId: { type: 'string', description: 'ID of the prompt' },\n },\n required: ['promptRevId'],\n },\n },\n {\n name: 'update_prompt',\n description: 'Update a prompt',\n inputSchema: {\n type: 'object',\n properties: {\n promptId: { type: 'string', description: 'ID of the prompt' },\n prompt: { type: 'object', description: 'Prompt data' },\n },\n required: ['promptId', 'prompt'],\n },\n },\n {\n name: 'delete_prompt',\n description: 'Delete a prompt',\n inputSchema: {\n type: 'object',\n properties: {\n promptId: { type: 'string', description: 'ID of the prompt' },\n },\n required: ['promptId'],\n },\n },\n\n // ========== SCHEMAS ==========\n {\n name: 'create_schema',\n description: 'Create a new schema',\n inputSchema: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'Schema name' },\n response_format: { type: 'object', description: 'Schema response format' },\n },\n required: ['name', 'response_format'],\n },\n },\n {\n name: 'list_schemas',\n description: 'List all schemas',\n inputSchema: {\n type: 'object',\n properties: {\n skip: { type: 'number', description: 'Number of schemas to skip', default: 0 },\n limit: { type: 'number', description: 'Number of schemas to return', default: 10 },\n nameSearch: { type: 'string', description: 'Search by schema name' },\n },\n },\n },\n {\n name: 'get_schema',\n description: 'Get schema by ID',\n inputSchema: {\n type: 'object',\n properties: {\n schemaRevId: { type: 'string', description: 'ID of the schema' },\n },\n required: ['schemaRevId'],\n },\n },\n {\n name: 'update_schema',\n description: 'Update a schema',\n inputSchema: {\n type: 'object',\n properties: {\n schemaId: { type: 'string', description: 'ID of the schema' },\n schema: { type: 'object', description: 'Schema data' },\n },\n required: ['schemaId', 'schema'],\n },\n },\n {\n name: 'delete_schema',\n description: 'Delete a schema',\n inputSchema: {\n type: 'object',\n properties: {\n schemaId: { type: 'string', description: 'ID of the schema' },\n },\n required: ['schemaId'],\n },\n },\n {\n name: 'validate_against_schema',\n description: 'Validate data against a schema',\n inputSchema: {\n type: 'object',\n properties: {\n schemaRevId: { type: 'string', description: 'ID of the schema' },\n data: { type: 'object', description: 'Data to validate' },\n },\n required: ['schemaRevId', 'data'],\n },\n },\n {\n name: 'validate_schema',\n description: 'Validate schema format for correctness and DocRouter compliance',\n inputSchema: {\n type: 'object',\n properties: {\n schema: { type: 'string', description: 'JSON string of the schema to validate' },\n },\n required: ['schema'],\n },\n },\n {\n name: 'validate_form',\n description: 'Validate Form.io form format for correctness and DocRouter compliance',\n inputSchema: {\n type: 'object',\n properties: {\n form: { type: 'string', description: 'JSON string of the form to validate' },\n },\n required: ['form'],\n },\n },\n\n\n\n // ========== LLM CHAT ==========\n {\n name: 'run_llm_chat',\n description: 'Run LLM chat',\n inputSchema: {\n type: 'object',\n properties: {\n messages: {\n type: 'array',\n description: 'Chat messages',\n items: {\n type: 'object',\n properties: {\n role: { type: 'string', enum: ['system', 'user', 'assistant'] },\n content: { type: 'string' },\n },\n required: ['role', 'content'],\n },\n },\n model: { type: 'string', description: 'Model to use' },\n temperature: { type: 'number', description: 'Temperature setting' },\n max_tokens: { type: 'number', description: 'Maximum tokens' },\n stream: { type: 'boolean', description: 'Enable streaming' },\n },\n required: ['messages'],\n },\n },\n\n // ========== HELPER TOOLS ==========\n {\n name: 'help',\n description: 'Get help information about using the API',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'help_prompts',\n description: 'Get help information about creating and configuring prompts in DocRouter',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'help_schemas',\n description: 'Get help information about creating and configuring schemas in DocRouter',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'help_forms',\n description: 'Get help information about creating and configuring forms in DocRouter',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n];\n\n// List tools handler\nserver.setRequestHandler(ListToolsRequestSchema, async () => {\n return { tools };\n});\n\n// Call tool handler\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n \n if (!args) {\n throw new Error('No arguments provided');\n }\n\n try {\n switch (name) {\n case 'list_documents': {\n const result = await docrouterClient.listDocuments({\n skip: getOptionalArg(args, 'skip', 0),\n limit: getOptionalArg(args, 'limit', 10),\n nameSearch: getOptionalArg(args, 'nameSearch'),\n tagIds: getOptionalArg(args, 'tagIds'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'get_document': {\n const result = await docrouterClient.getDocument({\n documentId: getArg(args, 'documentId'),\n fileType: getArg(args, 'fileType', 'pdf'),\n });\n \n // Convert ArrayBuffer to base64 for transmission\n const base64Content = Buffer.from(result.content).toString('base64');\n \n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({\n ...serializeDates(result),\n content: base64Content,\n content_type: 'base64',\n content_size: result.content.byteLength\n }, null, 2),\n },\n ],\n };\n }\n\n case 'get_ocr_text': {\n const result = await docrouterClient.getOCRText({\n documentId: getArg(args, 'documentId'),\n pageNum: getOptionalArg(args, 'pageNum'),\n });\n return {\n content: [\n {\n type: 'text',\n text: result,\n },\n ],\n };\n }\n\n case 'get_ocr_metadata': {\n const result = await docrouterClient.getOCRMetadata({\n documentId: getArg(args, 'documentId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'list_tags': {\n const result = await docrouterClient.listTags({\n skip: getOptionalArg(args, 'skip', 0),\n limit: getOptionalArg(args, 'limit', 10),\n nameSearch: getOptionalArg(args, 'nameSearch'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'get_tag': {\n const result = await docrouterClient.getTag({\n tagId: getArg(args, 'tagId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'list_prompts': {\n const result = await docrouterClient.listPrompts({\n skip: getOptionalArg(args, 'skip', 0),\n limit: getOptionalArg(args, 'limit', 10),\n nameSearch: getOptionalArg(args, 'nameSearch'),\n document_id: getOptionalArg(args, 'documentId'),\n tag_ids: getOptionalArg(args, 'tagIds'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'get_prompt': {\n const result = await docrouterClient.getPrompt({\n promptRevId: getArg(args, 'promptRevId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'get_llm_result': {\n const result = await docrouterClient.getLLMResult({\n documentId: getArg(args, 'documentId'),\n promptRevId: getArg(args, 'promptRevId'),\n fallback: getOptionalArg(args, 'fallback', false),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n\n case 'run_llm': {\n const result = await docrouterClient.runLLM({\n documentId: getArg(args, 'documentId'),\n promptRevId: getArg(args, 'promptRevId'),\n force: getOptionalArg(args, 'force', false),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n // ========== DOCUMENTS ==========\n case 'upload_documents': {\n const documentsInput = getArg(args, 'documents') as Array<{ name: string; content: string; type: string; metadata?: Record<string, string>; }>;\n const documents = documentsInput.map(doc => ({\n ...doc,\n content: Buffer.from(doc.content, 'base64')\n }));\n const result = await docrouterClient.uploadDocuments({ documents });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'update_document': {\n const result = await docrouterClient.updateDocument({\n documentId: getArg(args, 'documentId'),\n documentName: getOptionalArg(args, 'documentName'),\n tagIds: getOptionalArg(args, 'tagIds'),\n metadata: getOptionalArg(args, 'metadata'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'delete_document': {\n const result = await docrouterClient.deleteDocument({\n documentId: getArg(args, 'documentId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n // ========== OCR ==========\n case 'get_ocr_blocks': {\n const result = await docrouterClient.getOCRBlocks({\n documentId: getArg(args, 'documentId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n // ========== LLM ==========\n case 'update_llm_result': {\n const result = await docrouterClient.updateLLMResult({\n documentId: getArg(args, 'documentId'),\n promptId: getArg(args, 'promptId'),\n result: getArg(args, 'result'),\n isVerified: getOptionalArg(args, 'isVerified', false),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'delete_llm_result': {\n const result = await docrouterClient.deleteLLMResult({\n documentId: getArg(args, 'documentId'),\n promptId: getArg(args, 'promptId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n\n // ========== TAGS ==========\n case 'create_tag': {\n const result = await docrouterClient.createTag({\n tag: getArg(args, 'tag'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'update_tag': {\n const result = await docrouterClient.updateTag({\n tagId: getArg(args, 'tagId'),\n tag: getArg(args, 'tag'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'delete_tag': {\n const result = await docrouterClient.deleteTag({\n tagId: getArg(args, 'tagId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n // ========== FORMS ==========\n case 'create_form': {\n const result = await docrouterClient.createForm({\n name: getArg(args, 'name'),\n response_format: getArg(args, 'response_format'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'list_forms': {\n const result = await docrouterClient.listForms({\n skip: getOptionalArg(args, 'skip', 0),\n limit: getOptionalArg(args, 'limit', 10),\n tag_ids: getOptionalArg(args, 'tag_ids'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'get_form': {\n const result = await docrouterClient.getForm({\n formRevId: getArg(args, 'formRevId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'update_form': {\n const result = await docrouterClient.updateForm({\n formId: getArg(args, 'formId'),\n form: getArg(args, 'form'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'delete_form': {\n const result = await docrouterClient.deleteForm({\n formId: getArg(args, 'formId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'submit_form': {\n const result = await docrouterClient.submitForm({\n documentId: getArg(args, 'documentId'),\n formRevId: getArg(args, 'formRevId'),\n submission_data: getArg(args, 'submission_data'),\n submitted_by: getOptionalArg(args, 'submitted_by'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'get_form_submission': {\n const result = await docrouterClient.getFormSubmission({\n documentId: getArg(args, 'documentId'),\n formRevId: getArg(args, 'formRevId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'delete_form_submission': {\n const result = await docrouterClient.deleteFormSubmission({\n documentId: getArg(args, 'documentId'),\n formRevId: getArg(args, 'formRevId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n // ========== PROMPTS ==========\n case 'create_prompt': {\n const result = await docrouterClient.createPrompt({\n prompt: getArg(args, 'prompt'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'update_prompt': {\n const result = await docrouterClient.updatePrompt({\n promptId: getArg(args, 'promptId'),\n prompt: getArg(args, 'prompt'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'delete_prompt': {\n const result = await docrouterClient.deletePrompt({\n promptId: getArg(args, 'promptId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n // ========== SCHEMAS ==========\n case 'create_schema': {\n const result = await docrouterClient.createSchema({\n name: getArg(args, 'name'),\n response_format: getArg(args, 'response_format'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'list_schemas': {\n const result = await docrouterClient.listSchemas({\n skip: getOptionalArg(args, 'skip', 0),\n limit: getOptionalArg(args, 'limit', 10),\n nameSearch: getOptionalArg(args, 'nameSearch'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'get_schema': {\n const result = await docrouterClient.getSchema({\n schemaRevId: getArg(args, 'schemaRevId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'update_schema': {\n const result = await docrouterClient.updateSchema({\n schemaId: getArg(args, 'schemaId'),\n schema: getArg(args, 'schema'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'delete_schema': {\n const result = await docrouterClient.deleteSchema({\n schemaId: getArg(args, 'schemaId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'validate_against_schema': {\n const result = await docrouterClient.validateAgainstSchema({\n schemaRevId: getArg(args, 'schemaRevId'),\n data: getArg(args, 'data'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'validate_schema': {\n const schemaString = getArg<string>(args, 'schema');\n try {\n const schema = JSON.parse(schemaString);\n const validationResult = validateSchemaFormat(schema);\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(validationResult, null, 2),\n },\n ],\n };\n } catch (error) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({\n valid: false,\n errors: [`Invalid JSON string: ${error instanceof Error ? error.message : 'Unknown error'}`],\n warnings: []\n }, null, 2),\n },\n ],\n isError: true,\n };\n }\n }\n\n case 'validate_form': {\n const formString = getArg<string>(args, 'form');\n try {\n const form = JSON.parse(formString);\n const validationResult = validateFormFormat(form);\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(validationResult, null, 2),\n },\n ],\n };\n } catch (error) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({\n valid: false,\n errors: [`Invalid JSON string: ${error instanceof Error ? error.message : 'Unknown error'}`],\n warnings: []\n }, null, 2),\n },\n ],\n isError: true,\n };\n }\n }\n\n\n\n // ========== LLM CHAT ==========\n case 'run_llm_chat': {\n const result = await docrouterClient.runLLMChat({\n messages: getArg(args, 'messages'),\n model: getOptionalArg(args, 'model'),\n temperature: getOptionalArg(args, 'temperature'),\n max_tokens: getOptionalArg(args, 'max_tokens'),\n stream: getOptionalArg(args, 'stream'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n // ========== HELPER TOOLS ==========\n case 'help': {\n const helpText = `\n# DocRouter API Help\n\nThis server provides access to DocRouter resources and tools.\n\n## Available Tools\n\n### Documents\n- \\`upload_documents(documents)\\` - Upload documents\n- \\`list_documents(skip, limit, tagIds, nameSearch, metadataSearch)\\` - List documents\n- \\`get_document(documentId, fileType)\\` - Get document by ID\n- \\`update_document(documentId, documentName, tagIds, metadata)\\` - Update document\n- \\`delete_document(documentId)\\` - Delete document\n\n### OCR\n- \\`get_ocr_blocks(documentId)\\` - Get OCR blocks\n- \\`get_ocr_text(documentId, pageNum)\\` - Get OCR text\n- \\`get_ocr_metadata(documentId)\\` - Get OCR metadata\n\n### LLM\n- \\`run_llm(documentId, promptRevId, force)\\` - Run AI extraction\n- \\`get_llm_result(documentId, promptRevId, fallback)\\` - Get extraction results\n- \\`update_llm_result(documentId, promptId, result, isVerified)\\` - Update results\n- \\`delete_llm_result(documentId, promptId)\\` - Delete results\n\n### Tags\n- \\`create_tag(tag)\\` - Create tag\n- \\`get_tag(tagId)\\` - Get tag by ID\n- \\`list_tags(skip, limit, nameSearch)\\` - List tags\n- \\`update_tag(tagId, tag)\\` - Update tag\n- \\`delete_tag(tagId)\\` - Delete tag\n\n### Forms\n- \\`create_form(name, response_format)\\` - Create form\n- \\`list_forms(skip, limit, tag_ids)\\` - List forms\n- \\`get_form(formRevId)\\` - Get form by ID\n- \\`update_form(formId, form)\\` - Update form\n- \\`delete_form(formId)\\` - Delete form\n- \\`submit_form(documentId, formRevId, submission_data, submitted_by)\\` - Submit form\n- \\`get_form_submission(documentId, formRevId)\\` - Get form submission\n- \\`delete_form_submission(documentId, formRevId)\\` - Delete form submission\n\n### Prompts\n- \\`create_prompt(prompt)\\` - Create prompt\n- \\`list_prompts(skip, limit, document_id, tag_ids, nameSearch)\\` - List prompts\n- \\`get_prompt(promptRevId)\\` - Get prompt by ID\n- \\`update_prompt(promptId, prompt)\\` - Update prompt\n- \\`delete_prompt(promptId)\\` - Delete prompt\n\n### Schemas\n- \\`create_schema(name, response_format)\\` - Create schema\n- \\`list_schemas(skip, limit, nameSearch)\\` - List schemas\n- \\`get_schema(schemaRevId)\\` - Get schema by ID\n- \\`update_schema(schemaId, schema)\\` - Update schema\n- \\`delete_schema(schemaId)\\` - Delete schema\n- \\`validate_against_schema(schemaRevId, data)\\` - Validate data\n- \\`validate_schema(schema)\\` - Validate schema format for correctness (takes JSON string)\n\n\n### LLM Chat\n- \\`run_llm_chat(messages, model, temperature, max_tokens, stream)\\` - Run chat\n\n### Help Tools\n- \\`help()\\` - Get general API help information\n- \\`help_prompts()\\` - Get detailed help on creating and configuring prompts\n- \\`help_schemas()\\` - Get detailed help on creating and configuring schemas\n\n## Example Workflows\n\n1. List documents:\n \\`\\`\\`\n list_documents()\n \\`\\`\\`\n\n2. Get OCR text for a document:\n \\`\\`\\`\n get_ocr_text(\"doc123\")\n \\`\\`\\`\n\n3. Run AI extraction:\n \\`\\`\\`\n run_llm(\"doc123\", \"prompt456\")\n \\`\\`\\`\n\n4. Get extraction results:\n \\`\\`\\`\n get_llm_result(\"doc123\", \"prompt456\")\n \\`\\`\\`\n\n5. Validate a schema format:\n \\`\\`\\`\n validate_schema('{\"type\": \"json_schema\", \"json_schema\": {\"name\": \"document_extraction\", \"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"description\": \"Document name\"}}, \"required\": [\"name\"], \"additionalProperties\": false}, \"strict\": true}}')\n \\`\\`\\`\n `;\n return {\n content: [\n {\n type: 'text',\n text: helpText,\n },\n ],\n };\n }\n\n case 'help_prompts': {\n try {\n // Get the directory of the current file\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n \n // Navigate to the knowledge base directory within the package\n const promptsPath = join(__dirname, 'docs/knowledge_base/prompts.md');\n const promptsContent = readFileSync(promptsPath, 'utf-8');\n \n return {\n content: [\n {\n type: 'text',\n text: promptsContent,\n },\n ],\n };\n } catch (error) {\n return {\n content: [\n {\n type: 'text',\n text: `Error reading prompts help file: ${handleError(error)}`,\n },\n ],\n isError: true,\n };\n }\n }\n\n case 'help_schemas': {\n try {\n // Get the directory of the current file\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n\n // Navigate to the knowledge base directory within the package\n const schemasPath = join(__dirname, 'docs/knowledge_base/schemas.md');\n const schemasContent = readFileSync(schemasPath, 'utf-8');\n\n return {\n content: [\n {\n type: 'text',\n text: schemasContent,\n },\n ],\n };\n } catch (error) {\n return {\n content: [\n {\n type: 'text',\n text: `Error reading schemas help file: ${handleError(error)}`,\n },\n ],\n isError: true,\n };\n }\n }\n\n case 'help_forms': {\n try {\n // Get the directory of the current file\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n\n // Navigate to the knowledge base directory within the package\n const formsPath = join(__dirname, 'docs/knowledge_base/forms.md');\n const formsContent = readFileSync(formsPath, 'utf-8');\n\n return {\n content: [\n {\n type: 'text',\n text: formsContent,\n },\n ],\n };\n } catch (error) {\n return {\n content: [\n {\n type: 'text',\n text: `Error reading forms help file: ${handleError(error)}`,\n },\n ],\n isError: true,\n };\n }\n }\n\n default:\n throw new Error(`Unknown tool: ${name}`);\n }\n } catch (error) {\n return {\n content: [\n {\n type: 'text',\n text: handleError(error),\n },\n ],\n isError: true,\n };\n }\n});\n\n// Main function\nasync function main() {\n try {\n const config = parseConfig();\n \n if (!config.organizationId || !config.orgToken) {\n console.error('Error: DOCROUTER_ORG_ID and DOCROUTER_ORG_API_TOKEN environment variables are required');\n console.error('Or provide them as command line arguments: --org-id <id> --org-token <token>');\n process.exit(1);\n }\n\n initializeClient(config);\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n \n console.error('DocRouter MCP server started successfully');\n } catch (error) {\n console.error('Failed to start DocRouter MCP server:', error);\n process.exit(1);\n }\n}\n\n// Handle graceful shutdown\nprocess.on('SIGINT', async () => {\n console.error('Shutting down DocRouter MCP server...');\n process.exit(0);\n});\n\nprocess.on('SIGTERM', async () => {\n console.error('Shutting down DocRouter MCP server...');\n process.exit(0);\n});\n\n// Start the server\nif (require.main === module) {\n main().catch((error) => {\n console.error('Unhandled error:', error);\n process.exit(1);\n });\n}\n\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["z","fileURLToPath","dirname","join","readFileSync","Server","DocRouterOrg","ListToolsRequestSchema","CallToolRequestSchema","StdioServerTransport"],"mappings":"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","file":"index.js","sourcesContent":["#!/usr/bin/env node\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n Tool,\n} from '@modelcontextprotocol/sdk/types.js';\nimport { z } from 'zod';\nimport { DocRouterOrg } from '@docrouter/sdk';\nimport { readFileSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { fileURLToPath } from 'url';\n\n// Configuration schema\nconst ConfigSchema = z.object({\n baseURL: z.string().default('https://app.docrouter.ai/fastapi'),\n organizationId: z.string(),\n orgToken: z.string(),\n timeout: z.number().default(30000),\n retries: z.number().default(3),\n});\n\ntype Config = z.infer<typeof ConfigSchema>;\n\n// Show list of supported MCP tools\nfunction showTools() {\n const toolNames = tools.map(tool => tool.name).sort();\n console.log(toolNames.join('\\n'));\n}\n\n// Show CLAUDE.md contents\nfunction showClaudeMd() {\n try {\n // Get the directory of the current file\n const currentFile = fileURLToPath(import.meta.url);\n const currentDir = dirname(currentFile);\n \n // Navigate to the CLAUDE.md file within the package\n const claudePath = join(currentDir, 'CLAUDE.md');\n const claudeContent = readFileSync(claudePath, 'utf-8');\n \n console.log(claudeContent);\n } catch (error) {\n console.error(`Error reading CLAUDE.md: ${error instanceof Error ? error.message : 'Unknown error'}`);\n process.exit(1);\n }\n}\n\n// Show help information\nfunction showHelp() {\n console.log(`\nDocRouter MCP Server v0.1.0\n\nUSAGE:\n docrouter-mcp [OPTIONS]\n\nDESCRIPTION:\n DocRouter MCP (Model Context Protocol) server that provides access to DocRouter\n document processing, OCR, LLM extraction, and form management capabilities.\n\nOPTIONS:\n --url <URL> DocRouter API base URL\n (default: https://app.docrouter.ai/fastapi)\n --org-id <ID> DocRouter organization ID\n --org-token <TOKEN> DocRouter organization API token\n --timeout <MS> Request timeout in milliseconds (default: 30000)\n --retries <COUNT> Number of retry attempts (default: 3)\n --tools List all supported MCP tools\n --claude-md Print CLAUDE.md contents\n -h, --help Show this help message\n\nENVIRONMENT VARIABLES:\n DOCROUTER_API_URL DocRouter API base URL\n DOCROUTER_ORG_ID DocRouter organization ID\n DOCROUTER_ORG_API_TOKEN DocRouter organization API token\n\nEXAMPLES:\n # Using command line arguments\n docrouter-mcp --org-id \"org123\" --org-token \"token456\"\n\n # Using environment variables\n export DOCROUTER_ORG_ID=\"org123\"\n export DOCROUTER_ORG_API_TOKEN=\"token456\"\n docrouter-mcp\n\n # With custom API URL\n docrouter-mcp --url \"https://custom.docrouter.ai/fastapi\" --org-id \"org123\" --org-token \"token456\"\n\nREQUIRED:\n Either provide --org-id and --org-token as command line arguments,\n or set DOCROUTER_ORG_ID and DOCROUTER_ORG_API_TOKEN environment variables.\n\nFor more information about DocRouter, visit: https://docrouter.ai\n`);\n}\n\n// Parse command line arguments and environment variables\nfunction parseConfig(): Config {\n const args = process.argv.slice(2);\n const config: Partial<Config> = {};\n\n // Check for special flags first\n if (args.includes('--help') || args.includes('-h')) {\n showHelp();\n process.exit(0);\n }\n \n if (args.includes('--tools')) {\n showTools();\n process.exit(0);\n }\n \n if (args.includes('--claude-md')) {\n showClaudeMd();\n process.exit(0);\n }\n\n // Parse command line arguments\n for (let i = 0; i < args.length; i += 2) {\n const key = args[i]?.replace('--', '');\n const value = args[i + 1];\n if (key && value) {\n switch (key) {\n case 'url':\n config.baseURL = value;\n break;\n case 'org-id':\n config.organizationId = value;\n break;\n case 'org-token':\n config.orgToken = value;\n break;\n case 'timeout':\n config.timeout = parseInt(value, 10);\n break;\n case 'retries':\n config.retries = parseInt(value, 10);\n break;\n }\n }\n }\n\n // Fall back to environment variables\n config.baseURL = config.baseURL || process.env.DOCROUTER_API_URL || 'https://app.docrouter.ai/fastapi';\n config.organizationId = config.organizationId || process.env.DOCROUTER_ORG_ID || '';\n config.orgToken = config.orgToken || process.env.DOCROUTER_ORG_API_TOKEN || '';\n\n return ConfigSchema.parse(config);\n}\n\n// Create the MCP server\nconst server = new Server(\n {\n name: 'docrouter-mcp',\n version: '0.1.0',\n },\n {\n capabilities: {\n tools: {},\n },\n }\n);\n\n// Global DocRouter client\nlet docrouterClient: DocRouterOrg;\n\n// Initialize DocRouter client\nfunction initializeClient(config: Config) {\n docrouterClient = new DocRouterOrg({\n baseURL: config.baseURL,\n orgToken: config.orgToken,\n organizationId: config.organizationId,\n timeout: config.timeout,\n retries: config.retries,\n });\n}\n\n// Helper function to handle errors\nfunction handleError(error: unknown): string {\n if (error instanceof Error) {\n return JSON.stringify({ error: error.message }, null, 2);\n }\n return JSON.stringify({ error: 'Unknown error occurred' }, null, 2);\n}\n\n// Helper function to serialize dates\nfunction serializeDates(obj: any): any {\n if (obj === null || obj === undefined) {\n return obj;\n }\n \n if (obj instanceof Date) {\n return obj.toISOString();\n }\n \n if (Array.isArray(obj)) {\n return obj.map(serializeDates);\n }\n \n if (typeof obj === 'object') {\n const result: any = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = serializeDates(value);\n }\n return result;\n }\n \n return obj;\n}\n\n// Helper function to safely get typed arguments\nfunction getArg<T>(args: Record<string, unknown>, key: string, defaultValue?: T): T {\n const value = args[key];\n if (value === undefined || value === null) {\n if (defaultValue !== undefined) {\n return defaultValue;\n }\n throw new Error(`Missing required argument: ${key}`);\n }\n return value as T;\n}\n\nfunction getOptionalArg<T>(args: Record<string, unknown>, key: string, defaultValue?: T): T | undefined {\n const value = args[key];\n if (value === undefined || value === null) {\n return defaultValue;\n }\n return value as T;\n}\n\n// Schema validation function\nfunction validateSchemaFormat(schema: any): { valid: boolean; errors: string[]; warnings: string[] } {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n try {\n // Check if schema is an object\n if (!schema || typeof schema !== 'object') {\n errors.push('Schema must be an object');\n return { valid: false, errors, warnings };\n }\n\n // Check for required top-level structure\n if (!schema.type || schema.type !== 'json_schema') {\n errors.push('Schema must have type: \"json_schema\"');\n }\n\n if (!schema.json_schema || typeof schema.json_schema !== 'object') {\n errors.push('Schema must have json_schema object');\n } else {\n const jsonSchema = schema.json_schema;\n\n // Check json_schema structure\n if (!jsonSchema.name || typeof jsonSchema.name !== 'string') {\n errors.push('json_schema must have a name field');\n }\n\n if (!jsonSchema.schema || typeof jsonSchema.schema !== 'object') {\n errors.push('json_schema must have a schema object');\n } else {\n const innerSchema = jsonSchema.schema;\n\n // Check inner schema structure\n if (innerSchema.type !== 'object') {\n errors.push('Inner schema type must be \"object\"');\n }\n\n if (!innerSchema.properties || typeof innerSchema.properties !== 'object') {\n errors.push('Schema must have properties object');\n }\n\n if (!Array.isArray(innerSchema.required)) {\n errors.push('Schema must have required array');\n }\n\n if (innerSchema.additionalProperties !== false) {\n errors.push('Schema must have additionalProperties: false');\n }\n\n // Check strict mode\n if (jsonSchema.strict !== true) {\n errors.push('Schema must have strict: true');\n }\n\n // Validate that all properties are in required array (strict mode requirement)\n if (innerSchema.properties && Array.isArray(innerSchema.required)) {\n const propertyNames = Object.keys(innerSchema.properties);\n const requiredNames = innerSchema.required;\n \n for (const propName of propertyNames) {\n if (!requiredNames.includes(propName)) {\n errors.push(`Property \"${propName}\" must be in required array (strict mode requirement)`);\n }\n }\n\n for (const reqName of requiredNames) {\n if (!propertyNames.includes(reqName)) {\n errors.push(`Required property \"${reqName}\" is not defined in properties`);\n }\n }\n }\n\n // Validate nested objects\n if (innerSchema.properties) {\n validateNestedObjects(innerSchema.properties, errors, warnings);\n }\n }\n }\n\n // Check for non-portable features (warnings)\n if (schema.json_schema?.schema?.properties) {\n checkForNonPortableFeatures(schema.json_schema.schema.properties, warnings);\n }\n\n } catch (error) {\n errors.push(`Schema validation error: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings\n };\n}\n\n// Helper function to validate nested objects\nfunction validateNestedObjects(properties: any, errors: string[], warnings: string[]): void {\n for (const [propName, propDef] of Object.entries(properties)) {\n if (typeof propDef === 'object' && propDef !== null) {\n const prop = propDef as any;\n \n if (prop.type === 'object') {\n if (!prop.properties || typeof prop.properties !== 'object') {\n errors.push(`Object property \"${propName}\" must have properties object`);\n }\n \n if (!Array.isArray(prop.required)) {\n errors.push(`Object property \"${propName}\" must have required array`);\n }\n \n if (prop.additionalProperties !== false) {\n errors.push(`Object property \"${propName}\" must have additionalProperties: false`);\n }\n\n // Recursively validate nested objects\n if (prop.properties) {\n validateNestedObjects(prop.properties, errors, warnings);\n }\n }\n \n if (prop.type === 'array' && prop.items) {\n if (prop.items.type === 'object') {\n if (!prop.items.properties || typeof prop.items.properties !== 'object') {\n errors.push(`Array items object \"${propName}\" must have properties object`);\n }\n \n if (!Array.isArray(prop.items.required)) {\n errors.push(`Array items object \"${propName}\" must have required array`);\n }\n \n if (prop.items.additionalProperties !== false) {\n errors.push(`Array items object \"${propName}\" must have additionalProperties: false`);\n }\n\n // Recursively validate nested objects in arrays\n if (prop.items.properties) {\n validateNestedObjects(prop.items.properties, errors, warnings);\n }\n }\n }\n }\n }\n}\n\n// Helper function to check for non-portable features\nfunction checkForNonPortableFeatures(properties: any, warnings: string[]): void {\n for (const [propName, propDef] of Object.entries(properties)) {\n if (typeof propDef === 'object' && propDef !== null) {\n const prop = propDef as any;\n\n // Check for enum (not recommended for portability)\n if (prop.enum) {\n warnings.push(`Property \"${propName}\" uses enum - consider using description instead for better portability`);\n }\n\n // Check for pattern (not recommended for portability)\n if (prop.pattern) {\n warnings.push(`Property \"${propName}\" uses pattern - consider using description instead for better portability`);\n }\n\n // Check for min/max constraints (not recommended for portability)\n if (prop.minimum !== undefined || prop.maximum !== undefined) {\n warnings.push(`Property \"${propName}\" uses min/max constraints - consider using description instead for better portability`);\n }\n\n if (prop.minItems !== undefined || prop.maxItems !== undefined) {\n warnings.push(`Property \"${propName}\" uses minItems/maxItems - consider using description instead for better portability`);\n }\n\n if (prop.uniqueItems !== undefined) {\n warnings.push(`Property \"${propName}\" uses uniqueItems - consider using description instead for better portability`);\n }\n\n // Recursively check nested objects\n if (prop.type === 'object' && prop.properties) {\n checkForNonPortableFeatures(prop.properties, warnings);\n }\n\n if (prop.type === 'array' && prop.items && prop.items.type === 'object' && prop.items.properties) {\n checkForNonPortableFeatures(prop.items.properties, warnings);\n }\n }\n }\n}\n\n// Form validation function\nfunction validateFormFormat(form: any): { valid: boolean; errors: string[]; warnings: string[] } {\n const errors: string[] = [];\n const warnings: string[] = [];\n\n try {\n // Check if form is an object\n if (!form || typeof form !== 'object') {\n errors.push('Form must be an object');\n return { valid: false, errors, warnings };\n }\n\n // Check for required top-level structure\n if (!form.json_formio || !Array.isArray(form.json_formio)) {\n errors.push('Form must have json_formio array');\n return { valid: false, errors, warnings };\n }\n\n // Validate each component in the form\n validateFormComponents(form.json_formio, errors, warnings, '');\n\n // Validate field mappings if present\n if (form.json_formio_mapping) {\n validateFieldMappings(form.json_formio_mapping, form.json_formio, errors, warnings);\n }\n\n } catch (error) {\n errors.push(`Form validation error: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings\n };\n}\n\n// Helper function to validate Form.io components\nfunction validateFormComponents(components: any[], errors: string[], warnings: string[], path: string): void {\n const validFieldTypes = [\n 'textfield', 'email', 'number', 'select', 'textarea', 'checkbox',\n 'datetime', 'phoneNumber', 'panel', 'columns', 'fieldset', 'radio',\n 'selectboxes', 'currency', 'day', 'time', 'url', 'password', 'file'\n ];\n\n const collectedKeys = new Set<string>();\n\n for (let i = 0; i < components.length; i++) {\n const component = components[i];\n const componentPath = path ? `${path}[${i}]` : `component[${i}]`;\n\n if (!component || typeof component !== 'object') {\n errors.push(`${componentPath}: Component must be an object`);\n continue;\n }\n\n // Check required field: type\n if (!component.type) {\n errors.push(`${componentPath}: Component must have a \"type\" field`);\n } else if (!validFieldTypes.includes(component.type)) {\n warnings.push(`${componentPath}: Unknown field type \"${component.type}\" - may not render correctly`);\n }\n\n // For input components, validate key and label\n if (component.input === true || ['textfield', 'email', 'number', 'select', 'textarea', 'checkbox', 'datetime', 'phoneNumber'].includes(component.type)) {\n if (!component.key) {\n errors.push(`${componentPath}: Input component must have a \"key\" field`);\n } else {\n // Check for duplicate keys\n if (collectedKeys.has(component.key)) {\n errors.push(`${componentPath}: Duplicate key \"${component.key}\" found`);\n }\n collectedKeys.add(component.key);\n\n // Key should be valid identifier\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(component.key)) {\n warnings.push(`${componentPath}: Key \"${component.key}\" should be a valid identifier (alphanumeric and underscore only)`);\n }\n }\n\n if (!component.label) {\n warnings.push(`${componentPath}: Input component should have a \"label\" field for better UX`);\n }\n }\n\n // Validate select/dropdown fields\n if (component.type === 'select') {\n if (!component.data || !component.data.values) {\n errors.push(`${componentPath}: Select field must have data.values array`);\n } else if (!Array.isArray(component.data.values)) {\n errors.push(`${componentPath}: data.values must be an array`);\n } else if (component.data.values.length === 0) {\n warnings.push(`${componentPath}: Select field has empty values array`);\n }\n }\n\n // Validate nested components (panels, columns, etc.)\n if (component.type === 'panel' || component.type === 'fieldset') {\n if (!component.components || !Array.isArray(component.components)) {\n errors.push(`${componentPath}: ${component.type} must have components array`);\n } else {\n validateFormComponents(component.components, errors, warnings, `${componentPath}.components`);\n }\n }\n\n // Validate columns layout\n if (component.type === 'columns') {\n if (!component.columns || !Array.isArray(component.columns)) {\n errors.push(`${componentPath}: columns layout must have columns array`);\n } else {\n for (let j = 0; j < component.columns.length; j++) {\n const column = component.columns[j];\n if (!column.components || !Array.isArray(column.components)) {\n errors.push(`${componentPath}.columns[${j}]: Column must have components array`);\n } else {\n validateFormComponents(column.components, errors, warnings, `${componentPath}.columns[${j}].components`);\n }\n }\n }\n }\n\n // Check validation rules\n if (component.validate) {\n if (typeof component.validate !== 'object') {\n errors.push(`${componentPath}: validate must be an object`);\n }\n }\n }\n}\n\n// Helper function to validate field mappings\nfunction validateFieldMappings(mappings: any, formComponents: any[], errors: string[], warnings: string[]): void {\n if (typeof mappings !== 'object' || mappings === null) {\n errors.push('json_formio_mapping must be an object');\n return;\n }\n\n // Collect all field keys from form components\n const formKeys = new Set<string>();\n const collectKeys = (components: any[]) => {\n for (const comp of components) {\n if (comp.key) formKeys.add(comp.key);\n if (comp.components) collectKeys(comp.components);\n if (comp.columns) {\n for (const col of comp.columns) {\n if (col.components) collectKeys(col.components);\n }\n }\n }\n };\n collectKeys(formComponents);\n\n for (const [fieldKey, mapping] of Object.entries(mappings)) {\n if (!formKeys.has(fieldKey)) {\n warnings.push(`Mapping for \"${fieldKey}\" references a field key that doesn't exist in the form`);\n }\n\n if (typeof mapping !== 'object' || mapping === null) {\n errors.push(`Mapping for \"${fieldKey}\" must be an object`);\n continue;\n }\n\n const m = mapping as any;\n\n if (!m.sources || !Array.isArray(m.sources)) {\n errors.push(`Mapping for \"${fieldKey}\" must have sources array`);\n continue;\n }\n\n if (m.sources.length === 0) {\n warnings.push(`Mapping for \"${fieldKey}\" has empty sources array`);\n }\n\n for (let i = 0; i < m.sources.length; i++) {\n const source = m.sources[i];\n if (!source.promptId) {\n errors.push(`Mapping for \"${fieldKey}\".sources[${i}] must have promptId`);\n }\n if (!source.schemaFieldPath) {\n errors.push(`Mapping for \"${fieldKey}\".sources[${i}] must have schemaFieldPath`);\n }\n }\n\n if (!m.mappingType) {\n errors.push(`Mapping for \"${fieldKey}\" must have mappingType`);\n } else if (!['direct', 'concatenated'].includes(m.mappingType)) {\n errors.push(`Mapping for \"${fieldKey}\" has invalid mappingType \"${m.mappingType}\" (must be \"direct\" or \"concatenated\")`);\n }\n\n // Check concatenated mappings\n if (m.mappingType === 'concatenated' && m.sources.length < 2) {\n warnings.push(`Mapping for \"${fieldKey}\" is marked as concatenated but only has ${m.sources.length} source(s)`);\n }\n }\n}\n\n// Define tools - organized by category matching the SDK\nconst tools: Tool[] = [\n // ========== DOCUMENTS ==========\n {\n name: 'upload_documents',\n description: 'Upload documents to DocRouter',\n inputSchema: {\n type: 'object',\n properties: {\n documents: {\n type: 'array',\n description: 'Array of documents to upload',\n items: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'Document name' },\n content: { type: 'string', description: 'Base64 encoded document content' },\n type: { type: 'string', description: 'Document type (pdf, image, etc.)' },\n metadata: { type: 'object', description: 'Optional metadata' },\n },\n required: ['name', 'content', 'type'],\n },\n },\n },\n required: ['documents'],\n },\n },\n {\n name: 'list_documents',\n description: 'List documents from DocRouter',\n inputSchema: {\n type: 'object',\n properties: {\n skip: { type: 'number', description: 'Number of documents to skip', default: 0 },\n limit: { type: 'number', description: 'Number of documents to return', default: 10 },\n tagIds: { type: 'string', description: 'Comma-separated list of tag IDs to filter by' },\n nameSearch: { type: 'string', description: 'Search by document name' },\n metadataSearch: { type: 'string', description: 'Search by metadata' },\n },\n },\n },\n {\n name: 'get_document',\n description: 'Get document by ID from DocRouter',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document to retrieve' },\n fileType: { type: 'string', description: 'File type to retrieve (pdf, image, etc.)', default: 'pdf' },\n },\n required: ['documentId'],\n },\n },\n {\n name: 'update_document',\n description: 'Update document metadata',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document to update' },\n documentName: { type: 'string', description: 'New document name' },\n tagIds: { type: 'array', items: { type: 'string' }, description: 'Array of tag IDs' },\n metadata: { type: 'object', description: 'Document metadata' },\n },\n required: ['documentId'],\n },\n },\n {\n name: 'delete_document',\n description: 'Delete a document',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document to delete' },\n },\n required: ['documentId'],\n },\n },\n\n // ========== OCR ==========\n {\n name: 'get_ocr_blocks',\n description: 'Get OCR blocks for a document',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n },\n required: ['documentId'],\n },\n },\n {\n name: 'get_ocr_text',\n description: 'Get OCR text for a document',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n pageNum: { type: 'number', description: 'Optional page number' },\n },\n required: ['documentId'],\n },\n },\n {\n name: 'get_ocr_metadata',\n description: 'Get OCR metadata for a document',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n },\n required: ['documentId'],\n },\n },\n\n // ========== LLM ==========\n {\n name: 'run_llm',\n description: 'Run AI extraction on a document using a specific prompt',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n promptRevId: { type: 'string', description: 'ID of the prompt' },\n force: { type: 'boolean', description: 'Force re-extraction', default: false },\n },\n required: ['documentId', 'promptRevId'],\n },\n },\n {\n name: 'get_llm_result',\n description: 'Get LLM extraction results',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n promptRevId: { type: 'string', description: 'ID of the prompt' },\n fallback: { type: 'boolean', description: 'Use fallback results', default: false },\n },\n required: ['documentId', 'promptRevId'],\n },\n },\n {\n name: 'update_llm_result',\n description: 'Update LLM extraction results',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n promptId: { type: 'string', description: 'ID of the prompt' },\n result: { type: 'object', description: 'Updated result data' },\n isVerified: { type: 'boolean', description: 'Whether result is verified', default: false },\n },\n required: ['documentId', 'promptId', 'result'],\n },\n },\n {\n name: 'delete_llm_result',\n description: 'Delete LLM extraction results',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n promptId: { type: 'string', description: 'ID of the prompt' },\n },\n required: ['documentId', 'promptId'],\n },\n },\n\n // ========== TAGS ==========\n {\n name: 'create_tag',\n description: 'Create a new tag',\n inputSchema: {\n type: 'object',\n properties: {\n tag: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'Tag name' },\n color: { type: 'string', description: 'Tag color' },\n },\n required: ['name', 'color'],\n },\n },\n required: ['tag'],\n },\n },\n {\n name: 'get_tag',\n description: 'Get tag by ID',\n inputSchema: {\n type: 'object',\n properties: {\n tagId: { type: 'string', description: 'ID of the tag' },\n },\n required: ['tagId'],\n },\n },\n {\n name: 'list_tags',\n description: 'List all tags',\n inputSchema: {\n type: 'object',\n properties: {\n skip: { type: 'number', description: 'Number of tags to skip', default: 0 },\n limit: { type: 'number', description: 'Number of tags to return', default: 10 },\n nameSearch: { type: 'string', description: 'Search by tag name' },\n },\n },\n },\n {\n name: 'update_tag',\n description: 'Update a tag',\n inputSchema: {\n type: 'object',\n properties: {\n tagId: { type: 'string', description: 'ID of the tag' },\n tag: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'Tag name' },\n color: { type: 'string', description: 'Tag color' },\n },\n },\n },\n required: ['tagId', 'tag'],\n },\n },\n {\n name: 'delete_tag',\n description: 'Delete a tag',\n inputSchema: {\n type: 'object',\n properties: {\n tagId: { type: 'string', description: 'ID of the tag' },\n },\n required: ['tagId'],\n },\n },\n\n // ========== FORMS ==========\n {\n name: 'create_form',\n description: 'Create a new form',\n inputSchema: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'Form name' },\n response_format: { type: 'object', description: 'Form response format' },\n },\n required: ['name', 'response_format'],\n },\n },\n {\n name: 'list_forms',\n description: 'List all forms',\n inputSchema: {\n type: 'object',\n properties: {\n skip: { type: 'number', description: 'Number of forms to skip', default: 0 },\n limit: { type: 'number', description: 'Number of forms to return', default: 10 },\n tag_ids: { type: 'string', description: 'Comma-separated tag IDs' },\n },\n },\n },\n {\n name: 'get_form',\n description: 'Get form by ID',\n inputSchema: {\n type: 'object',\n properties: {\n formRevId: { type: 'string', description: 'ID of the form' },\n },\n required: ['formRevId'],\n },\n },\n {\n name: 'update_form',\n description: 'Update a form',\n inputSchema: {\n type: 'object',\n properties: {\n formId: { type: 'string', description: 'ID of the form' },\n form: { type: 'object', description: 'Form data' },\n },\n required: ['formId', 'form'],\n },\n },\n {\n name: 'delete_form',\n description: 'Delete a form',\n inputSchema: {\n type: 'object',\n properties: {\n formId: { type: 'string', description: 'ID of the form' },\n },\n required: ['formId'],\n },\n },\n {\n name: 'submit_form',\n description: 'Submit a form',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n formRevId: { type: 'string', description: 'ID of the form' },\n submission_data: { type: 'object', description: 'Form submission data' },\n submitted_by: { type: 'string', description: 'User who submitted' },\n },\n required: ['documentId', 'formRevId', 'submission_data'],\n },\n },\n {\n name: 'get_form_submission',\n description: 'Get form submission',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n formRevId: { type: 'string', description: 'ID of the form' },\n },\n required: ['documentId', 'formRevId'],\n },\n },\n {\n name: 'delete_form_submission',\n description: 'Delete form submission',\n inputSchema: {\n type: 'object',\n properties: {\n documentId: { type: 'string', description: 'ID of the document' },\n formRevId: { type: 'string', description: 'ID of the form' },\n },\n required: ['documentId', 'formRevId'],\n },\n },\n\n // ========== PROMPTS ==========\n {\n name: 'create_prompt',\n description: 'Create a new prompt',\n inputSchema: {\n type: 'object',\n properties: {\n prompt: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'Prompt name' },\n content: { type: 'string', description: 'Prompt content' },\n },\n required: ['name', 'content'],\n },\n },\n required: ['prompt'],\n },\n },\n {\n name: 'list_prompts',\n description: 'List all prompts',\n inputSchema: {\n type: 'object',\n properties: {\n skip: { type: 'number', description: 'Number of prompts to skip', default: 0 },\n limit: { type: 'number', description: 'Number of prompts to return', default: 10 },\n document_id: { type: 'string', description: 'Filter by document ID' },\n tag_ids: { type: 'string', description: 'Comma-separated tag IDs' },\n nameSearch: { type: 'string', description: 'Search by prompt name' },\n },\n },\n },\n {\n name: 'get_prompt',\n description: 'Get prompt by ID',\n inputSchema: {\n type: 'object',\n properties: {\n promptRevId: { type: 'string', description: 'ID of the prompt' },\n },\n required: ['promptRevId'],\n },\n },\n {\n name: 'update_prompt',\n description: 'Update a prompt',\n inputSchema: {\n type: 'object',\n properties: {\n promptId: { type: 'string', description: 'ID of the prompt' },\n prompt: { type: 'object', description: 'Prompt data' },\n },\n required: ['promptId', 'prompt'],\n },\n },\n {\n name: 'delete_prompt',\n description: 'Delete a prompt',\n inputSchema: {\n type: 'object',\n properties: {\n promptId: { type: 'string', description: 'ID of the prompt' },\n },\n required: ['promptId'],\n },\n },\n\n // ========== SCHEMAS ==========\n {\n name: 'create_schema',\n description: 'Create a new schema',\n inputSchema: {\n type: 'object',\n properties: {\n name: { type: 'string', description: 'Schema name' },\n response_format: { type: 'object', description: 'Schema response format' },\n },\n required: ['name', 'response_format'],\n },\n },\n {\n name: 'list_schemas',\n description: 'List all schemas',\n inputSchema: {\n type: 'object',\n properties: {\n skip: { type: 'number', description: 'Number of schemas to skip', default: 0 },\n limit: { type: 'number', description: 'Number of schemas to return', default: 10 },\n nameSearch: { type: 'string', description: 'Search by schema name' },\n },\n },\n },\n {\n name: 'get_schema',\n description: 'Get schema by ID',\n inputSchema: {\n type: 'object',\n properties: {\n schemaRevId: { type: 'string', description: 'ID of the schema' },\n },\n required: ['schemaRevId'],\n },\n },\n {\n name: 'update_schema',\n description: 'Update a schema',\n inputSchema: {\n type: 'object',\n properties: {\n schemaId: { type: 'string', description: 'ID of the schema' },\n schema: { type: 'object', description: 'Schema data' },\n },\n required: ['schemaId', 'schema'],\n },\n },\n {\n name: 'delete_schema',\n description: 'Delete a schema',\n inputSchema: {\n type: 'object',\n properties: {\n schemaId: { type: 'string', description: 'ID of the schema' },\n },\n required: ['schemaId'],\n },\n },\n {\n name: 'validate_against_schema',\n description: 'Validate data against a schema',\n inputSchema: {\n type: 'object',\n properties: {\n schemaRevId: { type: 'string', description: 'ID of the schema' },\n data: { type: 'object', description: 'Data to validate' },\n },\n required: ['schemaRevId', 'data'],\n },\n },\n {\n name: 'validate_schema',\n description: 'Validate schema format for correctness and DocRouter compliance',\n inputSchema: {\n type: 'object',\n properties: {\n schema: { type: 'string', description: 'JSON string of the schema to validate' },\n },\n required: ['schema'],\n },\n },\n {\n name: 'validate_form',\n description: 'Validate Form.io form format for correctness and DocRouter compliance',\n inputSchema: {\n type: 'object',\n properties: {\n form: { type: 'string', description: 'JSON string of the form to validate' },\n },\n required: ['form'],\n },\n },\n\n\n\n // ========== LLM CHAT ==========\n {\n name: 'run_llm_chat',\n description: 'Run LLM chat',\n inputSchema: {\n type: 'object',\n properties: {\n messages: {\n type: 'array',\n description: 'Chat messages',\n items: {\n type: 'object',\n properties: {\n role: { type: 'string', enum: ['system', 'user', 'assistant'] },\n content: { type: 'string' },\n },\n required: ['role', 'content'],\n },\n },\n model: { type: 'string', description: 'Model to use' },\n temperature: { type: 'number', description: 'Temperature setting' },\n max_tokens: { type: 'number', description: 'Maximum tokens' },\n stream: { type: 'boolean', description: 'Enable streaming' },\n },\n required: ['messages'],\n },\n },\n\n // ========== HELPER TOOLS ==========\n {\n name: 'help',\n description: 'Get help information about using the API',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'help_prompts',\n description: 'Get help information about creating and configuring prompts in DocRouter',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'help_schemas',\n description: 'Get help information about creating and configuring schemas in DocRouter',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'help_forms',\n description: 'Get help information about creating and configuring forms in DocRouter',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n];\n\n// List tools handler\nserver.setRequestHandler(ListToolsRequestSchema, async () => {\n return { tools };\n});\n\n// Call tool handler\nserver.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n \n if (!args) {\n throw new Error('No arguments provided');\n }\n\n try {\n switch (name) {\n case 'list_documents': {\n const result = await docrouterClient.listDocuments({\n skip: getOptionalArg(args, 'skip', 0),\n limit: getOptionalArg(args, 'limit', 10),\n nameSearch: getOptionalArg(args, 'nameSearch'),\n tagIds: getOptionalArg(args, 'tagIds'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'get_document': {\n const result = await docrouterClient.getDocument({\n documentId: getArg(args, 'documentId'),\n fileType: getArg(args, 'fileType', 'pdf'),\n });\n \n // Convert ArrayBuffer to base64 for transmission\n const base64Content = Buffer.from(result.content).toString('base64');\n \n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({\n ...serializeDates(result),\n content: base64Content,\n content_type: 'base64',\n content_size: result.content.byteLength\n }, null, 2),\n },\n ],\n };\n }\n\n case 'get_ocr_text': {\n const result = await docrouterClient.getOCRText({\n documentId: getArg(args, 'documentId'),\n pageNum: getOptionalArg(args, 'pageNum'),\n });\n return {\n content: [\n {\n type: 'text',\n text: result,\n },\n ],\n };\n }\n\n case 'get_ocr_metadata': {\n const result = await docrouterClient.getOCRMetadata({\n documentId: getArg(args, 'documentId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'list_tags': {\n const result = await docrouterClient.listTags({\n skip: getOptionalArg(args, 'skip', 0),\n limit: getOptionalArg(args, 'limit', 10),\n nameSearch: getOptionalArg(args, 'nameSearch'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'get_tag': {\n const result = await docrouterClient.getTag({\n tagId: getArg(args, 'tagId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'list_prompts': {\n const result = await docrouterClient.listPrompts({\n skip: getOptionalArg(args, 'skip', 0),\n limit: getOptionalArg(args, 'limit', 10),\n nameSearch: getOptionalArg(args, 'nameSearch'),\n document_id: getOptionalArg(args, 'documentId'),\n tag_ids: getOptionalArg(args, 'tagIds'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'get_prompt': {\n const result = await docrouterClient.getPrompt({\n promptRevId: getArg(args, 'promptRevId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'get_llm_result': {\n const result = await docrouterClient.getLLMResult({\n documentId: getArg(args, 'documentId'),\n promptRevId: getArg(args, 'promptRevId'),\n fallback: getOptionalArg(args, 'fallback', false),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n\n case 'run_llm': {\n const result = await docrouterClient.runLLM({\n documentId: getArg(args, 'documentId'),\n promptRevId: getArg(args, 'promptRevId'),\n force: getOptionalArg(args, 'force', false),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n // ========== DOCUMENTS ==========\n case 'upload_documents': {\n const documentsInput = getArg(args, 'documents') as Array<{ name: string; content: string; type: string; metadata?: Record<string, string>; }>;\n const documents = documentsInput.map(doc => ({\n ...doc,\n content: Buffer.from(doc.content, 'base64')\n }));\n const result = await docrouterClient.uploadDocuments({ documents });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'update_document': {\n const result = await docrouterClient.updateDocument({\n documentId: getArg(args, 'documentId'),\n documentName: getOptionalArg(args, 'documentName'),\n tagIds: getOptionalArg(args, 'tagIds'),\n metadata: getOptionalArg(args, 'metadata'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'delete_document': {\n const result = await docrouterClient.deleteDocument({\n documentId: getArg(args, 'documentId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n // ========== OCR ==========\n case 'get_ocr_blocks': {\n const result = await docrouterClient.getOCRBlocks({\n documentId: getArg(args, 'documentId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n // ========== LLM ==========\n case 'update_llm_result': {\n const result = await docrouterClient.updateLLMResult({\n documentId: getArg(args, 'documentId'),\n promptId: getArg(args, 'promptId'),\n result: getArg(args, 'result'),\n isVerified: getOptionalArg(args, 'isVerified', false),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'delete_llm_result': {\n const result = await docrouterClient.deleteLLMResult({\n documentId: getArg(args, 'documentId'),\n promptId: getArg(args, 'promptId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n\n // ========== TAGS ==========\n case 'create_tag': {\n const result = await docrouterClient.createTag({\n tag: getArg(args, 'tag'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'update_tag': {\n const result = await docrouterClient.updateTag({\n tagId: getArg(args, 'tagId'),\n tag: getArg(args, 'tag'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'delete_tag': {\n const result = await docrouterClient.deleteTag({\n tagId: getArg(args, 'tagId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n // ========== FORMS ==========\n case 'create_form': {\n const result = await docrouterClient.createForm({\n name: getArg(args, 'name'),\n response_format: getArg(args, 'response_format'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'list_forms': {\n const result = await docrouterClient.listForms({\n skip: getOptionalArg(args, 'skip', 0),\n limit: getOptionalArg(args, 'limit', 10),\n tag_ids: getOptionalArg(args, 'tag_ids'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'get_form': {\n const result = await docrouterClient.getForm({\n formRevId: getArg(args, 'formRevId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'update_form': {\n const result = await docrouterClient.updateForm({\n formId: getArg(args, 'formId'),\n form: getArg(args, 'form'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'delete_form': {\n const result = await docrouterClient.deleteForm({\n formId: getArg(args, 'formId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'submit_form': {\n const result = await docrouterClient.submitForm({\n documentId: getArg(args, 'documentId'),\n formRevId: getArg(args, 'formRevId'),\n submission_data: getArg(args, 'submission_data'),\n submitted_by: getOptionalArg(args, 'submitted_by'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'get_form_submission': {\n const result = await docrouterClient.getFormSubmission({\n documentId: getArg(args, 'documentId'),\n formRevId: getArg(args, 'formRevId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'delete_form_submission': {\n const result = await docrouterClient.deleteFormSubmission({\n documentId: getArg(args, 'documentId'),\n formRevId: getArg(args, 'formRevId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n // ========== PROMPTS ==========\n case 'create_prompt': {\n const result = await docrouterClient.createPrompt({\n prompt: getArg(args, 'prompt'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'update_prompt': {\n const result = await docrouterClient.updatePrompt({\n promptId: getArg(args, 'promptId'),\n prompt: getArg(args, 'prompt'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'delete_prompt': {\n const result = await docrouterClient.deletePrompt({\n promptId: getArg(args, 'promptId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n // ========== SCHEMAS ==========\n case 'create_schema': {\n const result = await docrouterClient.createSchema({\n name: getArg(args, 'name'),\n response_format: getArg(args, 'response_format'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'list_schemas': {\n const result = await docrouterClient.listSchemas({\n skip: getOptionalArg(args, 'skip', 0),\n limit: getOptionalArg(args, 'limit', 10),\n nameSearch: getOptionalArg(args, 'nameSearch'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'get_schema': {\n const result = await docrouterClient.getSchema({\n schemaRevId: getArg(args, 'schemaRevId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'update_schema': {\n const result = await docrouterClient.updateSchema({\n schemaId: getArg(args, 'schemaId'),\n schema: getArg(args, 'schema'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'delete_schema': {\n const result = await docrouterClient.deleteSchema({\n schemaId: getArg(args, 'schemaId'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'validate_against_schema': {\n const result = await docrouterClient.validateAgainstSchema({\n schemaRevId: getArg(args, 'schemaRevId'),\n data: getArg(args, 'data'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'validate_schema': {\n const schemaString = getArg<string>(args, 'schema');\n try {\n const schema = JSON.parse(schemaString);\n const validationResult = validateSchemaFormat(schema);\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(validationResult, null, 2),\n },\n ],\n };\n } catch (error) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({\n valid: false,\n errors: [`Invalid JSON string: ${error instanceof Error ? error.message : 'Unknown error'}`],\n warnings: []\n }, null, 2),\n },\n ],\n isError: true,\n };\n }\n }\n\n case 'validate_form': {\n const formString = getArg<string>(args, 'form');\n try {\n const form = JSON.parse(formString);\n const validationResult = validateFormFormat(form);\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(validationResult, null, 2),\n },\n ],\n };\n } catch (error) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({\n valid: false,\n errors: [`Invalid JSON string: ${error instanceof Error ? error.message : 'Unknown error'}`],\n warnings: []\n }, null, 2),\n },\n ],\n isError: true,\n };\n }\n }\n\n\n\n // ========== LLM CHAT ==========\n case 'run_llm_chat': {\n const result = await docrouterClient.runLLMChat({\n messages: getArg(args, 'messages'),\n model: getOptionalArg(args, 'model'),\n temperature: getOptionalArg(args, 'temperature'),\n max_tokens: getOptionalArg(args, 'max_tokens'),\n stream: getOptionalArg(args, 'stream'),\n });\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n // ========== HELPER TOOLS ==========\n case 'help': {\n const helpText = `\n# DocRouter API Help\n\nThis server provides access to DocRouter resources and tools.\n\n## Available Tools\n\n### Documents\n- \\`upload_documents(documents)\\` - Upload documents\n- \\`list_documents(skip, limit, tagIds, nameSearch, metadataSearch)\\` - List documents\n- \\`get_document(documentId, fileType)\\` - Get document by ID\n- \\`update_document(documentId, documentName, tagIds, metadata)\\` - Update document\n- \\`delete_document(documentId)\\` - Delete document\n\n### OCR\n- \\`get_ocr_blocks(documentId)\\` - Get OCR blocks\n- \\`get_ocr_text(documentId, pageNum)\\` - Get OCR text\n- \\`get_ocr_metadata(documentId)\\` - Get OCR metadata\n\n### LLM\n- \\`run_llm(documentId, promptRevId, force)\\` - Run AI extraction\n- \\`get_llm_result(documentId, promptRevId, fallback)\\` - Get extraction results\n- \\`update_llm_result(documentId, promptId, result, isVerified)\\` - Update results\n- \\`delete_llm_result(documentId, promptId)\\` - Delete results\n\n### Tags\n- \\`create_tag(tag)\\` - Create tag\n- \\`get_tag(tagId)\\` - Get tag by ID\n- \\`list_tags(skip, limit, nameSearch)\\` - List tags\n- \\`update_tag(tagId, tag)\\` - Update tag\n- \\`delete_tag(tagId)\\` - Delete tag\n\n### Forms\n- \\`create_form(name, response_format)\\` - Create form\n- \\`list_forms(skip, limit, tag_ids)\\` - List forms\n- \\`get_form(formRevId)\\` - Get form by ID\n- \\`update_form(formId, form)\\` - Update form\n- \\`delete_form(formId)\\` - Delete form\n- \\`submit_form(documentId, formRevId, submission_data, submitted_by)\\` - Submit form\n- \\`get_form_submission(documentId, formRevId)\\` - Get form submission\n- \\`delete_form_submission(documentId, formRevId)\\` - Delete form submission\n\n### Prompts\n- \\`create_prompt(prompt)\\` - Create prompt\n- \\`list_prompts(skip, limit, document_id, tag_ids, nameSearch)\\` - List prompts\n- \\`get_prompt(promptRevId)\\` - Get prompt by ID\n- \\`update_prompt(promptId, prompt)\\` - Update prompt\n- \\`delete_prompt(promptId)\\` - Delete prompt\n\n### Schemas\n- \\`create_schema(name, response_format)\\` - Create schema\n- \\`list_schemas(skip, limit, nameSearch)\\` - List schemas\n- \\`get_schema(schemaRevId)\\` - Get schema by ID\n- \\`update_schema(schemaId, schema)\\` - Update schema\n- \\`delete_schema(schemaId)\\` - Delete schema\n- \\`validate_against_schema(schemaRevId, data)\\` - Validate data\n- \\`validate_schema(schema)\\` - Validate schema format for correctness (takes JSON string)\n\n\n### LLM Chat\n- \\`run_llm_chat(messages, model, temperature, max_tokens, stream)\\` - Run chat\n\n### Help Tools\n- \\`help()\\` - Get general API help information\n- \\`help_prompts()\\` - Get detailed help on creating and configuring prompts\n- \\`help_schemas()\\` - Get detailed help on creating and configuring schemas\n\n## Example Workflows\n\n1. List documents:\n \\`\\`\\`\n list_documents()\n \\`\\`\\`\n\n2. Get OCR text for a document:\n \\`\\`\\`\n get_ocr_text(\"doc123\")\n \\`\\`\\`\n\n3. Run AI extraction:\n \\`\\`\\`\n run_llm(\"doc123\", \"prompt456\")\n \\`\\`\\`\n\n4. Get extraction results:\n \\`\\`\\`\n get_llm_result(\"doc123\", \"prompt456\")\n \\`\\`\\`\n\n5. Validate a schema format:\n \\`\\`\\`\n validate_schema('{\"type\": \"json_schema\", \"json_schema\": {\"name\": \"document_extraction\", \"schema\": {\"type\": \"object\", \"properties\": {\"name\": {\"type\": \"string\", \"description\": \"Document name\"}}, \"required\": [\"name\"], \"additionalProperties\": false}, \"strict\": true}}')\n \\`\\`\\`\n `;\n return {\n content: [\n {\n type: 'text',\n text: helpText,\n },\n ],\n };\n }\n\n case 'help_prompts': {\n try {\n // Get the directory of the current file\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n \n // Navigate to the knowledge base directory within the package\n const promptsPath = join(__dirname, 'docs/knowledge_base/prompts.md');\n const promptsContent = readFileSync(promptsPath, 'utf-8');\n \n return {\n content: [\n {\n type: 'text',\n text: promptsContent,\n },\n ],\n };\n } catch (error) {\n return {\n content: [\n {\n type: 'text',\n text: `Error reading prompts help file: ${handleError(error)}`,\n },\n ],\n isError: true,\n };\n }\n }\n\n case 'help_schemas': {\n try {\n // Get the directory of the current file\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n\n // Navigate to the knowledge base directory within the package\n const schemasPath = join(__dirname, 'docs/knowledge_base/schemas.md');\n const schemasContent = readFileSync(schemasPath, 'utf-8');\n\n return {\n content: [\n {\n type: 'text',\n text: schemasContent,\n },\n ],\n };\n } catch (error) {\n return {\n content: [\n {\n type: 'text',\n text: `Error reading schemas help file: ${handleError(error)}`,\n },\n ],\n isError: true,\n };\n }\n }\n\n case 'help_forms': {\n try {\n // Get the directory of the current file\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = dirname(__filename);\n\n // Navigate to the knowledge base directory within the package\n const formsPath = join(__dirname, 'docs/knowledge_base/forms.md');\n const formsContent = readFileSync(formsPath, 'utf-8');\n\n return {\n content: [\n {\n type: 'text',\n text: formsContent,\n },\n ],\n };\n } catch (error) {\n return {\n content: [\n {\n type: 'text',\n text: `Error reading forms help file: ${handleError(error)}`,\n },\n ],\n isError: true,\n };\n }\n }\n\n default:\n throw new Error(`Unknown tool: ${name}`);\n }\n } catch (error) {\n return {\n content: [\n {\n type: 'text',\n text: handleError(error),\n },\n ],\n isError: true,\n };\n }\n});\n\n// Main function\nasync function main() {\n try {\n const config = parseConfig();\n \n if (!config.organizationId || !config.orgToken) {\n console.error('Error: DOCROUTER_ORG_ID and DOCROUTER_ORG_API_TOKEN environment variables are required');\n console.error('Or provide them as command line arguments: --org-id <id> --org-token <token>');\n process.exit(1);\n }\n\n initializeClient(config);\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n \n console.error('DocRouter MCP server started successfully');\n } catch (error) {\n console.error('Failed to start DocRouter MCP server:', error);\n process.exit(1);\n }\n}\n\n// Handle graceful shutdown\nprocess.on('SIGINT', async () => {\n console.error('Shutting down DocRouter MCP server...');\n process.exit(0);\n});\n\nprocess.on('SIGTERM', async () => {\n console.error('Shutting down DocRouter MCP server...');\n process.exit(0);\n});\n\n// Start the server\nif (require.main === module) {\n main().catch((error) => {\n console.error('Unhandled error:', error);\n process.exit(1);\n });\n}\n\n"]}