mcpcodeserver MCP Server

공식

MCP 도구를 직접 호출하는 대신, mcpcodeserver는 MCP 도구 호출을 TypeScript 프로그램으로 변환하여 LLM이 더 스마트하고 지연 시간이 낮은 오케스트레이션을 가능하게 합니다.

문서

mcpcodeserver

NPM Version MIT licensed Install MCP Server Install in VS Code (npx)

도구 호출을 TypeScript 코드 생성으로 변환하는 모델 컨텍스트 프로토콜(MCP) 프록시 서버입니다. LLM이 여러 도구를 오가며 호출하는 대신, 여러 도구를 자연스럽게 호출하는 TypeScript 코드를 작성할 수 있어 토큰 오버헤드를 줄이고 LLM의 뛰어난 코드 생성 능력을 활용할 수 있습니다.

❌ mcpcodeserver 미사용 시

LLM이 여러 번의 순차적 도구 호출을 수행하며, 토큰을 소모하고 복잡한 워크플로우에 어려움을 겪습니다:

  • ❌ LLM과 도구 간 여러 번의 왕복
  • ❌ 복잡한 도구 호출 시퀀스에서 오류 발생 가능성 높음
  • ❌ 도구 간 데이터 전달이 쉽지 않음
  • ❌ 제한된 오류 처리 및 제어 흐름

✅ mcpcodeserver 사용 시

LLM이 여러 도구를 자연스럽게 호출하는 TypeScript 코드를 작성합니다:

  • ✅ 여러 도구를 순차적으로 호출하는 코드 작성
  • ✅ 변수, 반복문, 조건문을 자연스럽게 사용
  • ✅ try/catch를 통한 향상된 오류 처리
  • ✅ 작업 결합을 통한 토큰 사용량 감소
  • ✅ LLM의 강력한 코드 생성 능력 활용

빠른 시작

  1. MCP 클라이언트에 mcpcodeserver 설치 (아래 설치 섹션 참조)
  2. 하위 MCP 서버를 정의하는 mcp.json 구성 파일 생성
  3. 사용 시작 - 이제 LLM이 도구를 호출하는 TypeScript 코드를 생성하고 실행할 수 있습니다
// Instead of multiple tool calls, write code like this:
const files = await filesystem.list_directory({ path: "/tmp" });
const results = await Promise.all(
  files.map(file => filesystem.read_file({ path: file.path }))
);
return results.filter(content => content.includes("important"));

개요

mcpcodeserver는 다음과 같은 특징을 가진 고유한 MCP 서버입니다:

  • 하나 이상의 하위 MCP 서버에 연결하기 위한 MCP 클라이언트 역할 수행
  • 하위 서버의 모든 도구 검색
  • 상위 LLM 클라이언트에 세 가지 강력한 도구 노출:
    1. list_servers - 이 MCP 서버에 연결된 모든 하위 서버 목록 표시
    2. get_tool_definitions - 검색된 도구에 대한 TypeScript 타입 정의 반환 (서버별 필터링 선택 가능)
    3. generate_and_execute_code - 샌드박스에서 해당 도구를 호출하는 TypeScript 코드 생성 및 실행

이 아키텍처를 통해 LLM은 순차적 도구 호출 대신 코드를 작성하여 복잡한 다중 도구 워크플로우를 조율할 수 있으며, 이는 최신 언어 모델에 더 효율적이고 자연스러운 방식입니다.

관련 연구 및 참고 자료

이 접근 방식은 LLM이 직접 도구를 호출하는 것보다 실행 가능한 코드를 생성할 때 더 나은 성능을 보인다는 최근 연구에서 영감을 받았습니다:

  • CodeAct: Your LLM Agent Acts Better when Generating Code (Apple, ICML 2024) - LLM 에이전트가 사전 정의된 도구 호출 형식 대신 실행 가능한 Python 코드를 통합 행동 공간으로 사용할 때 최대 20% 더 높은 성공률을 달성함을 입증합니다.

  • Cloudflare Code Mode - MCP 도구를 TypeScript API로 변환하는 유사한 구현으로, "LLM이 MCP를 직접 호출하는 것보다 MCP를 호출하는 코드를 작성하는 데 더 뛰어나다"는 점을 보여줍니다.

이 연구의 핵심 통찰은 LLM이 실제 코드에 대한 광범위한 학습을 받았지만 합성 도구 호출 형식에는 제한적으로 노출되어, 복잡한 에이전트 워크플로우에 코드 생성이 더 자연스럽고 효과적인 접근 방식이라는 점입니다.

사용 이유

기존 도구 호출의 문제점

  • LLM과 도구 간 여러 번의 왕복으로 토큰 소모
  • LLM이 복잡한 도구 호출 시퀀스에 종종 어려움을 겪음
  • 각 도구 호출마다 JSON 스키마 이해 및 형식 지정 필요
  • LLM을 거치지 않고는 도구 간 데이터 전달이 쉽지 않음

코드 생성 솔루션

  • 여러 도구를 순차적으로 호출하는 TypeScript 코드 작성
  • 변수, 반복문, 조건문을 자연스럽게 사용
  • try/catch를 통한 향상된 오류 처리
  • 작업 결합을 통한 토큰 사용량 감소
  • LLM의 강력한 코드 생성 능력 활용

동적 도구 검색

mcpcodeserver는 하위 MCP 서버의 도구 변경 사항을 자동으로 모니터링하고 도구가 추가, 제거 또는 수정될 때 상위 클라이언트에 알립니다:

  • 자동 새로고침: 30초마다 도구 변경 사항 확인
  • 실시간 알림: 상위 클라이언트에 notifications/tools/list_changed 전송
  • 동적 업데이트: 도구 정의 및 요약이 자동으로 업데이트됨
  • 수동 새로고침 불필요: 상위 LLM이 도구 지식을 새로고침하라는 알림을 받음

이를 통해 상위 LLM이 수동 개입 없이 항상 최신 도구 정의를 유지할 수 있습니다.

서버 필터링

컨텍스트 창 사용량을 줄이고 집중도를 높이기 위해 mcpcodeserver는 특정 서버별 도구 정의 필터링을 지원합니다:

  • 사용 가능한 서버 목록: list_servers을 사용하여 연결된 모든 하위 서버 확인
  • 필터링된 도구 정의: get_tool_definitionsserver_names 매개변수를 사용하여 특정 서버의 도구만 가져오기
  • 축소된 상세 정보: LLM의 컨텍스트 창을 압도하지 않는 집중된 TypeScript 정의 획득
  • 메서드 네임스페이스: 생성된 모든 함수는 서버 이름이 접두사로 붙습니다 (예: pizzashop_create_pizza, filesystem_read_file)

사용 예시:

// List available servers
const servers = await list_servers({});
// Returns: ["pizzashop", "filesystem", "memory"]

// Get all tool definitions
const allTools = await get_tool_definitions({});

// Get only pizzashop tools
const pizzashopTools = await get_tool_definitions({
  server_names: ["pizzashop"]
});

고급 MCP 기능

mcpcodeserver는 상위 및 하위 서버 모두 지원하는 경우 고급 MCP 프로토콜 기능의 통과를 지원합니다:

  • 요청(Elicitation): 하위 서버가 도구 실행 중 사용자 입력을 요청할 수 있으며, 이는 상위 클라이언트로 전달됩니다.
  • 루트(Roots): 모든 하위 서버의 루트를 나열하고 집계하여 사용 가능한 리소스에 대한 통합 뷰 제공
  • 샘플링(Sampling): 고급 AI 기능을 위해 LLM 샘플링 요청이 하위 서버로 전달될 수 있도록 지원

이러한 기능은 상위 클라이언트에 자동으로 알려지며, 기본 하위 MCP 서버에서 지원될 때 원활하게 작동합니다.

빠른 시작

npx로 즉시 사용해 보세요 (설치 불필요):

# From GitHub
npx github:zbowling/mcpcodeserver --help

# Or when published to npm
npx mcpcodeserver --help

🛠️ 설치

요구 사항

  • Node.js >= v18.0.0
  • Cursor, Claude Code, VSCode, Windsurf 또는 기타 MCP 클라이언트

Smithery를 통한 설치

Smithery를 통해 모든 클라이언트에 mcpcodeserver를 자동으로 설치하려면:

npx -y @smithery/cli@latest install mcpcodeserver --client <client-name> --key <smithery-key>

Cursor에 설치

이동: Settings -> Cursor Settings -> MCP -> Add new global MCP server

다음 구성을 Cursor ~/.cursor/mcp.json 파일에 붙여넣는 것이 권장되는 방법입니다. 프로젝트 폴더에 .cursor/mcp.json을 생성하여 특정 프로젝트에 설치할 수도 있습니다.

Cursor 원클릭 설치

Install MCP Server

Cursor 로컬 서버 연결

{
  "mcpServers": {
    "mcpcodeserver": {
      "command": "npx",
      "args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
    }
  }
}

Cursor 원격 서버 연결 (HTTP 전송 설정 시)

{
  "mcpServers": {
    "mcpcodeserver": {
      "url": "http://localhost:3000/mcp"
    }
  }
}

Claude Code에 설치

이 명령을 실행하세요. 자세한 내용은 Claude Code MCP 문서를 참조하세요.

Claude Code 로컬 서버 연결

claude mcp add mcpcodeserver -- npx -y mcpcodeserver --config /path/to/your/mcp.json

Claude Code 원격 서버 연결

claude mcp add --transport http mcpcodeserver http://localhost:3000/mcp

VSCode에 설치

VSCode 원클릭 설치

Install in VS Code (npx)

VSCode 수동 구성

VSCode MCP 설정에 추가:

{
  "mcpServers": {
    "mcpcodeserver": {
      "command": "npx",
      "args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
    }
  }
}

Windsurf에 설치

Windsurf 원클릭 설치

Install in Windsurf

AI 코딩 어시스턴트에 설치

Continue, Cline, RooCode의 경우 구성에 추가:

{
  "mcpServers": {
    "mcpcodeserver": {
      "command": "npx",
      "args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
    }
  }
}

Amp에 설치

터미널에서 이 명령을 실행하세요. 자세한 내용은 Amp MCP 문서를 참조하세요.

amp mcp add mcpcodeserver -- npx -y mcpcodeserver --config /path/to/your/mcp.json

텍스트 편집기에 설치

Aider, Codium, Zed, Nova, Sublime Text의 경우 구성에 추가:

{
  "mcpServers": {
    "mcpcodeserver": {
      "command": "npx",
      "args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
    }
  }
}

Neovim에 설치

Neovim MCP 구성에 추가:

{
  mcpServers = {
    mcpcodeserver = {
      command = "npx",
      args = {"-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"}
    }
  }
}

Emacs에 설치

Emacs MCP 구성에 추가:

(setq mcp-servers
      '((mcpcodeserver
         :command "npx"
         :args ("-y" "mcpcodeserver" "--config" "/path/to/your/mcp.json"))))

JetBrains IDE에 설치

IntelliJ IDEA, WebStorm, PyCharm, Android Studio의 경우 MCP 설정에 추가:

{
  "mcpServers": {
    "mcpcodeserver": {
      "command": "npx",
      "args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
    }
  }
}

AI 도구에 설치

Codeium, Tabnine, GitHub Copilot, Amazon CodeWhisperer의 경우 MCP 설정에 추가:

{
  "mcpServers": {
    "mcpcodeserver": {
      "command": "npx",
      "args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
    }
  }
}

클라우드 IDE에 설치

Replit, CodeSandbox, StackBlitz, GitPod, GitHub Codespaces, GitLab Web IDE, Bitbucket Cloud의 경우 MCP 설정에 추가:

{
  "mcpServers": {
    "mcpcodeserver": {
      "command": "npx",
      "args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
    }
  }
}

기타 도구에 설치

Xcode, Fleet, Sourcegraph, JetBrains Gateway의 경우 MCP 구성에 추가:

{
  "mcpServers": {
    "mcpcodeserver": {
      "command": "npx",
      "args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
    }
  }
}

원격 개발 환경에 설치

원격 개발 환경의 경우 HTTP 전송을 사용할 수도 있습니다:

{
  "mcpServers": {
    "mcpcodeserver": {
      "url": "http://your-server:3000/mcp"
    }
  }
}

구성 파일

하위 MCP 서버를 정의하기 위한 mcp.json 구성 파일을 생성합니다:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
      "env": { "DEBUG": "false" }
    },
    "memory": {
      "command": "npx", 
      "args": ["-y", "@modelcontextprotocol/server-memory"]
    },
    "brave-search": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-brave-search"],
      "env": { "BRAVE_API_KEY": "your-api-key" }
    }
  }
}

개발용 설치

# Install dependencies (using Bun for faster performance)
bun install

# Or with npm
npm install

# Build the project
bun run build

# Test the built server
bun dist/index.js --help

참고: 이 프로젝트는 더 나은 성능을 위해 Bun을 사용하지만, npm/node도 잘 작동합니다.

🚨 문제 해결

모듈을 찾을 수 없음 오류

ERR_MODULE_NOT_FOUND 오류가 발생하면 npx 대신 bunx을 사용해 보세요:

{
  "mcpServers": {
    "mcpcodeserver": {
      "command": "bunx",
      "args": ["-y", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
    }
  }
}

ESM 해결 문제

Error: Cannot find module와 같은 오류의 경우 --experimental-vm-modules 플래그를 사용해 보세요:

{
  "mcpServers": {
    "mcpcodeserver": {
      "command": "npx",
      "args": ["-y", "--node-options=--experimental-vm-modules", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
    }
  }
}

TLS/인증서 문제

--experimental-fetch 플래그를 사용하여 TLS 관련 문제를 우회하세요:

{
  "mcpServers": {
    "mcpcodeserver": {
      "command": "npx",
      "args": ["-y", "--node-options=--experimental-fetch", "mcpcodeserver", "--config", "/path/to/your/mcp.json"]
    }
  }
}

일반적인 MCP 클라이언트 오류

  1. 패키지 이름에 @latest 추가 시도
  2. npx 대신 bunx 사용
  3. 또 다른 대안으로 deno 사용 고려
  4. 네이티브 fetch 지원을 위해 Node.js v18 이상을 사용하고 있는지 확인

구성 문제

  • mcp.json 파일이 유효한 JSON인지 확인
  • 모든 하위 서버 명령이 PATH에서 사용 가능한지 확인
  • 하위 서버가 독립적으로 시작될 수 있는지 확인
  • 구성 파일 경로의 파일 권한 확인

MCP Inspector로 테스트

npx -y @modelcontextprotocol/inspector npx mcpcodeserver --config /path/to/your/mcp.json

💻 개발

CLI 인수

mcpcodeserver은 다음 CLI 플래그를 허용합니다:

  • --config <path> – MCP 구성 파일 경로 (기본값: ./mcp.json)
  • --transport <stdio|http> – 사용할 전송 방식 (기본값: stdio). HTTP 전송은 자동으로 HTTP 및 SSE 엔드포인트를 모두 제공합니다.
  • --port <number>http 전송 사용 시 수신 포트 (기본값 3000)
  • --help – 도움말 메시지 표시

HTTP 전송 및 포트 8080 사용 예시:

npx mcpcodeserver --config /path/to/mcp.json --transport http --port 8080

stdio 전송 사용 예시:

npx mcpcodeserver --config /path/to/mcp.json --transport stdio

환경 변수

구성에 환경 변수를 사용할 수 있습니다:

  • MCP_CONFIG_PATH – MCP 구성 파일 경로 (--config의 대안)
  • MCP_TRANSPORT – 전송 유형 (--transport의 대안)
  • MCP_PORT – HTTP 전송용 포트 번호 (--port의 대안)

환경 변수 사용 예시:

# .env
MCP_CONFIG_PATH=/path/to/your/mcp.json
MCP_TRANSPORT=stdio

환경 변수를 사용한 MCP 구성 예시:

{
  "mcpServers": {
    "mcpcodeserver": {
      "command": "npx",
      "args": ["-y", "mcpcodeserver"],
      "env": {
        "MCP_CONFIG_PATH": "/path/to/your/mcp.json"
      }
    }
  }
}

참고: CLI 플래그와 환경 변수가 모두 제공된 경우 CLI 플래그가 우선합니다.

로컬 개발 구성

로컬 개발의 경우 TypeScript 소스를 직접 실행할 수 있습니다:

{
  "mcpServers": {
    "mcpcodeserver": {
      "command": "npx",
      "args": ["tsx", "/path/to/mcpcodeserver/src/index.ts", "--config", "/path/to/your/mcp.json"]
    }
  }
}

실행 모드

Stdio 모드 (기본값)

서버는 기본적으로 stdio 모드로 실행되며, 이는 Claude Desktop과 같은 MCP 클라이언트와의 통합에 적합합니다:

# Run in stdio mode
npx mcpcodeserver --config mcp.json

# Or with custom config path
npx mcpcodeserver --config /path/to/your/mcp.json

HTTP 모드

디버깅, 테스트 또는 웹 기반 MCP 클라이언트와의 통합을 위해 HTTP 모드로 서버를 실행할 수 있습니다:

# Run in HTTP mode on default port 3000
npx mcpcodeserver --http --config mcp.json

# Run on custom port and host
npx mcpcodeserver --http --port 8080 --host 0.0.0.0 --config mcp.json

HTTP 모드로 실행 시 서버는 다음에서 사용할 수 있습니다:

  • 서버 URL: http://localhost:3000/mcp (또는 사용자 지정 호스트:포트)
  • MCP Inspector: npx @modelcontextprotocol/inspector http://localhost:3000/mcp을 사용하여 디버그 및 테스트

MCP Inspector 통합

MCP Inspector는 MCP 서버를 디버깅하고 테스트하기 위한 강력한 도구입니다. HTTP 모드로 실행 시 다음을 수행할 수 있습니다:

  • 사용 가능한 도구 및 해당 스키마 검사
  • 대화형으로 도구 호출 테스트
  • 리소스 액세스 및 프롬프트 디버그
  • 실시간 알림 모니터링
# Start the server in HTTP mode
npx mcpcodeserver --http --config mcp.json

# In another terminal, start the MCP Inspector
npx @modelcontextprotocol/inspector http://localhost:3000/mcp

# Or use the shorthand script (includes all example servers)
npm run inspector

Inspector가 브라우저에서 열리고 MCP 서버를 탐색하고 테스트할 수 있는 전체 인터페이스를 제공합니다.

참고: npm run inspector 명령은 공식 예제의 TypeScript(npx) 및 Python(uvx) 기반 서버를 포함하여 8개의 MCP 서버(총 67개 도구)가 포함된 mcp-test.json을 사용합니다.

구성

연결할 하위 MCP 서버를 정의하는 mcp.json 파일을 생성합니다. 이는 표준 MCP 클라이언트 구성 형식을 따릅니다:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
      "env": {
        "DEBUG": "false"
      }
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "your-token-here"
      }
    },
    "weather": {
      "url": "http://localhost:3000/mcp",
      "transport": "sse"
    }
  }
}

구성 옵션

각 서버 항목은 다음을 지원합니다:

stdio 전송의 경우:

  • command (필수) - 실행할 명령어 (예: "node", "python", "npx")
  • args (선택 사항) - 명령어에 전달할 인수 배열
  • env (선택 사항) - 하위 프로세스의 환경 변수

HTTP/SSE 전송의 경우:

  • url (필수) - HTTP 엔드포인트 URL
  • transport - 서버 전송 이벤트를 위해 "sse"로 설정

사용법

서버 시작하기

# Use default config (./mcp.json)
mcpcodeserver

# Use custom config location
mcpcodeserver --config /path/to/custom-mcp.json

# Show help
mcpcodeserver --help

MCP 서버로 사용하기

MCP 클라이언트(Claude Desktop, Claude Code, Cline 등)에서 mcpcodeserver를 구성합니다:

npx 사용 (권장 - 설치 불필요):

{
  "mcpServers": {
    "codeserver": {
      "command": "npx",
      "args": ["-y", "mcpcodeserver", "--config", "/path/to/mcp.json"]
    }
  }
}

GitHub에서 (즉시 작동):

{
  "mcpServers": {
    "codeserver": {
      "command": "npx",
      "args": ["-y", "github:zbowling/mcpcodeserver", "--config", "/path/to/mcp.json"]
    }
  }
}

다른 패키지 관리자 사용:

// yarn
{ "command": "yarn", "args": ["dlx", "mcpcodeserver", "--config", "/path/to/mcp.json"] }

// pnpm
{ "command": "pnpm", "args": ["dlx", "mcpcodeserver", "--config", "/path/to/mcp.json"] }

// bun
{ "command": "bunx", "args": ["mcpcodeserver", "--config", "/path/to/mcp.json"] }

더 많은 구성 예제와 MCP 클라이언트별 설정은 examples/를 참조하세요.

도구 1: get_tool_definitions

이 도구는 하위 서버에서 발견된 모든 도구에 대한 TypeScript 타입 정의를 반환합니다.

입력:

  • include_examples (선택적 불리언) - 사용 예제 포함 여부

예제:

// Call the tool (in your MCP client)
get_tool_definitions({ include_examples: true })

출력: 인터페이스와 함수 선언이 포함된 TypeScript 코드를 반환합니다:

/**
 * Auto-generated TypeScript definitions for MCP tools
 */

interface ToolResult {
  content: Array<{
    type: string;
    text?: string;
    // ...
  }>;
  isError?: boolean;
}

/**
 * Read contents of a file
 * Server: filesystem
 * Tool: read_file
 */
interface ReadFileParams {
  path: string;
}

declare function filesystem_read_file(params: ReadFileParams): Promise<ToolResult>;

// ... more tool definitions

도구 2: generate_and_execute_code

이 도구는 발견된 모든 도구 함수에 접근할 수 있는 샌드박스에서 TypeScript 코드를 실행합니다.

입력:

  • code (필수 문자열) - 실행할 TypeScript/JavaScript 코드
  • timeout (선택적 숫자) - 최대 실행 시간(밀리초) (기본값: 30000, 최대: 300000)

예제:

// Call the tool with TypeScript code
generate_and_execute_code({
  code: `
    // Read multiple files and combine them
    const file1 = await filesystem_read_file({ path: "/tmp/file1.txt" });
    const file2 = await filesystem_read_file({ path: "/tmp/file2.txt" });

    const text1 = file1.content[0].text;
    const text2 = file2.content[0].text;

    console.log("File 1 length:", text1.length);
    console.log("File 2 length:", text2.length);

    return {
      combined: text1 + text2,
      totalLength: text1.length + text2.length
    };
  `
})

출력:

=== Console Output ===
File 1 length: 42
File 2 length: 38

=== Result ===
{
  "combined": "...",
  "totalLength": 80
}

샌드박스 환경

TypeScript 실행 샌드박스는 다음을 제공합니다:

사용 가능:

  • 발견된 모든 도구 함수 (비동기 함수로)
  • 콘솔 메서드: console.log(), console.error(), console.warn(), console.info()
  • 기본 JavaScript 전역: Math, JSON, Date, Array, Object, String, Number, Boolean
  • Promise 및 async/await 지원
  • try/catch를 통한 오류 처리
  • 타이머: setTimeout, setInterval, clearTimeout, clearInterval

사용 불가:

  • Node.js 모듈 (fs, http, child_process 등)
  • 파일 시스템 접근 (MCP 도구를 통한 경우 제외)
  • 네트워크 접근 (MCP 도구를 통한 경우 제외)
  • 프로세스 정보

보안 참고: 이는 완전히 안전한 샌드박스가 아닙니다. VM 컨텍스트는 격리를 제공하지만 완벽하지는 않습니다. 신뢰할 수 있는 코드만 실행하세요.

오류 처리

샌드박스의 오류는 포착되어 스택 추적과 함께 반환됩니다:

generate_and_execute_code({
  code: `
    try {
      const result = await filesystem_read_file({ path: "/nonexistent" });
      return result;
    } catch (error) {
      console.error("Failed to read file:", error.message);
      throw error; // Re-throw to surface to parent
    }
  `
})

Claude Code로 테스트하기

Claude Code에서 mcpcodeserver를 사용해 보시겠습니까? 단일 명령 설정을 사용하세요:

./setup-claude-code-test.sh

이 명령은 프로젝트를 빌드하고, 테스트 종속성을 설치하며, Claude Code 구성에 추가할 내용을 정확히 보여줍니다. 자세한 지침은 TESTING_WITH_CLAUDE.md를 참조하세요.

개발

# Install dependencies
bun install

# Build the project
bun run build

# Watch mode for development
bun run dev

# Run the server
bun start

# Run tests
bun test                # All tests
bun run test:unit       # Unit tests only
bun run test:integration # Integration tests (requires Python)

# Code quality
bun run lint            # Check linting
bun run format          # Format code
bun run typecheck       # Type checking

프로젝트 구조

자세한 프로젝트 구조 및 구성 요소 문서는 AGENTS.md를 참조하세요.

사용 사례

다중 파일 작업

LLM을 통해 여러 도구 호출을 하는 대신 코드를 작성합니다:

const files = ["/tmp/a.txt", "/tmp/b.txt", "/tmp/c.txt"];
const contents = await Promise.all(
  files.map(path => filesystem_read_file({ path }))
);
return contents.map(r => r.content[0].text);

데이터 변환

LLM 개입 없이 도구 호출 간에 데이터를 처리합니다:

const data = await api_fetch({ url: "https://api.example.com/data" });
const json = JSON.parse(data.content[0].text);
const filtered = json.items.filter(item => item.active);
return filtered.length;

조건부 로직

도구 결과에 따라 결정을 내립니다:

const exists = await filesystem_read_file({ path: "/tmp/config.json" });
if (exists.isError) {
  console.log("Config doesn't exist, using defaults");
  return { source: "defaults" };
} else {
  return { source: "file", config: JSON.parse(exists.content[0].text) };
}

오류 복구

전체 워크플로를 중단하지 않고 오류를 정상적으로 처리합니다:

const results = [];
for (const path of ["/tmp/a.txt", "/tmp/b.txt", "/tmp/c.txt"]) {
  try {
    const content = await filesystem_read_file({ path });
    results.push({ path, success: true, data: content });
  } catch (error) {
    results.push({ path, success: false, error: error.message });
  }
}
return results;

업스트림 MCP 서버 통합

mcpcodeserver는 Model Context Protocol 서버 저장소의 공식 업스트림 MCP 서버와 통합할 수 있습니다. 이를 통해 사용자 정의 도구와 함께 실제 프로덕션 준비가 완료된 MCP 서버를 사용할 수 있습니다.

지원되는 업스트림 서버

  • filesystem: 파일 시스템 작업 (읽기, 쓰기, 디렉터리 나열)
  • memory: 인메모리 키-값 저장소
  • sqlite: SQLite 데이터베이스 작업
  • github: GitHub API 통합
  • brave-search: 웹 검색 기능
  • fetch: HTTP 요청 기능

구성 예제

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
    },
    "memory": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-memory"]
    },
    "sqlite": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-sqlite", "--db-path", "/tmp/test.db"]
    }
  }
}

업스트림 통합 테스트

이 프로젝트에는 업스트림 서버 통합을 위한 포괄적인 테스트가 포함되어 있습니다:

# Run upstream servers integration tests
bun tests/integration/run-upstream-tests.ts

# Or manually test with upstream config
npx mcpcodeserver --config tests/integration/upstream-test-config.json

교차 서버 워크플로

업스트림 서버를 사용하면 강력한 교차 서버 워크플로를 만들 수 있습니다:

// Store database query results in memory and write to file
const queryResult = await sqlite_execute_sql({
  sql: "SELECT COUNT(*) as count FROM users"
});
const count = queryResult.content[0].text;

await memory_create({
  key: "user-count",
  value: count
});

await filesystem_write_file({
  path: "/tmp/user-count.txt",
  content: `Total users: ${count}`
});

제한 사항

  • 실행 시간 초과: 최대 5분 (구성 가능, 기본값 30초)
  • 메모리: Node.js VM 컨텍스트에 의해 제한됨
  • 실행 간 지속 상태 없음
  • 외부 모듈 require/import 불가
  • 보안 샌드박스가 아니므로 신뢰할 수 없는 코드를 실행하지 마세요

기여

기여를 환영합니다! 이 프로젝트는 다음으로 빌드되었습니다:

  • TypeScript 5.7+
  • Node.js 18+
  • MCP TypeScript SDK 1.20+
  • 유효성 검사를 위한 Zod

자세한 기여 지침은 CONTRIBUTING.md를 참조하세요.

지원

이 프로젝트가 도움이 되셨다면 커피 한 잔 사주시는 건 어떨까요!

Buy Me A Coffee

라이선스

MIT

리소스