Codex MCP enabled_tools를 넣었더니 도구가 0개가 될 때 확인할 것

MCP 서버는 연결되는데 enabled_tools를 추가한 뒤 허용한 도구까지 사라졌다면, 서버를 재설치하기 전에 같은 서버에서 allow-list 유무만 바꿔 대조한다. Codex CLI 0.155.1의 로컬 테스트에서는 enabled_tools가 없을 때 echo 호출이 성공했지만 enabled_tools=["echo"]를 넣자 그 도구가 모델에 노출되지 않았다.

MCP 서버의 도구가 필터를 거치지 않을 때는 전달되고 enabled_tools 필터를 거치면 빈 결과가 되는 대조 개념도

먼저 무엇을 구분해야 하나?

증상이 같아 보여도 원인은 세 가지다.

관찰 먼저 볼 원인
allow-list가 없어도 도구가 안 보임 서버 시작, command·args, 인증, transport
allow-list를 넣을 때만 0개가 됨 enabled_tools 필터 동작
일부 도구만 빠짐 도구 이름 오타·대소문자·서버의 실제 tools/list

설정 파일을 바로 덮어쓰지 말고 비민감 테스트 서버나 일회성 -c override로 확인한다. 업무용 MCP의 메일·파일·고객 데이터 도구를 실험에 사용하지 않는다.

이번 직접 재현에서는 무엇이 나왔나?

같은 로컬 fixture 서버와 같은 Codex CLI 0.155.1을 사용했다. 첫 실행은 필터를 넣지 않았다.

codex exec --ephemeral --ignore-user-config --skip-git-repo-check \
  -c 'mcp_servers.fixture.command="npx"' \
  -c 'mcp_servers.fixture.args=["-y","@modelcontextprotocol/server-everything"]' \
  'fixture의 echo 도구를 CONTROL_20260922로 한 번 호출해 주세요.'

결과는 Echo: CONTROL_20260922였고 실제 MCP tool call이 완료됐다. 다음 실행에서는 나머지 조건을 유지하고 한 줄만 더했다.

-c 'mcp_servers.fixture.enabled_tools=["echo"]'

이번에는 fixture 도구가 모델에 보이지 않아 UNAVAILABLE로 끝났다. 즉 이 재현에서는 서버 설치와 echo 이름 자체가 아니라 enabled_tools를 적용한 경로에서 차이가 생겼다.

OpenAI 공식 설정 참조는 enabled_tools를 MCP 서버가 노출하도록 허용한 도구 이름 목록으로 설명한다. disabled_tools는 이 허용 목록 뒤에 적용되는 차단 목록이다. 현재 openai/codex main 소스의 mcp_types.rs도 같은 의미를 적고 있다. 따라서 설정의 의도는 “목록을 넣으면 모두 숨긴다”가 아니라 “목록에 적은 도구만 등록한다”이다.

2026년 9월 22일 기준 공개 이슈 #47102는 open 상태이고 maintainer 답변, 담당자, 수정 버전 표시는 없다. 이슈 작성자의 보고와 이번 독립 재현은 증상을 뒷받침하지만, 수정 일정까지 확인됐다는 뜻은 아니다.

내 서버에서는 어떤 순서로 확인하나?

  1. 현재 설정과 Codex 버전을 기록하되 토큰과 비밀번호는 복사하지 않는다.
  2. 비민감 테스트 서버에서 allow-list 없이 실제 도구 하나가 호출되는지 확인한다.
  3. 같은 도구의 정확한 이름 하나만 enabled_tools에 넣는다.
  4. 새 임시 실행에서 같은 입력을 반복한다.
  5. 대조군은 성공하고 실험군만 0개라면 버전, 서버 종류, transport, 두 설정 차이와 결과를 함께 보존한다.

codex mcp list에 서버가 보인다는 사실만으로 도구가 모델에 등록됐다고 단정하지 않는다. 완료 기준은 실제 허용 도구가 한 번 호출되는 것이다.

MCP 자체의 연결·호출 확인이 처음이라면 클로드 MCP 서버를 실제로 연결하고 호출을 검증하는 순서도 참고할 수 있다. 제품은 다르지만 “설정 목록에 보임”과 “실제 도구 호출 성공”을 구분하는 원칙은 같다.

검색 결과의 일반 설정 글과 무엇이 다른가?

2026년 9월 22일 Google에서 정확 표현 "Codex MCP enabled_tools"는 결과 없음으로 표시됐다. 따옴표를 뺀 결과는 MCP 연결법, 설정 위치, 공식 문서가 중심이었다. 상위 일반 결과는 enabled_tools를 필요한 도구만 허용하는 설정으로 설명했지만, 허용한 도구까지 0개가 되는 현재 증상의 A/B 재현과 안전한 우회 조건은 확인하기 어려웠다.

같은 날 Naver의 Codex MCP enabled_tools 결과도 MCP 소개·설정 참조·일반 연결 글이 중심이었다. 정확 장애를 직접 해결하는 상위 일반 결과는 확인하지 못했다. 이는 검색량 0을 뜻하지 않으며, 이 글은 공개 질문 1건과 로컬 독립 재현을 근거로 한 탐색 답이다.

enabled_tools를 지우면 해결인가?

진단 대조군으로는 쓸 수 있지만 업무 환경의 영구 해법이라고 바로 권하기 어렵다. 필터를 지우면 해당 MCP 서버가 제공하는 모든 도구가 모델에 노출될 수 있다. 읽기 도구만 기대했는데 쓰기·삭제 도구까지 함께 제공되는 서버라면 권한 범위가 커진다.

현재 우회가 꼭 필요하면 다음 중 하나를 택한다.

  • 허용할 도구만 제공하는 별도 최소 MCP 서버를 비민감 환경에서 구성한다.
  • 전체 도구 노출이 정책상 허용되는지 검토한 뒤에만 필터 제거를 사용한다.
  • 수정 버전이나 maintainer 확인 전까지 기존 안전한 버전·구성을 유지한다.

enabled_tools를 빼고 전체 도구를 노출하는 선택은 마지막 수단이다. 먼저 서버가 읽기·쓰기·삭제 중 무엇을 제공하는지 확인하고, 업무 계정이 아닌 비민감 환경에서 실제 호출 범위를 점검한다.

다시 정상화됐는지는 어떻게 확인하나?

새 버전이나 수정 안내가 나와도 codex mcp list만 보고 끝내지 않는다. 같은 fixture와 같은 도구 이름으로 대조군과 실험군을 다시 실행한다.

  1. allow-list 없이 echo 호출이 성공하는지 확인한다.
  2. enabled_tools=["echo"]를 넣은 새 실행에서 같은 호출을 반복한다.
  3. 두 번째 실행에서 echo만 노출되고 호출까지 성공하면 복구 근거로 남긴다.
  4. 버전, transport, 서버 패키지 버전, 비밀값을 뺀 설정 차이와 JSONL 결과를 함께 보존한다.

대조군도 실패하면 이 글의 필터 증상과 다르다. command·args, 인증, 서버 시작 로그와 transport부터 확인한다.

자주 묻는 질문

도구 이름 앞에 mcp__서버명__까지 넣어야 하나?

공식 설정은 서버가 제공하는 도구 이름의 allow list라고 설명한다. 이번 fixture에서는 서버의 실제 이름인 echo를 사용했다. 모델에 표시되는 접두사가 붙은 이름을 추측해 넣지 말고 서버의 tools/list나 문서에서 실제 이름을 확인한다.

disabled_tools도 함께 있으면 어느 쪽이 우선하나?

공식 문서와 현재 소스는 disabled_tools가 enabled_tools 뒤에 적용된다고 설명한다. 같은 도구가 두 목록에 모두 있으면 최종적으로 차단되는 쪽으로 이해해야 한다.

서버 재설치부터 해도 되나?

allow-list가 없을 때 같은 서버와 같은 도구가 이미 호출된다면 재설치보다 필터 한 줄의 A/B 대조가 먼저다. 대조군도 실패할 때만 설치, 실행 명령, 인증 문제로 범위를 넓힌다.

이 글에서 확인하지 못한 것

이번 결과는 macOS, Codex CLI 0.155.1, stdio fixture 한 가지에 한정된다. 모든 MCP 서버·원격 transport·Codex Desktop에서 같다고 단정하지 않는다. 공개 이슈 #47102도 같은 증상을 보고하지만 maintainer 답변과 수정 배포 시점은 확인되지 않았다. 정확 검색량과 seoin.dev 독자의 반복 질문도 미확인이다.

검증 기준

  • 마지막 업데이트일: 2026-09-22
  • 확인 환경: macOS, Codex CLI 0.155.1, stdio server-everything 비민감 fixture, Google·Naver Orca 검색
  • 주요 근거: OpenAI Configuration Reference, OpenAI MCP 안내, Codex 공개 이슈 #47102
  • 직접 확인: allow-list 없는 대조군 echo 성공, enabled_tools=["echo"] 실험군 도구 미노출
  • 원본 이벤트: control-clean.jsonl, enabled-echo.jsonl
  • 제외한 실행: 사용자 MCP 구성까지 함께 읽은 첫 control은 조건이 달라 대조에서 제외
  • 공식 의미: OpenAI config reference와 MCP 안내, 현재 main 소스의 allow-list/deny-list 설명 일치
  • 현재 이슈 상태: open, 댓글 0, assignee 없음(2026-09-22 확인)
  • 검색 대조: Google 정확 일치 결과 없음, Google/Naver 일반 결과는 연결·설정 설명 중심
  • 완료한 형식 검수: strict hard error 0, SEO 90, AEO 90
  • 독립 최종검수: gpt-5.6-sol low PASS

직접 만든 실습 자료와 새 도구 소식

AI 도구로 만든 실습 자료, 달라진 기능과 강의 소식을 준비하고 있습니다. 발송을 시작하면 안내해 드려요. 먼저 확인 메일에서 본인 이메일을 확인해 주세요.

신청하기 전에 첫 소식 미리보기에서 내용과 자료를 확인해 보세요.

질문이나 의견을 남겨주세요

이름을 입력하지 않아도 돼요. ‘깜짝 놀란 올빼미’ 같은 별명이 자동으로 붙어요.