Skip to main content
Glama

init_project

Initialize a trace project by creating the .trace-mcp config directory and project structure for watch mode and caching.

Instructions

Initialize a trace project with .trace-mcp config directory. Creates project structure for watch mode and caching.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
projectDirYesRoot directory for the trace project
producerPathYesRelative path to producer/server code
consumerPathYesRelative path to consumer/client code
producerLanguageNoProducer language (default: typescript)
consumerLanguageNoConsumer language (default: typescript)

Implementation Reference

  • Main handler for the 'init_project' MCP tool. Parses input, loads TraceProject instance, initializes project directories and config if new, handles existing project error, logs and returns success response with config.
    case 'init_project': {
      const input = InitProjectInput.parse(args);
      log(`Initializing trace project at: ${input.projectDir}`);
      
      const project = loadProject(input.projectDir);
      
      if (project.exists()) {
        return {
          content: [{
            type: 'text',
            text: JSON.stringify({
              success: false,
              error: `Project already exists at ${input.projectDir}. Use get_project_status to view it.`,
            }, null, 2),
          }],
        };
      }
      
      const config = project.init({
        producer: {
          path: input.producerPath,
          language: input.producerLanguage || 'typescript',
          include: ['**/*.ts'],
          exclude: ['**/*.test.ts', '**/node_modules/**', '**/dist/**'],
        },
        consumer: {
          path: input.consumerPath,
          language: input.consumerLanguage || 'typescript',
          include: ['**/*.ts', '**/*.tsx'],
          exclude: ['**/*.test.ts', '**/node_modules/**', '**/dist/**'],
        },
      });
      
      log(`Project initialized with config:`, config);
      
      return {
        content: [{
          type: 'text',
          text: JSON.stringify({
            success: true,
            projectDir: input.projectDir,
            traceDir: project.traceDir,
            config,
          }, null, 2),
        }],
      };
    }
  • Zod input schema validation for the init_project tool parameters.
    const InitProjectInput = z.object({
      projectDir: z.string().describe('Root directory for the trace project'),
      producerPath: z.string().describe('Relative path to producer/server code'),
      consumerPath: z.string().describe('Relative path to consumer/client code'),
      producerLanguage: z.enum(['typescript', 'python', 'go', 'rust', 'json_schema']).optional().default('typescript'),
      consumerLanguage: z.enum(['typescript', 'python', 'go', 'rust', 'json_schema']).optional().default('typescript'),
    });
  • src/index.ts:238-251 (registration)
    Tool registration object returned by ListToolsRequestHandler, defining name, description, and inputSchema for init_project.
      name: 'init_project',
      description: 'Initialize a trace project with .trace-mcp config directory. Creates project structure for watch mode and caching.',
      inputSchema: {
        type: 'object',
        properties: {
          projectDir: { type: 'string', description: 'Root directory for the trace project' },
          producerPath: { type: 'string', description: 'Relative path to producer/server code' },
          consumerPath: { type: 'string', description: 'Relative path to consumer/client code' },
          producerLanguage: { type: 'string', enum: ['typescript', 'python', 'go', 'rust', 'json_schema'], description: 'Producer language (default: typescript)' },
          consumerLanguage: { type: 'string', enum: ['typescript', 'python', 'go', 'rust', 'json_schema'], description: 'Consumer language (default: typescript)' },
        },
        required: ['projectDir', 'producerPath', 'consumerPath'],
      },
    },
  • Core initialization logic in TraceProject.init() method: creates .trace-mcp subdirectories (cache, contracts, reports), parses and writes config.json using ProjectConfigSchema, adds .gitignore. Called directly by the tool handler.
    init(config: Partial<ProjectConfig>): ProjectConfig {
      // Create directories
      mkdirSync(this.traceDir, { recursive: true });
      mkdirSync(this.cachePath, { recursive: true });
      mkdirSync(this.contractsPath, { recursive: true });
      mkdirSync(this.reportsPath, { recursive: true });
    
      // Create config with defaults
      const fullConfig = ProjectConfigSchema.parse(config);
      
      // Write config
      writeFileSync(this.configPath, JSON.stringify(fullConfig, null, 2));
      this._config = fullConfig;
    
      // Create .gitignore for cache
      writeFileSync(
        join(this.traceDir, '.gitignore'),
        '# Trace MCP cache (regenerated)\ncache/\nreports/\n'
      );
    
      return fullConfig;
    }

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