배경
현재 MCP tool surface는 13개:
- read-only: `list_pages`, `list_console_messages`, `list_network_requests`, `get_dom_document`, `take_snapshot`, `take_screenshot`, `measure_safe_area`, `AIT_getOperationalEnvironment`, `AIT_getMockState`, `AIT_getSdkCallHistory`
- side-effect: `call_sdk`, `evaluate`, `build_attach_url`
대부분은 CDP method를 1:1 wrapping한 syntactic sugar. 예시:
- `evaluate` = `Runtime.evaluate` wrap
- `take_screenshot` = `Page.captureScreenshot` wrap
- `take_snapshot` = `DOMSnapshot.captureSnapshot` wrap
- `get_dom_document` = `DOM.getDocument` wrap
- `call_sdk` = `Runtime.evaluate("window.__sdk.X(...)")` wrap
이 sugar들은:
- agent 학습 비용 (한 시점에 13개 → 점점 늘어남)
- 유지 보수 비용 (CDP 시그니처 변경 시 우리도 갱신)
- 일관성 비용 (어떤 건 sugar, 어떤 건 raw가 가능 → 어디까지 sugar로 만들지 자의적)
대안: CDP를 raw passthrough로 노출하고, AIT 환경 특화 helper만 별도 유지. agent는 Chrome DevTools Protocol docs(표준)를 직접 학습 가능.
설계
A — `cdp_send(method, params)` raw passthrough + whitelist
미니앱 환경에서 유효한 CDP domain만 허용:
| domain |
유효 |
비고 |
| `Runtime.*` |
✅ |
evaluate, callFunctionOn, console |
| `DOM.`, `CSS.`, `DOMSnapshot.*` |
✅ |
|
| `Network.`, `Log.`, `Performance.*` |
✅ |
|
| `Page.*` |
△ |
captureScreenshot/navigate/reload만. bringToFront 등 desktop은 거부 |
| `Storage.`, `IndexedDB.`, `CacheStorage.*` |
✅ |
|
| `Profiler.`, `HeapProfiler.`, `Debugger.*` |
△ |
iOS WebKit-CDP bridge(Chii) 지원 여부 확인 후 |
| `Input.*` |
△ |
iOS WebKit dispatchTouchEvent 지원 확인 후 |
| `Memory.`, `Security.`, `Animation.*` |
△ |
빈도 낮음, 검토 후 |
| `Target.`, `Browser.`, `Tethering.*` |
❌ |
multi-target/window 데스크톱 전용 |
| `Emulation.*` |
❌ |
실기기에서 무의미 |
화이트리스트 외 method 호출 → 명시 에러 + "이 domain은 미니앱 환경에서 유효하지 않습니다" 안내.
B — AIT helper 정말 필요한 것만
| current |
결정 |
이유 |
| `build_attach_url` |
유지 |
relay 진입 — CDP에 없음 |
| `list_pages` |
유지 |
Chii relay listTargets — `Target.getTargets`와 의미 다름 |
| `measure_safe_area` |
유지 |
다단 probe 패키지 (cssEnv + sdk + dom + viewport + dpr + UA) |
| `list_console_messages` |
유지 (buffer) |
CDP stream → buffer query — 다른 형태 없음 |
| `list_network_requests` |
유지 (buffer) |
동상 |
| `AIT_getMockState` |
유지 (env 1 marker) |
mock 환경 메모리 — raw CDP로 못 가져옴 |
| `AIT_getSdkCallHistory` |
유지 (env 1 marker) |
동상 |
| `call_sdk` |
deprecate |
`cdp_send("Runtime.evaluate", {expression: "window.__sdk.X(...)"})` 동등 |
| `evaluate` |
deprecate |
`cdp_send("Runtime.evaluate", ...)` 동등 |
| `take_screenshot` |
deprecate |
`cdp_send("Page.captureScreenshot", ...)` 동등 |
| `take_snapshot` |
deprecate |
`cdp_send("DOMSnapshot.captureSnapshot", ...)` 동등 |
| `get_dom_document` |
deprecate |
`cdp_send("DOM.getDocument", ...)` 동등 |
| `AIT_getOperationalEnvironment` |
deprecate |
`cdp_send("Runtime.evaluate", {expression: "window.__sdk.getOperationalEnvironment()"})` 동등 |
최종 tool 8개: `cdp_send` + `build_attach_url` + `list_pages` + `measure_safe_area` + `list_console_messages` + `list_network_requests` + `AIT_getMockState` + `AIT_getSdkCallHistory`.
13 → 8 (38% 감소). 그리고 `cdp_send`는 CDP 전체를 노출하므로 실제 능력은 ↑.
마이그레이션
- 점진 deprecate: 한 번에 다 빼지 말고, 1.0.0까지는 deprecated tool도 작동하되 description에 "deprecated, use cdp_send instead" 명시.
- 1.0.0 시점에 모두 제거.
- agent-plugin / agent 사용 패턴 점검 — sdk-example skill, devtools panel skill 등이 어디까지 deprecated tool에 의존하는지 grep.
SECRET-HANDLING
- `cdp_send`의 params는 raw passthrough — caller가 attach URL/at= 코드를 expression에 넣으면 그대로 evaluate됨. tool description에 "params에 secret 노출 금지" 명시.
- whitelist 위반 시 method/domain은 에러 메시지에 노출 가능 (secret 아님).
acceptance
Out of scope
관련
배경
현재 MCP tool surface는 13개:
대부분은 CDP method를 1:1 wrapping한 syntactic sugar. 예시:
이 sugar들은:
대안: CDP를 raw passthrough로 노출하고, AIT 환경 특화 helper만 별도 유지. agent는 Chrome DevTools Protocol docs(표준)를 직접 학습 가능.
설계
A — `cdp_send(method, params)` raw passthrough + whitelist
미니앱 환경에서 유효한 CDP domain만 허용:
화이트리스트 외 method 호출 → 명시 에러 + "이 domain은 미니앱 환경에서 유효하지 않습니다" 안내.
B — AIT helper 정말 필요한 것만
최종 tool 8개: `cdp_send` + `build_attach_url` + `list_pages` + `measure_safe_area` + `list_console_messages` + `list_network_requests` + `AIT_getMockState` + `AIT_getSdkCallHistory`.
13 → 8 (38% 감소). 그리고 `cdp_send`는 CDP 전체를 노출하므로 실제 능력은 ↑.
마이그레이션
SECRET-HANDLING
acceptance
Out of scope
관련