容器化MCP Server的必要性与操作指南

笔记哥 / 04-24 / 28点赞 / 0评论 / 751阅读
如果你在开发一个 local MCP Server,并且有以下的任何一种情况: - 需要安装多个 toolchain,才能运行 local MCP Server - 用于开发 local MCP Server 的语言,没有像 npx 或者 uv 那样一键运行程序的工具 那么,容器化 MCP Server,对你的用户是有用的。 反之,如果你已经用主流的 Node.js 或者 Python 来开发 local MCP Server,并且没有其他额外的依赖。 那么,你也许并不需要容器化。 ### WHAT local MCP Server 其实就是个 Node.js/Python/PHP/Go/Java/... 开发的 Console App 而已,通过 stdin/stdout 与 MCP Client 交互,没有什么特别的地方。 所以,一般来说,你只需要一个 Dockerfile 即可。 ### HOW 既然是容器化一个普通的 Console App,那么,一切就变得很简单了。 以下是 Code Runner MCP Server 的 Dockerfile : ```csharp 1 ## Stage 1: Builder 2 FROM node:lts-alpine AS builder 3 4 # Set working directory 5 WORKDIR /app 6 7 # Copy all files into the container 8 COPY . . 9 10 # Install dependencies without running scripts 11 RUN npm install --ignore-scripts 12 13 # Build the TypeScript source code 14 RUN npm run build 15 16 ## Stage 2: Runtime 17 FROM node:lts-alpine 18 19 WORKDIR /app 20 21 # Install Python and other programming languages 22 RUN apk add --no-cache \ 23 python3 \ 24 go \ 25 php \ 26 ruby 27 28 # Copy only the necessary files from the builder stage 29 COPY --from=builder /app/dist ./dist 30 COPY package*.json ./ 31 32 # Install only production dependencies 33 RUN npm install --production --ignore-scripts 34 35 # Use a non-root user for security (optional) 36 RUN adduser -D mcpuser 37 USER mcpuser 38 39 # Set the entrypoint command 40 CMD ["node", "./dist/index.js"] ``` 这,就是一个标准的 multi-stage builds 的 Dockerfile。 由于 Code Runner MCP Server 需要支持多种编程语言的运行,我在 Dockerfile 里面,预先安装了几个常用的编程语言的解释器/编译器。 这样,用户在使用的时候,唯一需要安装的,就是 Docker 而已: ```csharp 1 { 2 "mcp": { 3 "inputs": [], 4 "servers": { 5 "mcp-server-code-runner": { 6 "command": "docker", 7 "args": [ 8 "run", 9 "--rm", 10 "-i", 11 "formulahendry/mcp-server-code-runner" 12 ] 13 } 14 } 15 } 16 } ``` 完整的代码,可以参考 Code Runner MCP Server 的 repo,完全开源: https://github.com/formulahendry/mcp-server-code-runner