[개발 일지 기록 MCP] - 내 개발 일지 도구가 나 대신 나를 안 물어보고 있었다
오늘 개발 일지를 하나 발행하려다가, 발행 도구부터 고치게 됐다.
도구가 그냥 fetch failed만 뱉었다
일지를 쓰고 발행 버튼(정확히는 도구 호출)을 눌렀는데 계속 fetch failed만 떴다. 원인 표시가 너무 뭉뚱그려져 있어서, 뭐가 문제인지부터 파헤쳐야 했다.
먼저 내 설정 파일에 저장해둔 Notion 토큰 값을 확인해봤다. 그런데 값이 이상했다 — 진짜 토큰 대신 제어 문자 몇 개만 들어가 있었다. 아마 예전에 토큰을 붙여넣다가 뭔가 꼬였던 것 같다. 정상적인 토큰으로 다시 채워 넣었다.
그런데도 여전히 안 됐다. 이번엔 그 토큰으로 Notion API를 직접 두드려봤다.
curl -s -X POST "https://api.notion.com/v1/databases/{내 블로그 DB ID}/query" \
-H "Authorization: Bearer $TOKEN" \
-H "Notion-Version: 2022-06-28" \
-H "Content-Type: application/json" \
-d '{"page_size":1}'응답이 401(인증 실패)이 아니라 403이었다.
{"status":403,"code":"restricted_resource","message":"Insufficient permissions for this endpoint."}토큰 자체는 유효한데, 그 토큰이 속한 연동 앱이 내 블로그 데이터베이스에 접근 권한을 못 받은 상태였다. Notion은 API 토큰을 만드는 것과, 그 토큰이 특정 페이지/DB를 볼 수 있게 "연결(공유)"해주는 게 별개 단계라, 둘 중 하나를 빼먹으면 딱 이런 애매한 실패가 난다. 데이터베이스 쪽에서 이 연동을 연결에 추가해주고 나니 그제야 정상 발행됐다.
근데 물어보지도 않고 바로 공개(published)로 올라갔다
발행은 됐는데, 상태가 기본으로 published였다. 나는 일지를 쓰면 일단 초안(draft)으로 남겨두고 내가 다시 읽어본 다음에 공개하고 싶은데, 도구가 그걸 안 물어보고 바로 공개해버린 거다. 코드를 열어보니 진짜 그렇게 짜여 있었다.
Status: {
status: { name: input.status ?? "published" }
}status를 안 넘기면 무조건 published로 채워지는 구조. 이걸 반대로 바꿨다.
Status: {
// 기본값은 draft — 검토 전에 실수로 published로 나가는 걸 막는다.
status: { name: input.status ?? "draft" }
}그리고 굵은 글씨가 별표 그대로 나오는 것도 발견했다
발행된 글을 다시 읽어보다가 **이렇게 쓴 부분**이 진짜 굵게 처리 안 되고 별표 두 개가 그대로 텍스트에 남아있는 걸 발견했다. 변환기 코드를 보니 원인이 명확했다 — 줄 하나를 통째로 서식 없는 텍스트 한 덩어리로만 Notion에 넘기고 있었다.
function createRichText(content: string) {
return [{ type: "text" as const, text: { content } }];
}굵게(**), 기울임(*), 인라인 코드(` `), 링크([]()`) 같은 걸 실제로 인식해서 Notion 서식으로 바꿔주는 부분을 새로 짰다. 다만 코드블록 안 내용까지 이 파서를 거치면 안 된다 — 코드 안에 있는 별표나 백틱은 그냥 문자일 뿐이니까, 코드블록은 서식 파싱 없이 그대로 넣는 별도 경로로 분리했다.
테스트 고치고, 빌드하고, 커밋 푸시까지 끝냈다. 다음번 이 도구를 다시 붙일 때부터 이 기준들이 그대로 적용된다.
작은 도구 하나 고치는 데 생각보다 오래 걸렸지만, "왜 안 되는지"를 하나씩 직접 찔러보면서 좁혀간 게 재밌었다. 애매한 에러 메시지 뒤에, 그리고 눈에 잘 안 띄는 표시 버그 뒤에 항상 구체적인 이유가 있다는 걸 다시 확인한 하루.