# Task-37.1 완료 보고서
**작업**: OpenClaw MCP 래퍼 서버 재귀호출 방지 로직 보완
**팀**: dev2-team (오딘, 토르, 헤임달)
**완료일**: 2026-03-01

---

## 작업 내용

### 문제
Claude Code 세션 안에서 `openclaw_agent` MCP 도구를 호출하면, OpenClaw 에이전트가 내부적으로 Claude Code를 다시 시작하고, 그 Claude Code가 다시 `openclaw_agent`를 호출하는 무한루프(재귀) 가능성이 존재했음.

### 해결 방법: 환경변수 기반 깊이 추적
`OPENCLAW_MCP_DEPTH` 환경변수로 호출 깊이를 추적하여 재귀 차단.

**동작 흐름:**
1. 최상위 Claude Code → MCP 서버 (`OPENCLAW_MCP_DEPTH` 없음 → depth=0)
2. depth(0) < max(1) → 정상 처리
3. `run_openclaw`가 openclaw subprocess를 시작할 때 env에 `OPENCLAW_MCP_DEPTH=1` 주입
4. openclaw 내부에서 Claude Code → 새 MCP 서버 기동 → `OPENCLAW_MCP_DEPTH=1` 상속
5. depth(1) >= max(1) → **재귀 감지 → 즉시 에러 반환, subprocess 실행 차단**

---

## 생성/수정 파일 목록

| 파일 | 변경 유형 | 설명 |
|------|-----------|------|
| `/home/jay/workspace/mcp/openclaw-mcp-server.py` | 수정 | 재귀 방지 로직 추가, 버전 1.1.0 |
| `/home/jay/workspace/mcp/test_openclaw_recursion.py` | 신규 생성 | 테스트 19개 |

### 코드 변경 상세 (openclaw-mcp-server.py)
- `import os` 추가
- `run_openclaw()`: `current_depth: int` 파라미터 추가, subprocess 실행 시 `OPENCLAW_MCP_DEPTH = current_depth+1` 환경변수 주입
- `handle_tools_call()`: 상단에 재귀 감지 블록 추가
  - `OPENCLAW_MCP_DEPTH` 읽기 (기본값 0, 파싱 오류 시 0)
  - `OPENCLAW_MCP_MAX_DEPTH` 읽기 (기본값 1, 파싱 오류 시 1)
  - `current_depth >= max_depth` 이면 `isError: true` 응답 즉시 반환
- 버전: `1.0.0` → `1.1.0`

---

## 테스트 결과

```
Ran 19 tests in 0.006s
OK (19/19 통과)
```

### 테스트 케이스 목록
1. 정상 호출 (OPENCLAW_MCP_DEPTH 미설정)
2. 정상 호출 (depth=0 명시)
3. 재귀 차단 (depth=1, max=1 기본값)
4. 재귀 차단 (depth=2, max=1)
5. 정상 호출 (depth=1, max=2 커스텀)
6. 재귀 차단 (depth=2, max=2 커스텀)
7. subprocess에 OPENCLAW_MCP_DEPTH 전달 검증
8. message 파라미터 누락 (기존 동작 유지)
9. tools/list 메서드 기본 동작
10. initialize 메서드 기본 동작
11. 알 수 없는 도구 에러
12. 재귀 에러 메시지 형식 검증
13. 경계값 (depth==max → 차단)
14. 경계값 (depth < max → 정상)
15. 기본 max_depth=1 검증
16. 유효하지 않은 max_depth 형식 처리
17. run_openclaw depth increment 검증
18. 재귀 응답 JSON-RPC 형식 검증
19. 정상 응답 JSON-RPC 형식 검증

---

## 버그 유무
없음. 모든 테스트 통과.

## 비고
- 기존 정상 호출(depth=0)은 영향 없음
- `OPENCLAW_MCP_MAX_DEPTH` 환경변수로 허용 깊이 조정 가능 (기본값 1 = 재귀 불허)
- 잘못된 환경변수 값(문자열 등) 입력 시 기본값 사용하여 안전 처리
