뒤로
LexQ의 MCP를 다시 붙였는데 도구가 전부 실패했습니다
LexQ는 전체 API를 MCP로 열어 뒀습니다.
에이전트가 규칙을 만들고, 변경 영향을 시뮬레이션하고, 배포까지 하는 구조입니다.
오늘 그 MCP를 다시 연결했는데 도구 호출이 하나도 되지 않았습니다. 돌아온 것은 이 한 줄입니다.
{"error":"Unexpected end of JSON input"}
JSON 파싱 오류처럼 보였습니다. 실제로는 아니었습니다.
원인은 오류를 뭉개는 코드였습니다
MCP 서버가 업스트림 응답을 이렇게 처리하고 있었습니다.
if (contentType.includes('application/json')) {
const json = await response.json();
...
}
렌더링 분기를 위해서 상태 코드를 보지 않고 content-type만 봤습니다. 그런데 업스트림은 인증 실패에도 application/json을 선언하면서 body를 비웁니다.
HTTP/2 401
content-type: application/json;charset=UTF-8
content-length: 0
빈 body에 response.json()을 부르면 던집니다. catch가 그 메시지를 그대로 감쌌습니다. 인증 실패가 JSON 문법 오류로 위장된 겁니다.
그래서 결국 상태 코드를 먼저 보도록 고치고, 오류 형태를 CLI와 맞췄습니다.
영상
Agent가 결정 라이프사이클을 처음부터 끝까지 운전하는 데모입니다.
LexQ MCP demo (https://youtu.be/JwtGmBnDJus)
영상은 잘 돌아가는 모습이고, 위 기록은 그게 안 될 때 어디를 봐야 하는지에 대한 것입니다.
오류를 뭉개는 코드, 어디서 만나셨나요.
LexQ
엔지니어링 팀의 의사결정 플랫폼 — 배포 없이 규칙을 바꾸고, 시뮬레이션으로 증명합니다
1
댓글
로그인 후 댓글을 남길 수 있습니다.
JSON 파싱 오류처럼 보였지만 실제 원인이 업스트림 오류를 덮는 처리였다는 점이 운영에서 자주 놓치는 부분 같습니다. 상태 코드와 원문 응답 일부를 함께 남기되 민감정보를 제거하는 규칙까지 두면 다음 장애의 진단 시간이 더 줄 것 같습니다.
맞습니다. 상태 코드와 원문 응답을 같이 봐야되더라구요. 민감 정보를 제거하는 규칙까지 더 하는 부분은 배울 점이네요. 감사합니다.