MCP란 무엇인가
Model Context Protocol. 외부 프로세스 서비스로서 LLM에 도구를 노출하는 표준입니다. GEODE는 MCP 서버를 소비하기도 하고, 자기 자신을 MCP 서버로 노출하기도 합니다 (core/mcp_server.py).
매니저
core/mcp/manager.py가 MCPManager를 보유합니다. 서버 프로세스를 소유하고 도구 호출을 라우팅하며 가드를 강제합니다. 공개 API.
class MCPManager:
async def start_server(self, name: str) -> None: ...
async def stop_server(self, name: str) -> None: ...
async def call_tool(self, server: str, tool: str, args: dict) -> Any: ...
async def list_tools(self, server: str) -> list[ToolSpec]: ...25K 토큰 가드
MCP 도구는 임의로 큰 페이로드를 반환할 수 있습니다 (웹 fetch, 디렉토리 트리, DB 쿼리). 상한이 없으면 도구 호출 한 번이 컨텍스트 윈도를 날려버릴 수 있습니다. GEODE는 모든 MCP 도구 결과에 대해 25,000 토큰의 하드 상한을 강제합니다. 상한 초과 → 서버 측 절단 + 절단 지점을 알려주는 sentinel 마커. 모델이 무엇을 잃었는지 알 수 있도록 합니다.
구현. core/mcp/의 결과 경로 위에 있는 가드 미들웨어. 해당하는 경우 HTML→Markdown 변환이 상한 적용보다 먼저 일어나 절단이 콘텐츠가 아니라 포매팅 노이즈를 제거하게 합니다.
관리되는 서버
대표 목록 (환경별 가용성에 따라 달라질 수 있음).
- filesystem, git, github
- web (fetch + search)
- apple_calendar, composite_calendar (멀티 계정 병합)
- signal (composite messaging)
- slack, discord
- linkedin-reader (브라우저 제어)
- claude-in-chrome (브라우저 브릿지)
- playwright
- context7 (라이브러리 문서)
- google-drive
- + 몇 개의 특화 어댑터
예외 계층
core/mcp/base.py:12에 agentic 루프까지 전파되는 실패 타입이 정의되어 있습니다.
MCPTimeoutError. 서버가 시간 안에 응답하지 않음MCPConnectionError. 서버가 크래시했거나 시작되지 않음MCPProtocolError. 응답이 잘못된 형식MCPGuardError. 가드가 호출을 거부함 (크기 상한, 인증 등)
GEODE-as-MCP
core/mcp_server.py는 GEODE 자체 도구 (그리고 제한된 형태로 agentic 루프 자체) 를 MCP 서버로 노출합니다. Claude Code, Codex CLI 같은 다른 에이전트가 GEODE를 자신이 호출하는 다른 에이전트와 같은 방식으로 호출할 수 있게 해줍니다.