본문으로 건너뛰기

© 2026 Molayo

HN요약2026. 05. 23. 06:15

Show HN: Cloudflare의 code mode 패턴을 사용한 MCP 서버 구축

요약

LLM이 복잡한 도구 호출 대신 코드를 작성하여 MCP 서버에 접근하는 'Code Mode' 워크플로우를 구현한 프로젝트입니다. 단일 execute_code 도구를 통해 LLM의 코드 작성 능력을 극대화하고 복잡한 도구 오케스트레이션을 효율적으로 처리합니다.

핵심 포인트

  • LLM의 강점인 코드 작성 능력을 활용한 MCP 접근 방식
  • 복잡한 도구 호출 대신 단일 execute_code 도구 제공
  • HTTP 프록시를 통한 MCP 서버 요청 투명한 전달
  • Bun과 Deno를 활용한 로컬 코드 실행 샌드박스 구현

참고: 저는 다음 프로젝트를 위해 이 저장소에 대한 작업을 중단했습니다:

그것은 code mode에 대해 훨씬 더 심도 있게 고민된 접근 방식입니다.

Code Mode MCP Server

MCP 서버를 위한 "Code Mode" 워크플로우의 로컬 구현체입니다. 여러 번의 도구 호출 (tool calls)로 고군분투하는 대신, LLM은 간단한 HTTP 프록시 (proxy)를 호출하여 사용자의 MCP 서버에 접근하는 TypeScript/JavaScript 코드를 작성합니다.

참고: 이 프로젝트는 MCP -> TypeScript API 트랜스파일레이션 (transpilation) 레이어를 처리하려고 시도하지 않습니다. 구현된다면 멋지겠지만, 저는 이 워크플로우를 정말 테스트해보고 싶었습니다.

이것은 무엇인가요?

이것은 LLM이 도구 호출 (tool calling)보다 코드 작성에 훨씬 더 능숙하다는 핵심 통찰을 구현합니다. LLM에게 많은 도구를 직접 노출하는 대신 (LLM이 어려워하는 부분), 이 서버는 LLM에게 단 하나의 도구인 execute_code만 제공합니다. LLM은 다른 MCP 서버에 접근하기 위해 HTTP 요청을 보내는 코드를 작성합니다.

작동 방식

  1. LLM이 하나의 도구를 가집니다: execute_code - TypeScript/JavaScript를 실행합니다.
  2. LLM이 코드를 작성합니다: fetch()를 사용하여 http://localhost:3001/mcp/* 엔드포인트를 호출합니다.
  3. HTTP 프록시가 전달합니다: 실제 MCP 서버로 요청을 투명하게 프록시 (proxy) 합니다.
  4. 결과가 다시 흐릅니다: 코드 실행을 통해 LLM으로 결과가 전달됩니다.

이를 통해 복잡한 도구 오케스트레이션 (tool orchestration)의 모든 이점을 누리면서도, LLM이 실제로 잘하는 것인 코드 작성을 활용할 수 있습니다.

설치

필수 요구 사항

  • Bun (최신 버전)
  • Deno (코드 실행 샌드박스용)
  • MCP 호환 클라이언트 (Claude Desktop, Cursor, Copilot이 포함된 VS Code 등)

설정

  1. 저장소 복제 (Clone)
git clone https://github.com/jx-codes/codemode-mcp.git
cd codemode-mcp
  1. 의존성 설치
bun install
  1. 서버 구성 (선택 사항)

설정을 사용자 정의하려면 codemode-config.json 파일을 생성하세요:

{
   "proxyPort": 3001,
   "configDirectories": [
...
  1. MCP 서버 설정

위에서 지정한 디렉토리 중 하나에 MCP 서버 설정이 포함된 .mcp.json 파일을 생성하세요:

{
   "mcpServers": {
      "fs": {
...

예시 워크플로우 (Example Workflows)

단일 MCP 서버 호출 (Single MCP Server Call)

직접적인 도구 호출 (Tool calling) 대신, LLM은 다음과 같이 작성합니다:

// 사용 가능한 서버 목록 조회
const servers = await fetch("http://localhost:3001/mcp/servers").then((r) =>
  r.json()
...

다중 작업 체이닝 (Chaining Multiple Operations)

작업을 체이닝할 때 진정한 위력이 드러납니다:

// 파일 목록 가져오기
const files = await fetch("http://localhost:3001/mcp/call", {
  method: "POST",
...

도구 (Tools)

execute_code

MCP 프록시(Proxy)에 대한 네트워크 액세스 권한을 가진 TypeScript/JavaScript 코드를 실행합니다.

매개변수 (Parameters):

  • code (string): 실행할 코드
  • typescript (boolean): TypeScript 모드 (기본값: true)

프록시 엔드포인트 (Proxy Endpoints):

  • GET /mcp/servers - 사용 가능한 MCP 서버 목록 조회
  • GET /mcp/{server}/tools - 특정 서버의 도구 목록 조회
  • POST /mcp/call - 도구 호출 (body: {server, tool, args})

check_deno_version

Deno 설치 상태를 확인합니다.

list_servers_with_tools

사용 가능한 모든 MCP 서버와 해당 도구들에 대한 포괄적인 개요를 가져옵니다. 완전한 도구 스키마(Schema)와 서버 상태 정보를 포함하며, LLM이 소비하기에 최적화된 구조화된 JSON 데이터를 반환합니다.

JSON 출력 구조 (JSON Output Structure):

{
  "summary": {
    "totalServers": 2,
...

이는 프로그래밍 방식의 접근을 위해 매개변수 스키마, 타입 및 요구 사항을 포함한 완전한 도구 발견(Tool discovery) 정보를 제공합니다.

설정 (Configuration)

codemode-config.json을 생성하세요:

{
  "proxyPort": 3001,
  "configDirectories": ["~/.config/mcp/servers", "./mcp-servers", "./"]
...

해당 디렉토리의 .mcp.json 파일에 MCP 서버를 추가하세요:

{
  "mcpServers": {
    "fs": {
...

왜 (더 잘 작동할 수도 있는가) (Why (Might) Work Better)

전통적인 MCP (Traditional MCP): LLM → 도구 호출 (Tool Call) → MCP 서버 → 결과 → LLM → 도구 호출 → ...

  • LLM은 도구 구문 (tool syntax) 처리에 어려움을 겪음
  • 각 호출이 신경망 (neural network)을 거쳐야 함
  • 작업 체이닝 (chaining operations)이 어려움
  • 합성된 도구 예시 (synthetic tool examples)로 학습된 한계가 있음

Code Mode: LLM → 코드 작성 (Write Code) → 코드가 프록시 (proxy) 호출 → 프록시가 MCP로 전달 → 결과

  • LLM은 코드 작성에 탁월함 (학습 데이터에 수백만 개의 실제 사례 포함)
  • 코드는 자연스럽게 작업을 체이닝할 수 있음
  • 결과가 신경망이 아닌 코드 로직을 통해 흐름
  • 자연스러운 구성 (composition) 및 데이터 처리 가능

보안 (Security)

  • 코드는 네트워크 액세스만 허용된 Deno 샌드박스 (sandbox)에서 실행됨
  • 파일 시스템 (filesystem), 환경 (environment) 또는 시스템 액세스 불가
  • 30초 실행 제한 시간 (execution timeout)
  • 제어된 프록시를 통해 MCP 서버에 액세스
  • 임시 파일 자동 정리 (auto-cleanup)

문제 해결 (Troubleshooting)

"Deno not installed": Deno를 설치하고 재시작하세요
"Permission denied": 코드가 제한된 리소스에 액세스하려고 시도 중입니다
"Module not found": 임포트 (import) 시 https:// URL을 사용하세요
"Execution timeout": 코드를 최적화하거나 더 작은 작업으로 나누세요

TODO (잠재적 과제)

  • MCP 프록시를 위한 더 간단한 API 레이어 제공 (예: mcp.tool('name', args);와 같은 방식)
    • 사용자 코드를 실행하기 전에 Deno 스코프 (scope)에 자체 TypeScript 파일을 주입하여 쉽게 구현 가능
  • 더 많은 설정 옵션
  • 도구 필터링 기능
  • 내 워크플로 (workflows)에서 더 많이 테스트하고 결과 확인하기

Deno 코드 리믹스 출처: https://github.com/Timtech4u/deno-mcp-server

AI 자동 생성 콘텐츠

본 콘텐츠는 HN Claude Code Search의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0