글

라벨이 파이썬인 게시물 표시

MCP 서버 만들기, 파이썬으로 테스트 실패만 읽어 주는 도구 붙이기

이미지
3줄 요약 튜토리얼의 FastMCP 코드는 mcp 2.3.0에서 import부터 막힙니다. MCPServer로 바꾸고 stdio로 부르면 도구 하나가 바로 돌아갑니다. 서버 쪽 print 한 줄이 연결을 끊으니 로그는 stderr로 보냅니다. pip install mcp 를 하고 FastMCP 를 쓰는 튜토리얼 코드를 돌려 봤더니 import 줄에서 바로 멈췄습니다. 한국어 튜토리얼 중에는 위키독스 「나만의 MCP 서버 만들기」 처럼 이 이름을 쓰는 글이 있습니다. 에러 문구에 원인이 그대로 적혀 있었는데요, 2.x부터 FastMCP 가 MCPServer 로 이름이 바뀌었다는 내용입니다. 새 이름으로 서버를 만들고 도구를 하나 붙여 호출까지 해 봤습니다. 도구는 JUnit 결과 파일에서 실패한 테스트만 골라 줍니다. 실행은 Linux 컨테이너(Python 3.13.16)에서 했고, 예제 결과 파일은 테스트 5개짜리로 제가 직접 만들었습니다. Claude Code에 붙이는 마지막 부분은 직접 돌리지 않고 공식 문서의 명령을 옮겼습니다. pip install mcp 다음에 만나는 에러 설치된 버전부터 봅니다 PyPI의 mcp 최신 버전은 2.3.0이고, 한국 시간 10월 3일 오전 7시에 올라왔습니다. 가상환경을 새로 만들어 설치하면 이 버전을 받게 됩니다. # 가상환경을 만들고 mcp 를 설치합니다 python3 -m venv v && . v/bin/activate pip install mcp pip list | grep -E '^mcp ' # mcp 2.3.0 옛 튜토리얼의 import는 에러가 납니다 1.x 시절 코드는 from mcp.server.fastmcp import FastMCP 로 시작합니다. 2.3.0에서 이 줄을 실행하면 아래 에러가 나옵니다. ModuleNotFoundError: No module named 'mcp.server.fastmcp'. This is m...

subprocess timeout not working 원인과 해결법

이미지
3줄 요약 먼저 확인할 것은 timeout 값이 아니라 capture_output 입니다. 같은 명령이 캡처를 켜면 20.01초, 끄면 0.00초였습니다. 그다음은 손자 프로세스입니다. timeout=2 로 10회 돌리면 예외는 매번 2.01초에 뜨지만 고아 프로세스가 10개 쌓입니다. 여기서 멈춰도 됩니다. stdout 을 파일로 받거나 start_new_session=True 와 os.killpg 를 붙이면 둘 다 0개·0.00초로 떨어집니다.

YAML 파싱 차이, 따옴표 없는 값이 파서마다 달라지는 문제

이미지
3줄 요약 따옴표 없이 적은 YAML 값은 파서를 바꾸면 다르게 읽힐까요. 같은 값 42개를 파서 5종에 넣어 대조했습니다. 다섯 곳이 모두 같은 값은 20개(47.6%)뿐이었습니다. PyYAML 6.0.3과 js-yaml 5.4.2만 놓고 보면 42개 중 20개가 다릅니다. 다만 version: 1.10 은 다섯 곳 전부 1.1로 읽습니다. 원인이 구현이 아니라 표기인 값은 파서를 바꿔도 그대로입니다.

uv 설치 후 버전이 안 바뀔 때, pip install uv 경로 문제

이미지
3줄 요약 pip install uv 가 Successfully installed uv-0.12.13 을 찍은 직후 uv --version 이 34일 전 버전인 0.12.3을 그대로 출력했습니다. pip는 ~/.local/bin 에 새 바이너리를 넣었고 셸은 /usr/local/bin 을 먼저 봅니다. 두 위치 사이에 릴리스 10개가 쌓여 있었는데 pip 경고는 0줄이었습니다. 설치 직후 which -a uv 와 python3 -c "import uv; print(uv.find_uv_bin())" 두 줄을 찍어 경로가 같은지 확인하십시오.