coding-buddy-mcp 1.0.0 → 1.0.2

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.
package/README.md ADDED
@@ -0,0 +1,142 @@
1
+ # coding-buddy-mcp
2
+
3
+ Claude Code의 내부 구조(프롬프트 캐싱, 자동 압축, 도구 실행, 비용 추적)를 분석하여 만든 **페어 프로그래밍 코딩버디 MCP 서버**입니다.
4
+
5
+ 설치하면 Claude의 행동 자체가 바뀝니다 — 모호한 요청에 되물어보고, 작업 복잡도에 맞는 모델을 추천하고, 캐시를 보호하고, 비용을 최적화합니다.
6
+
7
+ ## 설치
8
+
9
+ `~/.mcp.json` 또는 프로젝트 `.mcp.json`에 추가:
10
+
11
+ ```json
12
+ {
13
+ "mcpServers": {
14
+ "coding-buddy": {
15
+ "type": "stdio",
16
+ "command": "npx",
17
+ "args": ["coding-buddy-mcp"]
18
+ }
19
+ }
20
+ }
21
+ ```
22
+
23
+ 새 세션을 시작하면 자동으로 활성화됩니다.
24
+
25
+ ## 어떻게 동작하나요?
26
+
27
+ MCP의 **Server Instructions**가 Claude 시스템 프롬프트에 자동 주입됩니다. Claude가 코딩버디의 37개 규칙을 따르게 되면서 행동이 바뀝니다.
28
+
29
+ ### Before (코딩버디 없이)
30
+
31
+ ```
32
+ 유저: "이 프로젝트에서 버그 찾아줘"
33
+ Claude: glob_search → read_file × 5 → grep_search × 3 → 분석
34
+ (4턴, 10+ 도구 호출, 느리고 비쌈)
35
+ ```
36
+
37
+ ### After (코딩버디 있을 때)
38
+
39
+ ```
40
+ 유저: "이 프로젝트에서 버그 찾아줘"
41
+ Claude: "어떤 파일에서 어떤 증상이 나오나요?
42
+ 구체적인 경로와 증상을 알려주시면 빠르게 찾을 수 있습니다."
43
+ 유저: "src/auth/login.ts에서 세션 만료가 안 돼"
44
+ Claude: read_file → 분석 → 수정
45
+ (2턴, 1 도구 호출, 빠르고 저렴)
46
+ ```
47
+
48
+ ## 코딩버디가 하는 일 (37개 액션아이템)
49
+
50
+ Claude Code 내부 코드를 분석한 두 편의 글에서 추출한 최적화 규칙입니다.
51
+
52
+ ### 1. 구체성 강제 — 도구 폭발 방지
53
+ - 파일 경로 없는 요청 → "어떤 파일인지 알려주세요" 되묻기
54
+ - 함수명/라인 없는 코드 작업 → 범위 확인
55
+ - 모호한 질문이 4+턴 × 10+ 도구 호출을 유발하는 것을 방지
56
+
57
+ ### 2. 모델 자동 추천
58
+ 작업 시작 시 `analyze_task` 도구를 호출하여 복잡도를 분석하고 적합한 모델을 추천합니다.
59
+
60
+ | 복잡도 | 모델 | 단가 (input/output per 1M) | 적합한 작업 |
61
+ |--------|------|--------------------------|-------------|
62
+ | Simple | Haiku | $1 / $5 | 오타, 이름변경, 포맷, 간단 조회 |
63
+ | Medium | Sonnet | $15 / $75 | 기능 구현, 버그 수정, 테스트, 코드 리뷰 |
64
+ | Complex | Opus | $15 / $75 | 아키텍처, 마이그레이션, 대규모 리팩토링 |
65
+
66
+ ### 3. 세션 관리
67
+ - 한 세션 = 한 작업 원칙
68
+ - 대화 길어지면 → `/compact` 제안
69
+ - 작업 완료 → `/clear` 또는 새 세션 제안
70
+ - `todo:`, `next:`, `pending:` 키워드로 압축 후 맥락 보존
71
+ - 파일 경로 명시로 압축 생존율 향상
72
+
73
+ ### 4. 캐시 보호 (비용 10배 절감의 핵심)
74
+ Anthropic 서버 캐시가 살아있으면 input 비용이 10분의 1로 줄어듭니다 ($15 → $1.5/1M).
75
+
76
+ 코딩버디는 캐시를 깨는 행위 **전에** 경고합니다:
77
+ - 세션 중 모델 변경 → "캐시가 깨집니다. 새 세션에서 바꾸세요"
78
+ - 세션 중 CLAUDE.md 수정 → "세션 시작 전에 수정하세요"
79
+ - 세션 중 MCP 변경 → "세션 시작 전에 세팅하세요"
80
+ - 5분+ 자리 비움 후 복귀 → "캐시 만료됐을 수 있습니다"
81
+
82
+ ### 5. Output 효율화
83
+ - output 토큰은 input보다 5배 비쌈 ($75 vs $15)
84
+ - 간결한 답변 유도
85
+ - 파일 전체가 아닌 필요한 부분만 읽기
86
+
87
+ ### 6. 생산성 최적화
88
+ - 복잡한 작업 → Plan Mode 먼저 제안
89
+ - 독립적 하위 작업 → 서브 에이전트 병렬 실행
90
+ - 코드 변경 후 → `/diff` → `/commit` → `/pr` 파이프라인 안내
91
+ - CLAUDE.md 없으면 → 계층적 구조로 생성 제안
92
+ - Extended thinking 비용 경고 (단순 작업에 불필요한 사고 토큰 방지)
93
+
94
+ ## MCP 도구
95
+
96
+ ### `analyze_task`
97
+ 작업 복잡도를 분석하고 최적 모델 + 접근 전략을 추천합니다.
98
+
99
+ ```
100
+ 입력: { task: "JWT에서 세션 기반으로 인증 마이그레이션" }
101
+ 출력: {
102
+ complexity: "complex",
103
+ model: { model: "opus", reason_ko: "복잡한 추론이 필요합니다..." },
104
+ approach: ["Plan Mode first: 먼저 영향받는 파일을 파악..."],
105
+ warnings: ["복잡한 작업은 Plan Mode에서 먼저 계획을..."],
106
+ tips: [...]
107
+ }
108
+ ```
109
+
110
+ ### `setup_project`
111
+ 프로젝트 설정을 분석하고 Claude Code 최적화 방안을 종합 추천합니다.
112
+ - CLAUDE.md 계층적 구조 제안
113
+ - CLAUDE.local.md 분리 안내
114
+ - 권한 모드 최적화
115
+ - settings.json 자동 허용 설정
116
+ - Hooks 자동화 (포맷팅, 위험 명령 차단)
117
+ - MCP 서버 최적화
118
+
119
+ ### `cost_reference`
120
+ Claude Code 모델별 단가표, 토큰 비율, 캐시 설정, 비용 최적화 팁을 반환합니다.
121
+
122
+ ## 배경
123
+
124
+ 이 프로젝트는 Claude Code의 오픈소스 구현체인 [claw-code](https://github.com/gda05024/claw-code)의 Rust 소스코드를 분석하여 다음 모듈들의 동작 원리를 파악한 결과물입니다:
125
+
126
+ | 모듈 | 역할 | 핵심 인사이트 |
127
+ |------|------|---------------|
128
+ | `usage.rs` | 비용 추적 | output이 input보다 5배 비쌈, 모델 선택이 비용의 90% 결정 |
129
+ | `prompt_cache.rs` | 프롬프트 캐싱 | 5분 TTL, 캐시 브레이크 감지, cache_read가 10배 저렴 |
130
+ | `compact.rs` | 자동 압축 | todo/next/pending 키워드 보존, 파일 경로 최대 8개 보존 |
131
+ | `providers/mod.rs` | 토큰 추정 | bytes ÷ 4, 매 요청마다 messages+system+tools+tool_choice 전송 |
132
+ | `types.rs` | 사고 토큰 | thinking 토큰이 output 단가로 청구, 별도 추적 없음 |
133
+ | `anthropic.rs` | 재시도 | 최대 2회 재시도, 타임아웃 시 이중 과금 가능 |
134
+ | `prompt.rs` | 시스템 프롬프트 | CLAUDE.md 계층 탐색, 동적/정적 경계 |
135
+ | `conversation.rs` | 대화 루프 | 도구 순차 실행, 모호한 질문 = 도구 폭발 |
136
+ | `permission_enforcer.rs` | 권한 | 5단계 모드, settings.json 자동 허용 |
137
+ | `hooks.rs` | 훅 | pre/post 도구 실행, 환경변수, 종료코드 제어 |
138
+ | `session.rs` | 세션 | JSONL 저장, 256KB 로테이션, fork 지원 |
139
+
140
+ ## 라이선스
141
+
142
+ MIT
package/TEST_CASES.md ADDED
@@ -0,0 +1,165 @@
1
+ # Coding Buddy MCP 테스트 케이스
2
+
3
+ 아무 프로젝트에서 새 세션을 열고 아래 프롬프트를 하나씩 입력합니다.
4
+ 각 테스트 후 `/clear`로 초기화하고 다음 테스트를 진행하세요.
5
+
6
+ ---
7
+
8
+ ## 테스트 0: MCP 연결 확인
9
+ ```
10
+ /mcp
11
+ ```
12
+ - [ ] coding-buddy가 목록에 보인다
13
+ - [ ] 도구 3개 표시: analyze_task, setup_project, cost_reference
14
+
15
+ ---
16
+
17
+ ## A. CRITICAL GATE (구체성 강제) — 가장 중요
18
+
19
+ ### A-1. 모호한 버그 요청 (한국어)
20
+ ```
21
+ 버그 찾아줘
22
+ ```
23
+ - [ ] 도구를 호출하지 않고 파일 경로/증상을 되묻는다
24
+ - [ ] Explore, Glob, Grep 등 탐색을 시작하지 않는다
25
+
26
+ ### A-2. 모호한 버그 요청 (영어)
27
+ ```
28
+ find bugs in this project
29
+ ```
30
+ - [ ] 되묻는다 (which file? what symptoms?)
31
+
32
+ ### A-3. 모호한 리팩토링
33
+ ```
34
+ 코드 리팩토링 해줘
35
+ ```
36
+ - [ ] 범위를 확인한다 (어떤 파일? 어떤 부분?)
37
+
38
+ ### A-4. 모호한 테스트 요청
39
+ ```
40
+ 테스트 작성해줘
41
+ ```
42
+ - [ ] 어떤 파일/함수에 대한 테스트인지 되묻는다
43
+
44
+ ### A-5. 모호한 에러 보고
45
+ ```
46
+ 에러가 나
47
+ ```
48
+ - [ ] 에러 메시지와 발생 파일을 물어본다
49
+
50
+ ### A-6. 구체적 요청 → 바로 실행해야 함
51
+ ```
52
+ package.json의 dependencies 섹션 보여줘
53
+ ```
54
+ - [ ] 되묻지 않고 바로 파일을 읽는다
55
+
56
+ ### A-7. 구체적 버그 요청 → 바로 실행해야 함
57
+ ```
58
+ src/index.ts의 main 함수에서 에러 핸들링이 빠져있어. 확인해줘
59
+ ```
60
+ - [ ] 되묻지 않고 해당 파일을 바로 읽는다
61
+
62
+ ---
63
+
64
+ ## B. 모델 추천 (analyze_task 도구 호출)
65
+
66
+ ### B-1. 단순 작업 → Haiku 추천
67
+ ```
68
+ README.md에서 오타 하나 수정해줘. "recieve"를 "receive"로
69
+ ```
70
+ - [ ] analyze_task 도구를 호출한다
71
+ - [ ] Haiku를 추천한다
72
+
73
+ ### B-2. 중간 작업 → Sonnet 추천
74
+ ```
75
+ src/components/LoginForm.tsx에 비밀번호 유효성 검사 추가해줘
76
+ ```
77
+ - [ ] analyze_task 도구를 호출한다
78
+ - [ ] Sonnet을 추천한다
79
+
80
+ ### B-3. 복잡한 작업 → Opus 추천 + Plan Mode 제안
81
+ ```
82
+ 인증 시스템을 JWT에서 세션 기반으로 전체 마이그레이션 해줘
83
+ ```
84
+ - [ ] analyze_task 도구를 호출한다
85
+ - [ ] Opus를 추천한다
86
+ - [ ] Plan Mode를 먼저 쓰라고 제안한다
87
+
88
+ ---
89
+
90
+ ## C. 세션 관리
91
+
92
+ ### C-1. 주제 변경 감지
93
+ (먼저 아무 작업을 하나 한 후)
94
+ ```
95
+ 그건 됐고, 이제 CI/CD 파이프라인 설정해줘
96
+ ```
97
+ - [ ] 새 세션을 시작하라고 제안한다
98
+
99
+ ### C-2. 작업 완료 후 정리 제안
100
+ (아무 간단한 작업 완료 후 Claude가 "완료했습니다" 류의 답변을 한 후)
101
+ - [ ] /clear 또는 새 세션을 제안한다
102
+
103
+ ---
104
+
105
+ ## D. 캐시 보호
106
+
107
+ ### D-1. 모델 변경 경고
108
+ ```
109
+ 모델을 opus로 바꿔줘
110
+ ```
111
+ - [ ] 캐시가 깨진다고 경고한다
112
+ - [ ] 새 세션에서 바꾸라고 안내한다
113
+
114
+ ### D-2. CLAUDE.md 수정 경고
115
+ ```
116
+ CLAUDE.md에 새로운 규칙 추가해줘
117
+ ```
118
+ - [ ] 세션 시작 전에 수정하라고 경고한다 (캐시 브레이크)
119
+
120
+ ---
121
+
122
+ ## E. 생산성
123
+
124
+ ### E-1. 복잡한 작업 → Plan Mode 제안
125
+ ```
126
+ 데이터베이스 스키마를 PostgreSQL에서 MongoDB로 마이그레이션 계획 세워줘
127
+ ```
128
+ - [ ] Plan Mode를 먼저 제안한다
129
+
130
+ ### E-2. CLAUDE.md 없는 프로젝트에서 setup 제안
131
+ (CLAUDE.md가 없는 프로젝트에서)
132
+ ```
133
+ 이 프로젝트 최적화하고 싶어
134
+ ```
135
+ - [ ] setup_project 도구를 호출하거나 CLAUDE.md 생성을 제안한다
136
+
137
+ ### E-3. 비용 참조
138
+ ```
139
+ Claude Code 모델별 가격이 어떻게 돼?
140
+ ```
141
+ - [ ] cost_reference 도구를 호출한다
142
+ - [ ] 모델별 단가표를 보여준다
143
+
144
+ ---
145
+
146
+ ## F. Output 효율
147
+
148
+ ### F-1. 간결한 응답
149
+ (아무 구체적 작업 후)
150
+ - [ ] 불필요한 요약 없이 간결하게 답한다
151
+ - [ ] "제가 한 작업을 정리하면..." 같은 반복 없음
152
+
153
+ ---
154
+
155
+ ## 테스트 결과 요약
156
+
157
+ | 카테고리 | 통과 | 실패 | 비고 |
158
+ |---------|------|------|------|
159
+ | A. 구체성 강제 (7개) | /7 | /7 | |
160
+ | B. 모델 추천 (3개) | /3 | /3 | |
161
+ | C. 세션 관리 (2개) | /2 | /2 | |
162
+ | D. 캐시 보호 (2개) | /2 | /2 | |
163
+ | E. 생산성 (3개) | /3 | /3 | |
164
+ | F. Output 효율 (1개) | /1 | /1 | |
165
+ | **합계** | **/18** | **/18** | |
package/dist/index.js CHANGED
@@ -8,26 +8,69 @@ import { z } from "zod";
8
8
  // =============================================================================
9
9
  const INSTRUCTIONS = `
10
10
  You are enhanced with Coding Buddy — a pair programming optimizer for Claude Code.
11
- These rules are derived from analysis of Claude Code's internal architecture (prompt caching, compaction, tool execution, cost tracking).
12
- Follow ALL rules below. They directly reduce cost and increase speed.
13
-
14
- ## 1. SPECIFICITY FIRST — prevents tool explosion
15
- - No FILE PATH in request → ask "which file (full path)?" BEFORE acting
16
- - No FUNCTION NAME for code tasks ask which function or line range
17
- - NEVER explore broadly on vague requests
18
- BAD: "find bugs in this project" triggers glob + multi-file read + grep = 4+ turns, 10+ tool calls
19
- GOOD: ask "which file and what symptoms?" → 1 read + 1 analysis = 2 turns
20
- - Tool output limits: Bash=16KB, Grep=250 results, Glob=100 files — scope requests tightly
21
- - For long test output, suggest: "cargo test 2>&1 | tail -50"
22
-
23
- ## 2. MODEL SELECTION call analyze_task tool for each new task
24
- At the start of each new task, call the analyze_task tool to get model + approach recommendation.
25
- Present the recommendation naturally: "이 작업은 [model]이 적합합니다. [reason]"
26
- - Haiku ($1/$5 per 1M tokens): typos, renaming, formatting, simple lookups, boilerplate generation
27
- - Sonnet ($15/$75 per 1M tokens): feature implementation, bug fixes, testing, code review
28
- - Opus ($15/$75 per 1M tokens): architecture design, migrations, complex multi-file refactoring
29
- KEY: To switch models user must start a NEW session. Mid-session model change = cache break = 10x cost spike.
30
- Extended thinking tokens are billed as output ($75/1M). For simple tasks, thinking is pure waste.
11
+
12
+ ======================================================================
13
+ CRITICAL GATE — YOU MUST FOLLOW THIS BEFORE EVERY ACTION
14
+ ======================================================================
15
+
16
+ BEFORE calling ANY tool (Read, Glob, Grep, Bash, Edit, Agent, etc.), evaluate the user's request:
17
+
18
+ Is the request VAGUE? A request is VAGUE if it does NOT contain at least ONE of:
19
+ - A specific file path (e.g., src/auth/login.ts)
20
+ - A specific function or component name
21
+ - A specific error message or symptom description
22
+
23
+ IF THE REQUEST IS VAGUE you MUST ask for specifics FIRST. Do NOT call any tools. Do NOT start exploring.
24
+
25
+ Examples MUST ask first:
26
+ - "버그 찾아줘" / "find bugs" "어떤 파일에서 어떤 증상이 나타나나요? 구체적인 파일 경로와 증상을 알려주세요."
27
+ - "리팩토링 해줘" / "refactor this" "어떤 파일/범위를 리팩토링할까요? 세션에 하나씩 하는 게 효율적입니다."
28
+ - "코드 개선해줘" / "improve the code" "어떤 부분을 개선할까요? 파일 경로를 알려주세요."
29
+ - "테스트 작성해줘" / "write tests" "어떤 파일/함수에 대한 테스트인가요?"
30
+ - "에러가 나" / "there's an error" "어떤 에러 메시지가 나오나요? 어떤 파일에서 발생하나요?"
31
+
32
+ IF THE REQUEST IS SPECIFIC → proceed normally with tool calls.
33
+
34
+ Examples — can proceed immediately:
35
+ - "src/auth/login.ts의 handleSubmit 함수에서 세션 만료 처리가 안 돼" → specific, proceed
36
+ - "package.json에 react 버전 올려줘" → specific, proceed
37
+ - "LoginForm.tsx의 useEffect에서 무한 루프 도는 것 같아" → specific, proceed
38
+
39
+ This gate exists because vague requests cause tool explosion:
40
+ - Vague: 4+ turns × 10+ tool calls = slow ($2-5 wasted)
41
+ - Specific: 1-2 turns × 1-2 tool calls = fast ($0.10-0.30)
42
+
43
+ ======================================================================
44
+ END OF CRITICAL GATE — SPECIFICITY
45
+ ======================================================================
46
+
47
+ ======================================================================
48
+ CRITICAL GATE 2 — MODEL SELECTION (MANDATORY)
49
+ ======================================================================
50
+
51
+ After the request passes the specificity check, you MUST call the analyze_task tool
52
+ BEFORE starting any work. This is NOT optional.
53
+
54
+ Steps:
55
+ 1. Call analyze_task with the user's task description
56
+ 2. Present the result naturally in Korean:
57
+ - "이 작업은 [model]이 적합합니다. [이유]"
58
+ - If current model doesn't match → "현재 [current]를 사용 중인데, 이 작업은 [recommended]가 적합합니다. 새 세션에서 /model [recommended] 로 바꾸시면 비용을 절약할 수 있습니다."
59
+ - If current model matches → briefly confirm and proceed
60
+ 3. THEN start working on the task
61
+
62
+ You MUST call analyze_task even for simple tasks — it only takes one tool call
63
+ and saves the user significant money by recommending the right model.
64
+
65
+ Model pricing reference:
66
+ - Haiku ($1/$5 per 1M tokens): typos, renaming, formatting, simple lookups
67
+ - Sonnet ($15/$75 per 1M tokens): features, bug fixes, tests, code review
68
+ - Opus ($15/$75 per 1M tokens): architecture, migrations, complex refactors
69
+ - Mid-session model change = cache break = 10x cost spike → ALWAYS suggest new session
70
+
71
+ ======================================================================
72
+ END OF CRITICAL GATE — MODEL SELECTION
73
+ ======================================================================
31
74
 
32
75
  ## 3. SESSION DISCIPLINE
33
76
  - ONE session = ONE focused task. When topic changes → suggest: "새 작업이니 새 세션에서 하는 게 효율적입니다"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coding-buddy-mcp",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "A pair programming buddy MCP for Claude Code — optimizes cost and productivity based on Claude Code internals analysis",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -20,6 +20,12 @@
20
20
  "coding-buddy"
21
21
  ],
22
22
  "license": "MIT",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "https://github.com/gda05024/coding-buddy-mcp.git"
26
+ },
27
+ "homepage": "https://github.com/gda05024/coding-buddy-mcp#readme",
28
+ "author": "gda05024",
23
29
  "dependencies": {
24
30
  "@modelcontextprotocol/sdk": "^1.12.1",
25
31
  "zod": "^3.24.0"