@docrouter/mcp 0.2.1 → 0.3.0

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","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: unknown): unknown {\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: Record<string, unknown> = {};\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: unknown): { 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 const schemaObj = schema as Record<string, unknown>;\n\n // Check for required top-level structure\n if (!schemaObj.type || schemaObj.type !== 'json_schema') {\n errors.push('Schema must have type: \"json_schema\"');\n }\n\n if (!schemaObj.json_schema || typeof schemaObj.json_schema !== 'object') {\n errors.push('Schema must have json_schema object');\n } else {\n const jsonSchema = schemaObj.json_schema as Record<string, unknown>;\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 as Record<string, unknown>;\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 as Record<string, unknown>);\n const requiredNames = innerSchema.required as string[];\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 as Record<string, unknown>, errors, warnings);\n }\n }\n }\n\n // Check for non-portable features (warnings)\n if (schemaObj.json_schema && typeof schemaObj.json_schema === 'object') {\n const jsonSchema = schemaObj.json_schema as Record<string, unknown>;\n if (jsonSchema.schema && typeof jsonSchema.schema === 'object') {\n const innerSchema = jsonSchema.schema as Record<string, unknown>;\n if (innerSchema.properties) {\n checkForNonPortableFeatures(innerSchema.properties as Record<string, unknown>, warnings);\n }\n }\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: Record<string, unknown>, 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 Record<string, unknown>;\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 as Record<string, unknown>, errors, warnings);\n }\n }\n \n if (prop.type === 'array' && prop.items) {\n const items = prop.items as Record<string, unknown>;\n if (items.type === 'object') {\n if (!items.properties || typeof items.properties !== 'object') {\n errors.push(`Array items object \"${propName}\" must have properties object`);\n }\n \n if (!Array.isArray(items.required)) {\n errors.push(`Array items object \"${propName}\" must have required array`);\n }\n \n if (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 (items.properties) {\n validateNestedObjects(items.properties as Record<string, unknown>, errors, warnings);\n }\n }\n }\n }\n }\n}\n\n// Helper function to check for non-portable features\nfunction checkForNonPortableFeatures(properties: Record<string, unknown>, warnings: string[]): void {\n for (const [propName, propDef] of Object.entries(properties)) {\n if (typeof propDef === 'object' && propDef !== null) {\n const prop = propDef as Record<string, unknown>;\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 as Record<string, unknown>, warnings);\n }\n\n if (prop.type === 'array' && prop.items) {\n const items = prop.items as Record<string, unknown>;\n if (items.type === 'object' && items.properties) {\n checkForNonPortableFeatures(items.properties as Record<string, unknown>, warnings);\n }\n }\n }\n }\n}\n\n// Form validation function\nfunction validateFormFormat(form: unknown): { 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 const formObj = form as Record<string, unknown>;\n\n // Check for required top-level structure\n if (!formObj.json_formio || !Array.isArray(formObj.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(formObj.json_formio, errors, warnings, '');\n\n // Validate field mappings if present\n if (formObj.json_formio_mapping) {\n validateFieldMappings(formObj.json_formio_mapping, formObj.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: unknown[], 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 const comp = component as Record<string, unknown>;\n\n // Check required field: type\n if (!comp.type) {\n errors.push(`${componentPath}: Component must have a \"type\" field`);\n } else if (!validFieldTypes.includes(comp.type as string)) {\n warnings.push(`${componentPath}: Unknown field type \"${comp.type}\" - may not render correctly`);\n }\n\n // For input components, validate key and label\n if (comp.input === true || ['textfield', 'email', 'number', 'select', 'textarea', 'checkbox', 'datetime', 'phoneNumber'].includes(comp.type as string)) {\n if (!comp.key) {\n errors.push(`${componentPath}: Input component must have a \"key\" field`);\n } else {\n // Check for duplicate keys\n if (collectedKeys.has(comp.key as string)) {\n errors.push(`${componentPath}: Duplicate key \"${comp.key}\" found`);\n }\n collectedKeys.add(comp.key as string);\n\n // Key should be valid identifier\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(comp.key as string)) {\n warnings.push(`${componentPath}: Key \"${comp.key}\" should be a valid identifier (alphanumeric and underscore only)`);\n }\n }\n\n if (!comp.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 (comp.type === 'select') {\n if (!comp.data || !(comp.data as Record<string, unknown>).values) {\n errors.push(`${componentPath}: Select field must have data.values array`);\n } else if (!Array.isArray((comp.data as Record<string, unknown>).values)) {\n errors.push(`${componentPath}: data.values must be an array`);\n } else if (((comp.data as Record<string, unknown>).values as unknown[]).length === 0) {\n warnings.push(`${componentPath}: Select field has empty values array`);\n }\n }\n\n // Validate nested components (panels, columns, etc.)\n if (comp.type === 'panel' || comp.type === 'fieldset') {\n if (!comp.components || !Array.isArray(comp.components)) {\n errors.push(`${componentPath}: ${comp.type} must have components array`);\n } else {\n validateFormComponents(comp.components as unknown[], errors, warnings, `${componentPath}.components`);\n }\n }\n\n // Validate columns layout\n if (comp.type === 'columns') {\n if (!comp.columns || !Array.isArray(comp.columns)) {\n errors.push(`${componentPath}: columns layout must have columns array`);\n } else {\n for (let j = 0; j < (comp.columns as unknown[]).length; j++) {\n const column = (comp.columns as unknown[])[j] as Record<string, unknown>;\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 as unknown[], errors, warnings, `${componentPath}.columns[${j}].components`);\n }\n }\n }\n }\n\n // Check validation rules\n if (comp.validate) {\n if (typeof comp.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: unknown, formComponents: unknown[], 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: unknown[]) => {\n for (const comp of components) {\n const compObj = comp as Record<string, unknown>;\n if (compObj.key) formKeys.add(compObj.key as string);\n if (compObj.components) collectKeys(compObj.components as unknown[]);\n if (compObj.columns) {\n for (const col of compObj.columns as unknown[]) {\n const colObj = col as Record<string, unknown>;\n if (colObj.components) collectKeys(colObj.components as unknown[]);\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 Record<string, unknown>;\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 as unknown[]).length === 0) {\n warnings.push(`Mapping for \"${fieldKey}\" has empty sources array`);\n }\n\n for (let i = 0; i < (m.sources as unknown[]).length; i++) {\n const source = (m.sources as unknown[])[i] as Record<string, unknown>;\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 as string)) {\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 as unknown[]).length < 2) {\n warnings.push(`Mapping for \"${fieldKey}\" is marked as concatenated but only has ${(m.sources as unknown[]).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 (supports both plain base64 and data URLs)' },\n tag_ids: { type: 'array', items: { type: 'string' }, description: 'Optional list of tag IDs' },\n metadata: { type: 'object', description: 'Optional metadata' },\n },\n required: ['name', 'content'],\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', 'model'],\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) as Record<string, unknown>),\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; tag_ids?: string[]; metadata?: Record<string, string>; }>;\n // No need to convert content - SDK now accepts base64 strings directly\n const result = await docrouterClient.uploadDocuments({ documents: documentsInput });\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: getArg(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 currentFile = fileURLToPath(import.meta.url);\n const currentDir = dirname(currentFile);\n \n // Navigate to the knowledge base directory within the package\n const promptsPath = join(currentDir, '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 currentFile = fileURLToPath(import.meta.url);\n const currentDir = dirname(currentFile);\n\n // Navigate to the knowledge base directory within the package\n const schemasPath = join(currentDir, '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 currentFile = fileURLToPath(import.meta.url);\n const currentDir = dirname(currentFile);\n\n // Navigate to the knowledge base directory within the package\n const formsPath = join(currentDir, '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":[],"mappings":"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","file":"index.mjs","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, DocRouterAccount } from '@docrouter/sdk';\nimport { readFileSync, existsSync, writeFileSync, mkdirSync, statSync } from 'fs';\nimport { join, dirname, resolve, isAbsolute, extname, basename } 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 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// Helper function to resolve knowledge base file paths\n// Works both in development (src/) and production (dist/ from npm package)\nfunction resolveKnowledgeBasePath(filename: string): string {\n const currentFile = fileURLToPath(import.meta.url);\n const currentDir = dirname(currentFile);\n \n // If running from dist/ (production/npm package), use dist/docs/knowledge_base/\n if (currentDir.endsWith('dist')) {\n return join(currentDir, 'docs/knowledge_base', filename);\n }\n \n // If running from src/ (development), try to find dist/ relative to package root\n if (currentDir.endsWith('src')) {\n const distPath = join(currentDir, '..', 'dist', 'docs/knowledge_base', filename);\n if (existsSync(distPath)) {\n return distPath;\n }\n // If dist doesn't exist, provide helpful error\n throw new Error(\n `Knowledge base file not found: ${filename}\\n` +\n `Expected at: ${distPath}\\n` +\n `Please run 'npm run build' first to generate the knowledge base files.`\n );\n }\n \n // Fallback: try relative to current directory\n const fallbackPath = join(currentDir, 'docs/knowledge_base', filename);\n if (existsSync(fallbackPath)) {\n return fallbackPath;\n }\n \n throw new Error(\n `Knowledge base file not found: ${filename}\\n` +\n `Searched in: ${join(currentDir, 'docs/knowledge_base', filename)}`\n );\n}\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-token <TOKEN> DocRouter organization API token (required)\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_API_TOKEN DocRouter organization API token (required)\n\nEXAMPLES:\n # Using command line arguments (organization ID will be resolved from token)\n docrouter-mcp --org-token \"token456\"\n\n # Using environment variables (organization ID will be resolved from token)\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-token \"token456\"\n\nREQUIRED:\n DOCROUTER_ORG_API_TOKEN environment variable or --org-token argument.\n Organization ID will be automatically resolved from the token.\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-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.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 clients\nlet docrouterClient: DocRouterOrg;\nlet docrouterAccountClient: DocRouterAccount;\nlet orgToken: string;\n\n// Initialize DocRouter client\nasync function initializeClient(config: Config) {\n try {\n console.error('Resolving organization ID from token...');\n docrouterAccountClient = new DocRouterAccount({\n baseURL: config.baseURL,\n accountToken: config.orgToken,\n timeout: config.timeout,\n retries: config.retries,\n });\n orgToken = config.orgToken;\n\n const tokenResponse = await docrouterAccountClient.getOrganizationFromToken(config.orgToken);\n const organizationId = tokenResponse.organization_id;\n\n if (!organizationId) {\n throw new Error('Token is an account-level token, not an organization-specific token. Please use an organization API token.');\n }\n\n console.error(`Resolved organization ID: ${organizationId}`);\n\n docrouterClient = new DocRouterOrg({\n baseURL: config.baseURL,\n orgToken: config.orgToken,\n organizationId: organizationId,\n timeout: config.timeout,\n retries: config.retries,\n });\n } catch (error) {\n throw new Error(`Failed to resolve organization ID from token: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n}\n\n// Helper function to handle errors\nfunction handleError(error: unknown): string {\n if (error instanceof Error) {\n // Check if it's an ApiError with additional details\n const apiError = error as Error & { status?: number; code?: string; details?: unknown };\n\n const errorObj: Record<string, unknown> = {\n error: error.message,\n };\n\n // Include status code if available\n if (apiError.status !== undefined) {\n errorObj.status = apiError.status;\n }\n\n // Include error code if available\n if (apiError.code !== undefined) {\n errorObj.code = apiError.code;\n }\n\n // Include detailed error information if available\n if (apiError.details !== undefined) {\n errorObj.details = apiError.details;\n }\n\n return JSON.stringify(errorObj, null, 2);\n }\n\n // Handle non-Error objects\n if (typeof error === 'object' && error !== null) {\n try {\n return JSON.stringify({ error: 'Request failed', details: error }, null, 2);\n } catch {\n return JSON.stringify({ error: 'Unknown error occurred (could not serialize)' }, null, 2);\n }\n }\n\n return JSON.stringify({ error: String(error) || 'Unknown error occurred' }, null, 2);\n}\n\n// Helper function to serialize dates\nfunction serializeDates(obj: unknown): unknown {\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: Record<string, unknown> = {};\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: unknown): { 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 const schemaObj = schema as Record<string, unknown>;\n\n // Check for required top-level structure\n if (!schemaObj.type || schemaObj.type !== 'json_schema') {\n errors.push('Schema must have type: \"json_schema\"');\n }\n\n if (!schemaObj.json_schema || typeof schemaObj.json_schema !== 'object') {\n errors.push('Schema must have json_schema object');\n } else {\n const jsonSchema = schemaObj.json_schema as Record<string, unknown>;\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 as Record<string, unknown>;\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 as Record<string, unknown>);\n const requiredNames = innerSchema.required as string[];\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 as Record<string, unknown>, errors, warnings);\n }\n }\n }\n\n // Check for non-portable features (warnings)\n if (schemaObj.json_schema && typeof schemaObj.json_schema === 'object') {\n const jsonSchema = schemaObj.json_schema as Record<string, unknown>;\n if (jsonSchema.schema && typeof jsonSchema.schema === 'object') {\n const innerSchema = jsonSchema.schema as Record<string, unknown>;\n if (innerSchema.properties) {\n checkForNonPortableFeatures(innerSchema.properties as Record<string, unknown>, warnings);\n }\n }\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: Record<string, unknown>, 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 Record<string, unknown>;\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 as Record<string, unknown>, errors, warnings);\n }\n }\n \n if (prop.type === 'array' && prop.items) {\n const items = prop.items as Record<string, unknown>;\n if (items.type === 'object') {\n if (!items.properties || typeof items.properties !== 'object') {\n errors.push(`Array items object \"${propName}\" must have properties object`);\n }\n \n if (!Array.isArray(items.required)) {\n errors.push(`Array items object \"${propName}\" must have required array`);\n }\n \n if (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 (items.properties) {\n validateNestedObjects(items.properties as Record<string, unknown>, errors, warnings);\n }\n }\n }\n }\n }\n}\n\n// Helper function to check for non-portable features\nfunction checkForNonPortableFeatures(properties: Record<string, unknown>, warnings: string[]): void {\n for (const [propName, propDef] of Object.entries(properties)) {\n if (typeof propDef === 'object' && propDef !== null) {\n const prop = propDef as Record<string, unknown>;\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 as Record<string, unknown>, warnings);\n }\n\n if (prop.type === 'array' && prop.items) {\n const items = prop.items as Record<string, unknown>;\n if (items.type === 'object' && items.properties) {\n checkForNonPortableFeatures(items.properties as Record<string, unknown>, warnings);\n }\n }\n }\n }\n}\n\n// Form validation function\nfunction validateFormFormat(form: unknown): { 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 const formObj = form as Record<string, unknown>;\n\n // Check for required top-level structure\n if (!formObj.json_formio || !Array.isArray(formObj.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(formObj.json_formio, errors, warnings, '');\n\n // Validate field mappings if present\n if (formObj.json_formio_mapping) {\n validateFieldMappings(formObj.json_formio_mapping, formObj.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: unknown[], 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 const comp = component as Record<string, unknown>;\n\n // Check required field: type\n if (!comp.type) {\n errors.push(`${componentPath}: Component must have a \"type\" field`);\n } else if (!validFieldTypes.includes(comp.type as string)) {\n warnings.push(`${componentPath}: Unknown field type \"${comp.type}\" - may not render correctly`);\n }\n\n // For input components, validate key and label\n if (comp.input === true || ['textfield', 'email', 'number', 'select', 'textarea', 'checkbox', 'datetime', 'phoneNumber'].includes(comp.type as string)) {\n if (!comp.key) {\n errors.push(`${componentPath}: Input component must have a \"key\" field`);\n } else {\n // Check for duplicate keys\n if (collectedKeys.has(comp.key as string)) {\n errors.push(`${componentPath}: Duplicate key \"${comp.key}\" found`);\n }\n collectedKeys.add(comp.key as string);\n\n // Key should be valid identifier\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(comp.key as string)) {\n warnings.push(`${componentPath}: Key \"${comp.key}\" should be a valid identifier (alphanumeric and underscore only)`);\n }\n }\n\n if (!comp.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 (comp.type === 'select') {\n if (!comp.data || !(comp.data as Record<string, unknown>).values) {\n errors.push(`${componentPath}: Select field must have data.values array`);\n } else if (!Array.isArray((comp.data as Record<string, unknown>).values)) {\n errors.push(`${componentPath}: data.values must be an array`);\n } else if (((comp.data as Record<string, unknown>).values as unknown[]).length === 0) {\n warnings.push(`${componentPath}: Select field has empty values array`);\n }\n }\n\n // Validate nested components (panels, columns, etc.)\n if (comp.type === 'panel' || comp.type === 'fieldset') {\n if (!comp.components || !Array.isArray(comp.components)) {\n errors.push(`${componentPath}: ${comp.type} must have components array`);\n } else {\n validateFormComponents(comp.components as unknown[], errors, warnings, `${componentPath}.components`);\n }\n }\n\n // Validate columns layout\n if (comp.type === 'columns') {\n if (!comp.columns || !Array.isArray(comp.columns)) {\n errors.push(`${componentPath}: columns layout must have columns array`);\n } else {\n for (let j = 0; j < (comp.columns as unknown[]).length; j++) {\n const column = (comp.columns as unknown[])[j] as Record<string, unknown>;\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 as unknown[], errors, warnings, `${componentPath}.columns[${j}].components`);\n }\n }\n }\n }\n\n // Check validation rules\n if (comp.validate) {\n if (typeof comp.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: unknown, formComponents: unknown[], 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: unknown[]) => {\n for (const comp of components) {\n const compObj = comp as Record<string, unknown>;\n if (compObj.key) formKeys.add(compObj.key as string);\n if (compObj.components) collectKeys(compObj.components as unknown[]);\n if (compObj.columns) {\n for (const col of compObj.columns as unknown[]) {\n const colObj = col as Record<string, unknown>;\n if (colObj.components) collectKeys(colObj.components as unknown[]);\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 Record<string, unknown>;\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 as unknown[]).length === 0) {\n warnings.push(`Mapping for \"${fieldKey}\" has empty sources array`);\n }\n\n for (let i = 0; i < (m.sources as unknown[]).length; i++) {\n const source = (m.sources as unknown[])[i] as Record<string, unknown>;\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 as string)) {\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 as unknown[]).length < 2) {\n warnings.push(`Mapping for \"${fieldKey}\" is marked as concatenated but only has ${(m.sources as unknown[]).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 from file paths',\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 file_path: { type: 'string', description: 'Path to the document file on disk' },\n name: { type: 'string', description: 'Document name (optional, defaults to filename)' },\n tag_ids: { type: 'array', items: { type: 'string' }, description: 'Optional list of tag IDs' },\n metadata: { type: 'object', description: 'Optional metadata' },\n },\n required: ['file_path'],\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 metadata (state, tags, metadata) and optionally download the file to disk',\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 (original or pdf)', default: 'original' },\n save_path: { type: 'string', description: 'Optional file path or directory to save the document. If directory, uses original filename. If not provided, file is not downloaded.' },\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 content: { type: 'string', description: 'Prompt content' },\n model: { type: 'string', description: 'LLM model to use' },\n schema_id: { type: 'string', description: 'Schema ID to link' },\n tag_ids: { type: 'array', items: { type: 'string' }, description: 'Tag IDs that trigger this prompt' },\n },\n required: ['promptId'],\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', 'model'],\n },\n },\n {\n name: 'get_organization',\n description: 'Get information about the current organization (name, type, ID)',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'list_llm_models',\n description: 'List enabled LLM models available for use in prompts for this organization',\n inputSchema: {\n type: 'object',\n properties: {},\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 documentId = getArg<string>(args, 'documentId');\n const fileType = getArg<string>(args, 'fileType', 'original');\n const savePath = getOptionalArg<string>(args, 'save_path');\n \n // Always call getDocument to get metadata and optionally the file\n const fileResult = await docrouterClient.getDocument({\n documentId: documentId,\n fileType: fileType,\n });\n \n // Extract metadata from the response\n const response: Record<string, unknown> = {\n id: fileResult.id,\n pdf_id: fileResult.pdf_id,\n document_name: fileResult.document_name,\n upload_date: fileResult.upload_date,\n uploaded_by: fileResult.uploaded_by,\n state: fileResult.state,\n tag_ids: fileResult.tag_ids,\n type: fileResult.type,\n metadata: fileResult.metadata,\n };\n \n // If save_path is provided, save the file to disk\n if (savePath) {\n \n // Resolve the save path\n let finalPath: string;\n if (isAbsolute(savePath)) {\n finalPath = savePath;\n } else {\n finalPath = resolve(process.cwd(), savePath);\n }\n \n // Check if path is a directory or file\n let isDirectory = false;\n try {\n const stats = statSync(finalPath);\n isDirectory = stats.isDirectory();\n } catch {\n // Path doesn't exist - check if it looks like a directory (ends with /)\n isDirectory = savePath.endsWith('/') || savePath.endsWith('\\\\');\n }\n \n // Determine final file path\n if (isDirectory) {\n // Use original filename with appropriate extension\n const extension = fileType === 'pdf' ? '.pdf' : extname(fileResult.document_name) || '.pdf';\n const fileName = basename(fileResult.document_name, extname(fileResult.document_name)) + extension;\n finalPath = join(finalPath, fileName);\n }\n \n // Ensure directory exists\n const targetDir = dirname(finalPath);\n if (!existsSync(targetDir)) {\n mkdirSync(targetDir, { recursive: true });\n }\n \n // Write file to disk\n const fileBuffer = Buffer.from(fileResult.content);\n writeFileSync(finalPath, fileBuffer);\n \n response.saved_path = finalPath;\n response.file_size = fileBuffer.length;\n }\n \n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(response, 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<{ file_path: string; name?: string; tag_ids?: string[]; metadata?: Record<string, string>; }>;\n \n // Read files from disk and encode to base64\n const documents = [];\n for (const doc of documentsInput) {\n // Resolve file path (handle both absolute and relative paths)\n let filePath: string;\n if (isAbsolute(doc.file_path)) {\n filePath = doc.file_path;\n } else {\n // For relative paths, resolve relative to current working directory\n filePath = resolve(process.cwd(), doc.file_path);\n }\n \n // Check if file exists\n if (!existsSync(filePath)) {\n throw new Error(`File not found: ${filePath}`);\n }\n \n // Read file and encode to base64\n const fileBuffer = readFileSync(filePath);\n const base64Content = fileBuffer.toString('base64');\n \n // Use provided name or derive from filename\n const fileName = doc.name || filePath.split(/[/\\\\]/).pop() || 'document';\n \n documents.push({\n name: fileName,\n content: base64Content,\n tag_ids: doc.tag_ids,\n metadata: doc.metadata,\n });\n }\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 promptId = getArg<string>(args, 'promptId');\n const content = getOptionalArg<string>(args, 'content');\n const model = getOptionalArg<string>(args, 'model');\n const schema_id = getOptionalArg<string>(args, 'schema_id');\n const tag_ids = getOptionalArg<string[]>(args, 'tag_ids');\n\n // Find the prompt with the matching prompt_id to preserve other fields\n let currentPrompt = null;\n const allPrompts = await docrouterClient.listPrompts({});\n for (const p of allPrompts.prompts) {\n if (p.prompt_id === promptId) {\n currentPrompt = p;\n break;\n }\n }\n\n if (!currentPrompt) {\n throw new Error(`Prompt with ID ${promptId} not found`);\n }\n\n // Merge provided fields with existing prompt fields\n const result = await docrouterClient.updatePrompt({\n promptId: promptId,\n prompt: {\n name: currentPrompt.name,\n content: content ?? currentPrompt.content,\n schema_id: schema_id ?? currentPrompt.schema_id,\n schema_version: currentPrompt.schema_version,\n tag_ids: tag_ids ?? currentPrompt.tag_ids,\n model: model ?? currentPrompt.model\n },\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: getArg(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 case 'get_organization': {\n const result = await docrouterAccountClient.getOrganizationFromToken(orgToken);\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(serializeDates(result), null, 2),\n },\n ],\n };\n }\n\n case 'list_llm_models': {\n const result = await docrouterClient.listLLMModels();\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 from file paths\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### Organization\n- \\`get_organization()\\` - Get information about the current organization (name, type, ID)\n- \\`list_llm_models()\\` - List enabled LLM models available for use in prompts\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 const promptsPath = resolveKnowledgeBasePath('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 const schemasPath = resolveKnowledgeBasePath('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 const formsPath = resolveKnowledgeBasePath('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.orgToken) {\n console.error('Error: DOCROUTER_ORG_API_TOKEN environment variable is required');\n console.error('Or provide it as command line argument: --org-token <token>');\n console.error('Organization ID will be automatically resolved from the token.');\n process.exit(1);\n }\n\n await 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"]}