Skip to main content
Glama
ai-naming-standard

AI Naming Standard MCP Server

Official

generateFileName

Create standardized file names for microservices by combining components like microservice, layer, domain, and action according to AI naming conventions.

Instructions

Generates file names according to AI naming convention

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
microserviceYesMicroservice name (auth, user, payment, etc.)
sequenceNoSequence (001-999, v1-v99, main/alt) or relationship (001-1, 001a, 001s1)001
layerYesArchitecture layer
domainYesDomain-subdomain (user-login, payment-card, etc.)
actionYesCRUD operation
featureNoDetailed feature
envNoEnvironment
extYesFile extension

Implementation Reference

  • The core handler function that implements the generateFileName tool logic. It generates file names based on parameters like folder, index, layer, domain, feature, action, detail, env, and ext, handling special cases for static and test files.
    export async function generateFileName({
      folder = '03_ACTIVE',
      index = '001',
      layer = 'BE',
      domain,
      feature,
      action = 'R',
      detail = 'Service',
      env = 'DEV',
      ext = 'js',
      isTest = false,
      isStatic = false,
      staticType = null
    }) {
      const msg = getMessages();
      
      // 02_STATIC 파일 처리 (ChatGPT Enhancement)
      if (folder === '02_STATIC' || isStatic) {
        const prefix = staticType === 'template' ? 'TEMPLATE_' : 
                       staticType === 'config' ? 'CONFIG_' : 'ASSET_';
        const staticName = domain || 'file';
        return {
          fileName: `${prefix}${staticName}.${ext}`,
          folder: '02_STATIC',
          fullPath: `02_STATIC/${prefix}${staticName}.${ext}`,
          description: `Static ${staticType || 'asset'} file`,
          requiresPrefix: true
        };
      }
      
      // 04_TEST 파일 처리 (ChatGPT Enhancement)
      if (folder === '04_TEST' || isTest) {
        const testType = detail || 'Unit';
        const testFileName = `${index}_TEST_${domain}-${feature}_${testType}_${env}.test.${ext}`;
        return {
          fileName: testFileName,
          folder: '04_TEST',
          fullPath: `04_TEST/${testFileName}`,
          description: `Test file for ${domain}-${feature} (${testType})`,
          indexedNaming: true
        };
      }
      
      // 도메인과 기능 정규화 (03_ACTIVE 파일)
      const normalizedDomain = domain.charAt(0).toUpperCase() + domain.slice(1).toLowerCase();
      const normalizedFeature = feature.charAt(0).toUpperCase() + feature.slice(1).toLowerCase();
      
      // 표준 파일명 생성 (v5 패턴)
      const fileName = `${index}_${layer}_${normalizedDomain}-${normalizedFeature}_${action}_${detail}_${env}.${ext}`;
      
      return {
        fileName,
        folder,
        fullPath: `${folder}/${fileName}`,
        description: `${layer} ${normalizedDomain} ${normalizedFeature} ${detail} for ${env} environment`,
        hasDependency: index.includes('-') || index.includes('s') || /[a-z]$/.test(index)
      };
    }
  • src/index.js:64-111 (registration)
    Registers the generateFileName tool in the MCP server, including name, description from messages, and detailed inputSchema defining parameters and enums.
      name: 'generateFileName',
      description: msg.tools.generateFileName.description,
      inputSchema: {
        type: 'object',
        properties: {
          microservice: {
            type: 'string',
            description: msg.parameters.microservice,
            enum: ['auth', 'user', 'payment', 'order', 'product', 'notification', 'analytics', 'gateway', 'search', 'recommendation']
          },
          sequence: {
            type: 'string',
            description: msg.parameters.sequence,
            default: '001'
          },
          layer: {
            type: 'string',
            description: msg.parameters.layer,
            enum: ['controller', 'service', 'repository', 'model', 'dto', 'middleware', 'util', 'config', 'validator', 'helper']
          },
          domain: {
            type: 'string',
            description: msg.parameters.domain
          },
          action: {
            type: 'string',
            description: msg.parameters.action,
            enum: ['create', 'read', 'update', 'delete', 'validate', 'transform', 'calculate', 'send', 'fetch', 'process']
          },
          feature: {
            type: 'string',
            description: msg.parameters.feature,
            enum: ['validation', 'encryption', 'caching', 'logging', 'notification', 'export', 'import', 'batch', 'async', 'sync']
          },
          env: {
            type: 'string',
            description: msg.parameters.env,
            enum: ['dev', 'test', 'staging', 'prod', 'common']
          },
          ext: {
            type: 'string',
            description: msg.parameters.ext,
            enum: ['js', 'ts', 'py', 'java', 'go', 'yml', 'json', 'sql', 'md']
          }
        },
        required: ['microservice', 'layer', 'domain', 'action', 'ext']
      }
    },
  • The switch case in the MCP tool request handler that dispatches calls to the generateFileName function.
    case 'generateFileName':
      result = await generateFileName(args);
      break;
  • Input schema validation for the generateFileName tool, defining types, enums, and required parameters.
    inputSchema: {
      type: 'object',
      properties: {
        microservice: {
          type: 'string',
          description: msg.parameters.microservice,
          enum: ['auth', 'user', 'payment', 'order', 'product', 'notification', 'analytics', 'gateway', 'search', 'recommendation']
        },
        sequence: {
          type: 'string',
          description: msg.parameters.sequence,
          default: '001'
        },
        layer: {
          type: 'string',
          description: msg.parameters.layer,
          enum: ['controller', 'service', 'repository', 'model', 'dto', 'middleware', 'util', 'config', 'validator', 'helper']
        },
        domain: {
          type: 'string',
          description: msg.parameters.domain
        },
        action: {
          type: 'string',
          description: msg.parameters.action,
          enum: ['create', 'read', 'update', 'delete', 'validate', 'transform', 'calculate', 'send', 'fetch', 'process']
        },
        feature: {
          type: 'string',
          description: msg.parameters.feature,
          enum: ['validation', 'encryption', 'caching', 'logging', 'notification', 'export', 'import', 'batch', 'async', 'sync']
        },
        env: {
          type: 'string',
          description: msg.parameters.env,
          enum: ['dev', 'test', 'staging', 'prod', 'common']
        },
        ext: {
          type: 'string',
          description: msg.parameters.ext,
          enum: ['js', 'ts', 'py', 'java', 'go', 'yml', 'json', 'sql', 'md']
        }
      },
      required: ['microservice', 'layer', 'domain', 'action', 'ext']
    }
  • Imports for messages and naming rules used within the generateFileName handler.
    import { getMessages, formatMessage } from '../messages/index.js';
    import namingRules from '../rules/convention.js';
    
    // ========== v4 기존 도구들 (하위 호환성) ==========
    
    // 파일명 생성 함수 (v5.0.1 ChatGPT Enhancement)
    export async function generateFileName({
      folder = '03_ACTIVE',
      index = '001',
      layer = 'BE',
      domain,
      feature,
      action = 'R',
      detail = 'Service',
      env = 'DEV',
      ext = 'js',
      isTest = false,
      isStatic = false,
      staticType = null
    }) {
      const msg = getMessages();
      
      // 02_STATIC 파일 처리 (ChatGPT Enhancement)
      if (folder === '02_STATIC' || isStatic) {
        const prefix = staticType === 'template' ? 'TEMPLATE_' : 
                       staticType === 'config' ? 'CONFIG_' : 'ASSET_';
        const staticName = domain || 'file';
        return {
          fileName: `${prefix}${staticName}.${ext}`,
          folder: '02_STATIC',
          fullPath: `02_STATIC/${prefix}${staticName}.${ext}`,
          description: `Static ${staticType || 'asset'} file`,
          requiresPrefix: true
        };
      }
      
      // 04_TEST 파일 처리 (ChatGPT Enhancement)
      if (folder === '04_TEST' || isTest) {
        const testType = detail || 'Unit';
        const testFileName = `${index}_TEST_${domain}-${feature}_${testType}_${env}.test.${ext}`;
        return {
          fileName: testFileName,
          folder: '04_TEST',
          fullPath: `04_TEST/${testFileName}`,
          description: `Test file for ${domain}-${feature} (${testType})`,
          indexedNaming: true
        };
      }
      
      // 도메인과 기능 정규화 (03_ACTIVE 파일)
      const normalizedDomain = domain.charAt(0).toUpperCase() + domain.slice(1).toLowerCase();
      const normalizedFeature = feature.charAt(0).toUpperCase() + feature.slice(1).toLowerCase();
      
      // 표준 파일명 생성 (v5 패턴)
      const fileName = `${index}_${layer}_${normalizedDomain}-${normalizedFeature}_${action}_${detail}_${env}.${ext}`;
      
      return {
        fileName,
        folder,
        fullPath: `${folder}/${fileName}`,
        description: `${layer} ${normalizedDomain} ${normalizedFeature} ${detail} for ${env} environment`,
        hasDependency: index.includes('-') || index.includes('s') || /[a-z]$/.test(index)
      };
    }

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/ai-naming-standard/mcp'

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