@brxce/mcp-server 1.1.16 → 1.1.18
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 +40 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -1
- package/dist/index.js.map +1 -1
- package/dist/install-skill.d.ts +15 -0
- package/dist/install-skill.d.ts.map +1 -0
- package/dist/install-skill.js +166 -0
- package/dist/install-skill.js.map +1 -0
- package/dist/tools/worknode-plan-organize-tool.d.ts.map +1 -1
- package/dist/tools/worknode-plan-organize-tool.js +9 -3
- package/dist/tools/worknode-plan-organize-tool.js.map +1 -1
- package/dist/tools/workspace-inbox-tool.d.ts +6 -2
- package/dist/tools/workspace-inbox-tool.d.ts.map +1 -1
- package/dist/tools/workspace-inbox-tool.js +15 -14
- package/dist/tools/workspace-inbox-tool.js.map +1 -1
- package/package.json +2 -1
- package/skills/brxce-mcp/SKILL.md +165 -0
- package/skills/brxce-mcp/references/error-recovery.md +274 -0
- package/skills/brxce-mcp/references/footguns.md +293 -0
- package/skills/brxce-mcp/references/tool-selection.md +245 -0
- package/skills/brxce-mcp/references/workflows.md +276 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: brxce-mcp
|
|
3
|
+
description: BRXCE MCP 89개 툴을 효율적·안전하게 사용하기 위한 가이드. 워크노드 CRUD, 태그/회의/알림 관리, AC(Acceptance Criteria) 강제, batch 처리, 캐시 일관성 등 BRXCE 관련 모든 작업에 사용. 인박스 정리, 일일 보고, 이슈 트리아지, GitHub 이슈/PR 동기화, 워크노드 검색, 멤버별 작업 조회, 미팅 노트 작성 등 BRXCE 워크스페이스 작업이 필요할 때 자동으로 활성화하고 필요하면 `/brxce-mcp`로 직접 호출 가능.
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: Designed for Claude Code and OpenClaw via the AgentSkills standard. Requires @brxce/mcp-server >= 1.1.18.
|
|
6
|
+
metadata:
|
|
7
|
+
author: BRXCE Team
|
|
8
|
+
version: "1.1.0"
|
|
9
|
+
brxce:
|
|
10
|
+
minMcpVersion: "1.1.18"
|
|
11
|
+
backend: "https://brxce-backend-production-1013529945435.asia-northeast3.run.app"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# BRXCE MCP — Best-Practice Playbook
|
|
15
|
+
|
|
16
|
+
89개의 BRXCE MCP 툴을 효율적이고 안전하게 사용하기 위한 가이드. 1.1.16까지의 21+개 안정화 fix 전수 검증 결과를 기반으로 작성됨.
|
|
17
|
+
|
|
18
|
+
## 5대 핵심 원칙
|
|
19
|
+
|
|
20
|
+
이 5가지는 BRXCE MCP 사용 시 거의 항상 적용된다.
|
|
21
|
+
|
|
22
|
+
### 1. preview는 기본 true — 명시적으로 끄기
|
|
23
|
+
|
|
24
|
+
`brxce_create_worknodes`, `brxce_update_worknodes`, `brxce_create_meeting`은 모두 `preview: true`가 기본값이다 (안전장치). 실제 생성/수정을 원하면 **반드시 `preview: false` 명시**.
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
// ❌ dry run으로 끝남
|
|
28
|
+
brxce_create_worknodes({ worknodes: [...] })
|
|
29
|
+
|
|
30
|
+
// ✅ 실제 생성
|
|
31
|
+
brxce_create_worknodes({ worknodes: [...], preview: false })
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### 2. workspaceId는 한 번만 — 컨텍스트가 자동 전파됨
|
|
35
|
+
|
|
36
|
+
`brxce_read_worknodes`나 `brxce_workspace_overview`로 한 번 workspaceId를 명시하면, MCP 서버가 컨텍스트에 저장한다. 이후 displayId(`#5723`) 기반 호출은 workspaceId 생략 가능.
|
|
37
|
+
|
|
38
|
+
UUID 기반 호출은 globally unique이므로 workspaceId 없이도 동작한다 (1.1.16부터 `get_worknode_tags` 등에서 자동 fallback resolution).
|
|
39
|
+
|
|
40
|
+
### 3. UUID는 worknodeIds, displayId는 query
|
|
41
|
+
|
|
42
|
+
`brxce_read_worknodes` / `brxce_worknode_detail` 호출 시:
|
|
43
|
+
- **UUID 입력** → `worknodeIds: [uuid]` 또는 `nodeIds: [uuid]` (alias)
|
|
44
|
+
- **displayId 입력** (`#5723`, `5723`, `WS-5723`) → `query: "#5723"` 또는 `displayId: 5723`
|
|
45
|
+
|
|
46
|
+
UUID를 `query`로 넣으면 백엔드는 title 검색만 하므로 0건 반환한다 (#1101 패턴).
|
|
47
|
+
|
|
48
|
+
### 4. task / subtask는 acceptance_criteria 필수
|
|
49
|
+
|
|
50
|
+
백엔드가 강제한다 (#1079). task/subtask 생성 시 최소 1개의 AC가 없으면 400 에러. 단순한 보고용 메모는 `nodeType: note`를 사용하면 AC 없이 가능.
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
brxce_create_worknodes({
|
|
54
|
+
worknodes: [{
|
|
55
|
+
title: "API 인증 미들웨어 구현",
|
|
56
|
+
nodeType: "task",
|
|
57
|
+
acceptance_criteria: [
|
|
58
|
+
{ title: "POST /auth/login 200 응답" },
|
|
59
|
+
{ title: "잘못된 토큰은 401 반환" },
|
|
60
|
+
],
|
|
61
|
+
}],
|
|
62
|
+
preview: false,
|
|
63
|
+
})
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 5. batch가 가능하면 batch_actions 사용
|
|
67
|
+
|
|
68
|
+
N개 워크노드에 같은 action을 적용할 때 `brxce_batch_actions`(complete/archive/unarchive/delete/move/update-status/update-priority)나 `brxce_batch_assign` / `brxce_batch_assign_tags` 사용. N+1 update 호출은 피한다.
|
|
69
|
+
|
|
70
|
+
### 6. 인박스는 단일 `inbox` 배열 — my/shared 분리 없음
|
|
71
|
+
|
|
72
|
+
**정의**: 인박스 = 내 워크스페이스의 `status === backlog` 노드 전부 (archived/deleted 제외). 프런트엔드 `isBacklogNode` semantics 그대로.
|
|
73
|
+
|
|
74
|
+
#1021로 워크스페이스가 1:1 personal이 되면서 `myInbox`/`sharedInbox` 분리 개념은 폐기됨. 1.1.18+부터 `brxce_workspace_inbox` 응답은 **단일 `inbox` 배열** + `inboxCount`를 반환한다.
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
// ✅ 1.1.18+
|
|
78
|
+
const { inbox, summary } = await brxce_workspace_inbox({ workspaceId })
|
|
79
|
+
// → inbox: [...], summary: { inboxCount, workspaceId, userId }
|
|
80
|
+
|
|
81
|
+
// ❌ 1.1.17 이하 (legacy, 더 이상 동작하지 않음)
|
|
82
|
+
// const { myInbox, sharedInbox } = ...
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**주의**: 인박스는 "분류 안 된 ROOT 노드"가 아니라 "backlog 상태의 모든 노드"다. BRXCE 프로젝트 하위의 backlog 작업도 인박스에 포함된다 — 이게 정상이다.
|
|
86
|
+
|
|
87
|
+
## 자주 쓰는 워크플로우 (요약)
|
|
88
|
+
|
|
89
|
+
상세 단계는 [references/workflows.md](references/workflows.md) 참고.
|
|
90
|
+
|
|
91
|
+
| 시나리오 | 핵심 흐름 |
|
|
92
|
+
|---------|----------|
|
|
93
|
+
| 인박스 정리 | `workspace_inbox` (통합 `inbox` 배열) → `batch_actions(action: archive/move/complete)` |
|
|
94
|
+
| 일일 보고 | `daily_report` → `goal_progress` → 댓글/노트 정리 |
|
|
95
|
+
| 이슈 트리아지 | `read_worknodes(query)` → 우선순위/assignee 일괄 변경 → 태그 |
|
|
96
|
+
| GitHub 이슈 동기화 | `create_worknodes(task + AC)` → tag `issue-created` 부착 |
|
|
97
|
+
| 회의 준비 | `create_meeting(preview:true → false)` → `add_agenda_item` → `add_meeting_note` |
|
|
98
|
+
| 멤버별 작업 검토 | `worknodes_by_member(memberId or userId)` → `complete_worknode` |
|
|
99
|
+
| 태그 청소 | `get_tag_stats` → 미사용 태그 `delete_tag` |
|
|
100
|
+
|
|
101
|
+
## 도구 선택 가이드 (요약)
|
|
102
|
+
|
|
103
|
+
89개 툴의 카테고리별 대표 도구. 상세 분류는 [references/tool-selection.md](references/tool-selection.md) 참고.
|
|
104
|
+
|
|
105
|
+
| 카테고리 | 대표 툴 | 용도 |
|
|
106
|
+
|---------|--------|-----|
|
|
107
|
+
| 워크스페이스 | `workspace_overview`, `workspace_statistics`, `global_overview` | 트리/통계/전사 |
|
|
108
|
+
| 워크노드 R | `read_worknodes`, `worknode_detail`, `worknode_subtree`, `worknode_history` | 검색/상세/하위/히스토리 |
|
|
109
|
+
| 워크노드 W | `create_worknodes`, `update_worknodes`, `move_worknode`, `complete_worknode` | CRUD + 이동/완료 |
|
|
110
|
+
| 워크노드 일괄 | `batch_actions`, `batch_assign`, `batch_assign_tags`, `archive_worknodes` | bulk 처리 |
|
|
111
|
+
| 정렬/필터 | `filter_worknodes`, `find_worknodes_by_tags`, `worknodes_by_member`, `my_work` | 조건 검색 |
|
|
112
|
+
| 태그 | `list_tags`, `create_tag`, `add_tags_to_worknode`, `tag_changes` | 태그 시스템 |
|
|
113
|
+
| 회의 | `create_meeting`, `add_agenda_item`, `add_meeting_note`, `add_meeting_decision` | 미팅 사이클 |
|
|
114
|
+
| 알림 | `list_notifications`, `mark_all_notifications_read`, `delete_notification` | 인박스 |
|
|
115
|
+
| 댓글/AC | `create_comment`, `create_criteria`, `update_criteria` | 협업/검수 |
|
|
116
|
+
| 반복 | `create_recurring_template`, `list_recurring_templates` | RRULE 기반 자동 생성 |
|
|
117
|
+
| 첨부 | `list_attachments`, `upload_attachment`, `download_attachment` | 파일 |
|
|
118
|
+
| 분석 | `daily_report`, `goal_progress`, `workspace_delta`, `plan_organize` | 보고/델타 |
|
|
119
|
+
| 사용자 | `search_users`, `list_workspace_members` | 멤버 조회 |
|
|
120
|
+
|
|
121
|
+
## 함정 (footguns)
|
|
122
|
+
|
|
123
|
+
이번 세션 안정화 전 발견된 모든 함정 + 1.1.16에서 수정된 것은 [references/footguns.md](references/footguns.md). 핵심:
|
|
124
|
+
|
|
125
|
+
- `workspace_delta`는 sinceVersion=0이면 800KB+ 가능 → `maxChanges` 명시 (default 50)
|
|
126
|
+
- `batch_assign`이 0/N으로 silent fail하던 시기 있었음 — 1.1.15+에서 정상 메시지
|
|
127
|
+
- `permanent_delete` 직후 `workspace_inbox`는 캐시 invalidation 필요 — 1.1.16+에서 자동
|
|
128
|
+
- harness가 array 파라미터를 첫 호출에서 string으로 보내는 경우가 있음 — schema 로드 후 재시도
|
|
129
|
+
- 인박스가 회의 분량으로 비대 → `workspace_inbox` 응답 50건 cap
|
|
130
|
+
|
|
131
|
+
## 에러 복구
|
|
132
|
+
|
|
133
|
+
상세는 [references/error-recovery.md](references/error-recovery.md). 빠른 참조:
|
|
134
|
+
|
|
135
|
+
| HTTP | 의미 | 즉각 액션 |
|
|
136
|
+
|------|------|----------|
|
|
137
|
+
| 401 | 토큰 만료 | `${BRXCE_API_TOKEN}` 갱신 — MCP 서버 재시작 |
|
|
138
|
+
| 403 | 권한 없음 | workspaceId가 본인 owner인지 확인 |
|
|
139
|
+
| 404 | 리소스 없음 / 라우트 없음 | UUID 정확성 + MCP 서버 버전 (>=1.1.16) 확인 |
|
|
140
|
+
| 410 | Gone (#1021로 제거된 기능) | invitation/workspace_member 툴 — 사용 중단 |
|
|
141
|
+
| 500 + Prisma | 백엔드 raw SQL 버그 | 재시도 후 GitHub 이슈 |
|
|
142
|
+
| `Network error: Server error` | api-client 5xx wrap | 1.1.13 미만 사용 중 — 업데이트 |
|
|
143
|
+
|
|
144
|
+
## 안전 규칙
|
|
145
|
+
|
|
146
|
+
- **테스트 데이터**: 항상 `[테스트]` prefix + `note` 타입 + 끝나면 `permanent_delete_worknode`
|
|
147
|
+
- **대량 변경**: `preview: true` 한 번 → 결과 검토 → `preview: false`
|
|
148
|
+
- **삭제**: soft delete(`delete_worknode`)는 idempotent. permanent delete는 owner만 가능 + cascade
|
|
149
|
+
- **인박스 stale 데이터**: deletion 후 inbox에 잔존하면 1회 한정 (cache pre-fix data). 1.1.16부터는 invalidation 자동
|
|
150
|
+
|
|
151
|
+
## MCP 서버 버전 의존성
|
|
152
|
+
|
|
153
|
+
- **>= 1.1.18 권장** — 통합 인박스 (`inbox` 단일 배열), 이 skill의 모든 권고가 동작
|
|
154
|
+
- **>= 1.1.16** — 대부분 동작하지만 인박스가 아직 `myInbox`/`sharedInbox`로 분리 반환
|
|
155
|
+
- **>= 1.1.13** — cache/route 미수정 다수
|
|
156
|
+
- **< 1.1.10** — 사용 비추천 (응답 파싱, 5xx 처리, slug 자동 생성 등 다수 fix 누락)
|
|
157
|
+
|
|
158
|
+
업데이트: `npm install -g @brxce/mcp-server@latest` 후 Claude Code / OpenClaw 재시작.
|
|
159
|
+
|
|
160
|
+
## 더 알아보기
|
|
161
|
+
|
|
162
|
+
- [references/workflows.md](references/workflows.md) — 실제 사용 패턴 카탈로그
|
|
163
|
+
- [references/tool-selection.md](references/tool-selection.md) — 89 툴 전체 분류 + 결정 트리
|
|
164
|
+
- [references/footguns.md](references/footguns.md) — 함정 카탈로그
|
|
165
|
+
- [references/error-recovery.md](references/error-recovery.md) — 에러 코드별 복구
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
# BRXCE MCP Error Recovery
|
|
2
|
+
|
|
3
|
+
HTTP 코드 / 에러 메시지별 진단 + 복구 절차.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## HTTP Status Codes
|
|
8
|
+
|
|
9
|
+
### 401 Unauthorized
|
|
10
|
+
|
|
11
|
+
**에러 형태**:
|
|
12
|
+
```
|
|
13
|
+
API request failed: 401 Unauthorized
|
|
14
|
+
Response: {"success":false,"error":{"code":"UNAUTHORIZED","message":"User not authenticated"}}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**원인**:
|
|
18
|
+
- MCP 서버에 로드된 `BRXCE_API_TOKEN` 만료
|
|
19
|
+
- 토큰 자체가 잘못됨
|
|
20
|
+
- 1.1.13 이하에서 동시 refresh race condition (자체 fix됨)
|
|
21
|
+
|
|
22
|
+
**복구**:
|
|
23
|
+
1. 새 토큰 발급 (BRXCE 웹앱 settings)
|
|
24
|
+
2. `~/.brxce/config` 또는 환경변수 `BRXCE_API_TOKEN` 갱신
|
|
25
|
+
3. **MCP 서버 재시작 필수** — 토큰은 startup 시 로드됨
|
|
26
|
+
- Claude Code: 세션 종료 → 재시작
|
|
27
|
+
- OpenClaw: `openclaw gateway restart`
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
### 403 Forbidden
|
|
32
|
+
|
|
33
|
+
**에러 형태**:
|
|
34
|
+
```
|
|
35
|
+
{"code":"FORBIDDEN","message":"No access to workspace ..."}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**원인**:
|
|
39
|
+
- 다른 사용자의 워크스페이스 ID를 사용
|
|
40
|
+
- workspaceId가 본인 owner가 아님 (#1021 이후 워크스페이스 = 1:1 personal)
|
|
41
|
+
- permanent_delete를 owner가 아닌 사용자가 시도
|
|
42
|
+
|
|
43
|
+
**복구**:
|
|
44
|
+
1. `brxce_list_workspaces` → 본인 owner 워크스페이스 확인
|
|
45
|
+
2. workspaceId 정정
|
|
46
|
+
3. 회의/노트의 경우: 대상 회의의 워크스페이스 owner인지 확인
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
### 404 Not Found
|
|
51
|
+
|
|
52
|
+
**두 가지 원인 분리 필요**:
|
|
53
|
+
|
|
54
|
+
#### A. 리소스 자체가 없음
|
|
55
|
+
```
|
|
56
|
+
{"code":"NOT_FOUND","message":"WorkNode <uuid> not found or already deleted"}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**원인**:
|
|
60
|
+
- UUID 오타
|
|
61
|
+
- 이미 hard delete됨
|
|
62
|
+
- soft delete된 항목을 다시 delete (1.1.13+에서 idempotent — 이젠 정상 404 반환)
|
|
63
|
+
|
|
64
|
+
**복구**: ID 재확인 또는 무시 (idempotent라면 의도된 동작).
|
|
65
|
+
|
|
66
|
+
#### B. 라우트 자체가 미구현 (백엔드 버그)
|
|
67
|
+
```
|
|
68
|
+
{"message":"Route POST:/api/v1/mcp/... not found","statusCode":404}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**원인**: MCP 툴은 호출하지만 백엔드에 그 라우트가 없음. 1.1.16 이전 공통 패턴.
|
|
72
|
+
|
|
73
|
+
**복구**:
|
|
74
|
+
1. MCP 서버 버전 확인 (`npm list -g @brxce/mcp-server`)
|
|
75
|
+
2. < 1.1.16 → 업데이트: `npm install -g @brxce/mcp-server@latest`
|
|
76
|
+
3. backend 미배포 가능성 → main 배포 상태 확인
|
|
77
|
+
|
|
78
|
+
영향 받았던 라우트 (모두 1.1.16+에서 fix):
|
|
79
|
+
- `POST /mcp/worknodes/filter`
|
|
80
|
+
- `POST/GET/PUT/DELETE /mcp/meetings/:id/agenda/:itemId/notes`
|
|
81
|
+
- `DELETE /mcp/notifications/:id`
|
|
82
|
+
- `PUT /mcp/notifications/read-all`
|
|
83
|
+
- `DELETE /mcp/worknodes/:id/permanent`
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
### 400 Bad Request
|
|
88
|
+
|
|
89
|
+
**원인 패턴**:
|
|
90
|
+
|
|
91
|
+
#### A. Validation 실패
|
|
92
|
+
```
|
|
93
|
+
{"code":"VALIDATION_ERROR","message":"body/workspaceId must match format \"uuid\""}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**복구**: 파라미터 형태 확인. 특히:
|
|
97
|
+
- workspaceId는 UUID 문자열 (`null` 금지)
|
|
98
|
+
- dueDate/scheduledAt은 ISO 8601 with timezone
|
|
99
|
+
|
|
100
|
+
#### B. AC enforcement
|
|
101
|
+
```
|
|
102
|
+
{"code":"BAD_REQUEST","message":"task requires at least 1 acceptance criteria..."}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**복구**: `acceptance_criteria: [{ title: "..." }]` 추가, 또는 `nodeType: "note"`로 변경.
|
|
106
|
+
|
|
107
|
+
#### C. Confirmation 누락
|
|
108
|
+
```
|
|
109
|
+
{"code":"VALIDATION_ERROR","message":"confirmation must be exactly \"PERMANENTLY DELETE\""}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**복구**: `permanent_delete_worknode`는 `confirm: true` 필수.
|
|
113
|
+
|
|
114
|
+
#### D. Evidence 누락
|
|
115
|
+
```
|
|
116
|
+
{"message":"Evidence is required to complete boolean acceptance criteria \"...\""}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**복구**: `update_criteria`로 isCompleted=true 시 `currentValue` 또는 `evidenceUrl` 함께 전달.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
### 410 Gone (사용 중단된 기능)
|
|
124
|
+
|
|
125
|
+
**에러 형태**:
|
|
126
|
+
```
|
|
127
|
+
{"code":"GONE","message":"Workspace invitations have been removed..."}
|
|
128
|
+
{"code":"GONE","message":"Workspace member management has been removed..."}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**원인**: #1021 (워크스페이스 = personal model 전환)으로 폐기. invitation, workspace_member, bot 계열 전체 폐기.
|
|
132
|
+
|
|
133
|
+
**복구**: 사용 중단. 1.1.11+ 이후 MCP 툴 자체도 제거됨. 만약 1.1.10 이하에서 보인다면 업데이트.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
### 500 Internal Server Error
|
|
138
|
+
|
|
139
|
+
**에러 형태별 분기**:
|
|
140
|
+
|
|
141
|
+
#### A. Prisma raw query 에러
|
|
142
|
+
```
|
|
143
|
+
Raw query failed. Code: `42P01`. Message: `relation "..." does not exist`
|
|
144
|
+
Raw query failed. Code: `42703`. Message: `column "..." does not exist`
|
|
145
|
+
Raw query failed. Code: `42883`. Message: `operator does not exist: uuid = text`
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**원인**: 백엔드 raw SQL 버그. global_overview, tag_changes 등에서 발생.
|
|
149
|
+
|
|
150
|
+
**복구**: 1.1.16+에서 모두 fix됨. 그 미만 버전이면 업데이트.
|
|
151
|
+
|
|
152
|
+
#### B. Prisma other
|
|
153
|
+
```
|
|
154
|
+
Invalid `prisma.$queryRaw()` invocation
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**원인**: 다양. 새 버그 가능성.
|
|
158
|
+
|
|
159
|
+
**복구**: 재시도 → 영구적이면 GitHub issue 등록 (스택트레이스 + nodeId 포함).
|
|
160
|
+
|
|
161
|
+
#### C. 일반 INTERNAL_ERROR
|
|
162
|
+
```
|
|
163
|
+
{"code":"INTERNAL_ERROR","message":"<some message>"}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**복구**: 메시지 분석. service 레이어 throw일 가능성. 재시도 후 영구면 보고.
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## MCP 클라이언트 에러 (서버 도달 전)
|
|
171
|
+
|
|
172
|
+
### "Network error when calling ...: Server error"
|
|
173
|
+
|
|
174
|
+
**원인**: 1.1.13 미만 api-client가 5xx를 "Server error"로 wrap하고 outer catch가 다시 "Network error"로 감쌌음. 실제로는 backend 5xx.
|
|
175
|
+
|
|
176
|
+
**복구**: 1.1.13+로 업데이트. 1.1.13+부터는 5xx도 "API request failed: 500" 형태로 그대로 노출.
|
|
177
|
+
|
|
178
|
+
### "API request failed: 500" (구조화된 에러)
|
|
179
|
+
|
|
180
|
+
**원인**: 백엔드 5xx. 위 #500 섹션 참고.
|
|
181
|
+
|
|
182
|
+
**복구**: 1.1.13+에서 정상 패턴.
|
|
183
|
+
|
|
184
|
+
### `Cannot read properties of undefined (reading 'length')` 또는 `(reading 'name')`
|
|
185
|
+
|
|
186
|
+
**원인**: 1.1.10 ~ 1.1.13 시기 search_users / worknode_detail 응답 파싱 버그.
|
|
187
|
+
|
|
188
|
+
**복구**: 1.1.14+로 업데이트.
|
|
189
|
+
|
|
190
|
+
### MCP error -32602: Invalid arguments
|
|
191
|
+
|
|
192
|
+
**원인**: Zod schema validation 실패. 보통 내가 잘못 호출함.
|
|
193
|
+
|
|
194
|
+
**복구**: 에러 메시지의 `path` 확인 → 해당 필드 형식 점검.
|
|
195
|
+
|
|
196
|
+
### `Found 0 WorkNodes`
|
|
197
|
+
|
|
198
|
+
**원인**: UUID를 `query` 필드로 보냈을 가능성 (footguns.md 참고).
|
|
199
|
+
|
|
200
|
+
**복구**: `worknodeIds` 또는 `nodeIds` 필드로 전환.
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## Cache / Stale 데이터
|
|
205
|
+
|
|
206
|
+
### 삭제했는데 inbox에 그대로
|
|
207
|
+
|
|
208
|
+
**원인**: 1.1.16 이전 cache invalidation 미발행.
|
|
209
|
+
|
|
210
|
+
**복구**:
|
|
211
|
+
- 1.1.16+로 업데이트 (가장 좋은 방법)
|
|
212
|
+
- 또는 새 노드 1개 만들고 다시 삭제해서 cache update를 강제 트리거
|
|
213
|
+
- 또는 노드를 직접 read해서 진짜 존재 확인 (`Found 0`이면 실제 삭제됨, inbox만 stale)
|
|
214
|
+
|
|
215
|
+
### 새로 만든 태그가 list_tags에 안 보임
|
|
216
|
+
|
|
217
|
+
**원인**: 태그 생성 캐시 invalidation 누락 가능성 (확인 안 됨).
|
|
218
|
+
|
|
219
|
+
**복구**: 한 번 더 호출 또는 `search_tags`로 직접 검색.
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Token / Context 폭발
|
|
224
|
+
|
|
225
|
+
### 응답이 token limit 초과
|
|
226
|
+
```
|
|
227
|
+
Error: result (888,501 characters) exceeds maximum allowed tokens
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
**원인 후보**:
|
|
231
|
+
- `workspace_delta(sinceVersion: 0)` — 첫 sync → `maxChanges` 설정
|
|
232
|
+
- `read_worknodes` 무필터 → `query`/`limit`/필터 추가
|
|
233
|
+
- `worknodes_by_member`로 1500+ 노드 반환 → status 필터 또는 `limit`
|
|
234
|
+
|
|
235
|
+
**복구**: 항상 페이지네이션 + 필터링 사용. 1회 호출로 모든 데이터를 가져오려 하지 말 것.
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## 진단 명령
|
|
240
|
+
|
|
241
|
+
빠르게 어디서 막힌 건지 파악하고 싶을 때:
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
# MCP 서버 버전
|
|
245
|
+
npm list -g @brxce/mcp-server
|
|
246
|
+
|
|
247
|
+
# Backend 라이브 체크
|
|
248
|
+
curl -sS -o /dev/null -w "%{http_code}\n" \
|
|
249
|
+
https://brxce-backend-production-1013529945435.asia-northeast3.run.app/api/v1/mcp/status
|
|
250
|
+
|
|
251
|
+
# 401이면 토큰 환경변수 확인
|
|
252
|
+
echo $BRXCE_API_TOKEN | head -c 20
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## 에러 → 액션 빠른 표
|
|
258
|
+
|
|
259
|
+
| 에러 | 1순위 액션 |
|
|
260
|
+
|------|----------|
|
|
261
|
+
| 401 | 토큰 갱신 + MCP 서버 재시작 |
|
|
262
|
+
| 403 | 본인 워크스페이스 확인 |
|
|
263
|
+
| 404 (not found) | UUID 정정 / idempotent면 무시 |
|
|
264
|
+
| 404 (route not found) | MCP 서버 1.1.16+ 업데이트 |
|
|
265
|
+
| 400 (uuid format) | workspaceId 형태 점검 |
|
|
266
|
+
| 400 (AC required) | acceptance_criteria 추가 또는 note 사용 |
|
|
267
|
+
| 400 (confirmation) | `confirm: true` 추가 |
|
|
268
|
+
| 400 (evidence) | currentValue/evidenceUrl 추가 |
|
|
269
|
+
| 410 | 해당 기능 폐기됨, 사용 중단 |
|
|
270
|
+
| 500 (Prisma raw) | 1.1.16+ 업데이트 |
|
|
271
|
+
| Found 0 WorkNodes | nodeIds로 전환 |
|
|
272
|
+
| Cannot read properties of undefined | 1.1.14+ 업데이트 |
|
|
273
|
+
| Network error: Server error | 1.1.13+ 업데이트 |
|
|
274
|
+
| 토큰 폭발 | 페이지/필터 추가 |
|