8. 파일 및 컴포넌트 생성 규칙

신규 파일 생성 위치

생성할 것위치예시
새 MCP 서버 패키지packages/<name>/packages/date/
기존 패키지에 새 도구packages/<name>/src/tools/<name>.tspackages/core/src/tools/network.ts
도구 그룹 re-exportpackages/<name>/src/tools/index.ts기존 파일에 export 추가
공유 키트 기능packages/common/kit/<name>.tspackages/common/kit/validator.ts
공유 키트 re-exportpackages/common/kit/index.ts기존 파일에 export 추가
공유 타입packages/common/types.ts기존 파일에 타입 추가
공유 상수packages/common/constants.ts기존 파일에 상수 추가

패키지 신규 생성 시 필요한 파일

새 패키지를 추가할 때는 다음 파일들이 모두 필요합니다:

  1. package.json — name, version, description, exports, bin, scripts, dependencies 포함
  2. tsconfig.json@common path alias, NodeNext module, noEmit: true
  3. tsup.config.tscreateTsupConfig() 호출
  4. src/index.tsexport { tools } from "./tools/index.js" + export { generateSkillMarkdown, generateReadmeSkills } from "@common"
  5. src/server.ts — MCP 서버 생성 및 시작
  6. src/cli.ts — CLI 실행
  7. src/tools/index.ts — tools re-export
  8. src/tools/<name>.ts — 실제 도구 정의

기존 컴포넌트 수정 여부 판단 기준

상황행동
새 도구 추가src/tools/에 새 파일 생성 OR 기존 파일에 도구 추가 (도메인이 같은 경우)
기존 도구 로직 수정해당 도구의 핸들러만 수정 (파일 분할 불필요)
공통 동작 변경packages/common/kit/ 수정 + 모든 패키지 재빌드
CLI 출력 포맷 변경packages/common/kit/cli.tsformatSkills() 수정
README 포맷 변경packages/common/build/update-readme.mjs 수정

공통 로직 추출 시점

다음 조건 중 하나라도 해당되면 공통 로직으로 추출:

  1. 동일한 코드가 2개 이상의 패키지에서 사용됨 → packages/common/kit/으로 이동
  2. 동일한 코드가 1개 패키지 내 2개 이상의 도구에서 사용됨 → 패키지 내 유틸리티 함수로 추출 (예: cn.ts)
  3. 복잡한 Zod 스키마가 재사용됨 → 공유 Zod 스키마로 분리

공통 네이밍 규칙

항목규칙예시
패키지명@julong/<description>@julong/mono-rele2-core
CLI 바이너리명<package-name>-climono-rele2-core-cli
도구명 (변수)camelCase + Tool 접미사echoTool, timestampTool
도구명 (MCP 노출)snake_caseecho, case_convert
파일명kebab-caseupdate-readme.mjs, case-convert.ts
인터페이스PascalCaseToolDefShape, AnyToolDef
타입 (utility)PascalCaseNullable<T>, Optional<T>
비동기 함수async function모든 도구 핸들러
상수UPPER_SNAKE_CASEVERSION