Skip to main content
Glama

compare

Analyze and compare data schemas between producers and consumers to identify mismatches, generating detailed reports for validation.

Instructions

Full analysis pipeline: extract producer schemas, trace consumer usage, and compare them to find mismatches. Returns a detailed report.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
producerDirYesPath to MCP server source directory
consumerDirYesPath to consumer/client source directory
formatNoOutput format
strictNoStrict mode for comparison
directionNoData flow direction (default: producer_to_consumer)

Implementation Reference

  • src/index.ts:178-192 (registration)
    MCP tool registration for 'compare', defining name, description, and input schema in the ListTools response.
    {
      name: 'compare',
      description: 'Full analysis pipeline: extract producer schemas, trace consumer usage, and compare them to find mismatches. Returns a detailed report.',
      inputSchema: {
        type: 'object',
        properties: {
          producerDir: { type: 'string', description: 'Path to MCP server source directory' },
          consumerDir: { type: 'string', description: 'Path to consumer/client source directory' },
          format: { type: 'string', enum: ['json', 'markdown', 'summary'], description: 'Output format' },
          strict: { type: 'boolean', description: 'Strict mode for comparison' },
          direction: { type: 'string', enum: ['producer_to_consumer', 'consumer_to_producer', 'bidirectional'], description: 'Data flow direction (default: producer_to_consumer)' },
        },
        required: ['producerDir', 'consumerDir'],
      },
    },
  • Zod schema (CompareInput) used for input validation in the 'compare' tool handler.
    const CompareInput = z.object({
      producerDir: z.string().describe('Path to MCP server source directory'),
      consumerDir: z.string().describe('Path to consumer/client source directory'),
      format: z.enum(['json', 'markdown', 'summary']).optional().describe('Output format (default: json)'),
      strict: z.boolean().optional().describe('Strict mode: treat missing optional properties as warnings'),
      direction: z.enum(['producer_to_consumer', 'consumer_to_producer', 'bidirectional']).optional().describe('Data flow direction for compatibility checking (default: producer_to_consumer)'),
    });
  • Handler for the 'compare' MCP tool: parses input, invokes compareDirectories, formats result, and returns MCP content response.
    case 'compare': {
      const input = CompareInput.parse(args);
      log(`Comparing: ${input.producerDir} vs ${input.consumerDir}`);
    
      const result = await compareDirectories(
        input.producerDir,
        input.consumerDir,
        {
          strict: input.strict,
          direction: input.direction
        }
      );
    
      const format = (input.format || 'json') as OutputFormat;
      const output = formatResult(result, format);
    
      log(`Analysis complete: ${result.summary.matchCount} matches, ${result.summary.mismatchCount} mismatches`);
    
      return {
        content: [
          {
            type: 'text',
            text: output,
          },
        ],
      };
    }
  • Core helper function compareDirectories: orchestrates schema extraction, usage tracing, and schema comparison.
    export async function compareDirectories(
      backendDir: string,
      frontendDir: string,
      options: CompareOptions = {}
    ): Promise<TraceResult> {
      // Import dynamically to avoid circular deps
      const { extractProducerSchemas } = await import('../extract/index.js');
      const { traceConsumerUsage } = await import('../trace/index.js');
      
      console.log(`\n[Compare] Backend: ${backendDir}`);
      console.log(`[Compare] Frontend: ${frontendDir}\n`);
      
      const producers = await extractProducerSchemas({ rootDir: backendDir });
      const consumers = await traceConsumerUsage({ rootDir: frontendDir });
      
      return compareSchemas(producers, consumers, options);
    }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Mnehmos/mnehmos.trace.mcp'

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