한줄 요약
MCPO는 MCP 서버를 OpenAPI 호환 HTTP 서버로 변환해주는 중간자(프록시)
MCPO

개념
- MCP 서버를 LLM 에이전트나 애플리케이션과 쉽게 호환할 수 있는 표준 OpenAPI 기반 HTTP 서버로 변환해주는 프록시 서버
- MCP-to-OpenAPI
https://github.com/open-webui/mcpo
왜 사용할까?
- MCP 서버는 보통
raw stdio를 통해 통신하도록 설계되어 있음 -> 호환성 부족 - 반면 다양한 Open WebUI 등 다양한 LLM UI들은 HTTP/OpenAPI 방식을 연동의 표준으로 삼고 있음
- 따라서 순정 MCP 서버와 LLM UI 사이에 소통을 원활하게 해주는 무언가가 필요
- 이러한 역할을 해주는 게 바로 MCPO
- MCPO는 부가적으로, 보안적인 부분이나 MCP 서버에 대한 문서화 기능 등을 지원함
최근 Open WebUI 에서 MCP 서버의 Streamable HTTP 통신 규격도 지원하나, 불안정하다는 경고 문구가 함께 붙어있다.
핵심 기능
- 자동 OpenAPI 생성 : MCP 서버의 기능을 OpenAPI 규격에 맞춰 제공함
- 웹 표준 : 보안, 안정성 및 확장성을 위한 신뢰할 수 있는 웹 표준 사용
- 문서화 : 모든 도구들에 대한 문서(OpenAPI Doc)를 생성한다.
- 순수한 HTTP사용 : 소켓이나 별도 연결 코드를 사용하지 않아 예상치 못한 문제를 최소화
- 다양한 연결 방식 : stdio, SSE, Streamable HTTP 방식의 MCP 서버 처리 가능
- MCPO를 사용하면 위 기능들을 별도의 추가적인 노력 없이 사용할 수 있음
SSE 와 Streamable HTTP
공통점 : 하나의 HTTP 연결 위에서 스트리밍(데이터를 쪼개서 지속적으로 전송)함
SSE : 서버 -> 클라이언트 의 단방향 통신 (구현 단순), 프로토콜 규격
Streamable HTTP : 주고받는 요청 속에서 응답을 쪼개서 담는 패턴이나 방식. 프로토콜/규격이 아님. 커스터마이징을 통해 양방향처럼 보이는 통신도 가능
설치 및 실행 방법
기본 실행 방법
1
2
3
4
5
6
7
8
9
10
11
# uvx
uvx mcpo --port 8080 --api-key "secret-api-key" -- your_mcp_server_command
# uv
uv add mcpo
uv run mcpo --port 8080 --api-key "secret-api-key" -- your_mcp_server_command
# pip, conda ...
pip install mcpo
conda install mcpo
-> mcpo --port 8080 --api-key "secret-api-key" -- your_mcp_server_command
옵션 : SSE MCP 서버와 연결하기
- 서버 유형 설정 :
--server-type sse - 엔드포인트 지정 :
http://127.0.0.1:8001/sse
1
2
mcpo --port 8000 --api-key "top-secret"\
--server-type "sse" -- http://127.0.0.1:8001/sse
- 헤더 제공
1
2
3
4
mcpo --port 8000 --api-key "top-secret"\
--server-type "sse"\
--header '{"Authorization": "Bearer token", "X-Custom-Header": "value"}'\
-- http://127.0.0.1:8001/sse
옵션 : Streamable HTTP
- 서버 유형 설정 :
--server-type streamable-http - 엔드포인트 지정 :
http://127.0.0.1:8001/mcp
1
2
mcpo --port 8000 --api-key "top-secret"\
--server-type "streamable-http" -- http://127.0.0.1:8002/mcp

Comments