本地MCP服务器

一个最小化的MCP服务器,为AI助手提供在用户选择的本地目录中执行shell命令和文件上传的能力。

  • by flrngel
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 flrngel/local-mcp-server

使用说明

本地mcp服务器

最低限度 主控程序 服务器,为AI助手提供shell访问和文件上传功能 真正的本地机器,以您选择的目录为根。

此服务器在您的真实机器上运行命令,而不是在沙箱中。 它使用您启动的进程的权限。集 MCP_CWD 您可以放心地授予助手访问权限,并期望该目录中的shell命令和文件写入会影响实际文件。


警告

使用前请阅读此内容。

此服务器是一个高度信任的本地工具。运行它时,您授予连接的AI助手以下能力:

  • 执行 任何shell命令 在您的机器上(作为您的用户)
  • 读取、创建、修改和删除 真实文件
  • 运行已安装的程序(git, npm, python, curl等等)
  • 查看流程可见的环境变量
  • 调用shell可以调用的任何内容

有 无容器、无虚拟机、无文件系统沙盒服务器依赖于强有力的描述性警告来指导助手,而不是硬隔离。

不要点 MCP_CWD 在包含机密、凭据或数据的目录中,您不愿意冒险。


工具

服务器只公开了两个工具:

realmachine.exec_shell

在工作目录设置为的情况下执行shell命令 MCP_CWD.

参数 类型 必填 说明
command string yes 要执行的Shell命令
timeout_ms integer no 最大运行时间(毫秒)(默认值:30000,最大值:600000)
env object no 环境变量重写
max_output_bytes integer no 最大stdout+stderr字节数(默认值:512KB,最大值:50MB)

退货: ok, exit_code, stdout, stderr, cwd, command, started_at, finished_at, duration_ms, truncated, timed_out, signal

realmachine.upload_file

将base64编码的内容写入工作区。

参数 类型 必填 说明
path string yes 相对于的目标路径 MCP_CWD
content_base64 string yes Base64编码文件内容
mime_type string no MIME类型提示
overwrite boolean 否 允许覆盖现有文件(默认值:false)
create_parents boolean no 创建缺失的父目录(默认值:false)

退货: ok, path, resolved_path, size_bytes, mime_type, sha256, created, overwritten


安装

使用npx直接从GitHub运行(无需安装):

MCP_CWD=/your/workspace npx github:flrngel/local-mcp-server

配置

服务器需要一个环境变量:

MCP_CWD=/absolute/path/to/workspace

服务器将 拒绝开始 如果 MCP_CWD 缺少、不是绝对路径、不存在或不是目录。

ChatGPT/Claude桌面

添加到MCP客户端配置中:

{
  "mcpServers": {
    "realmachine": {
      "command": "npx",
      "args": ["github:flrngel/local-mcp-server"],
      "env": {
        "MCP_CWD": "/Users/you/projects/my-workspace"
      }
    }
  }
}

来源

git clone git@github.com:flrngel/local-mcp-server.git
cd local-mcp-server
npm install
npm run build
MCP_CWD=/your/workspace npm start

安全模型

此服务器是 描述安全,隔离不安全.

它的作用

  • 将工作目录设置为 MCP_CWD 对于每个命令
  • 验证上传的文件路径是否保持在 MCP_CWD (词汇+符号链接感知)
  • 强制命令超时(默认30秒,最长10分钟)
  • 限制输出大小以防止内存耗尽
  • 阻断危险环境变量注入(LD_PRELOAD, DYLD_INSERT_LIBRARIES)
  • 使用原子写入(临时文件+重命名)进行文件覆盖
  • 将所有操作以结构化JSON形式记录到stderr
  • 告诉助手这是一台真正的机器,以避免破坏行为

它不做什么

  • 沙盒或以任何方式包含命令
  • 过滤或阻止特定的shell命令
  • 防止访问外部文件 MCP_CWD 通过shell命令
  • 从命令输出中删除机密
  • 执行命令前需要确认
  • 防御完全恶意的模型

要小心的破坏性命令

除非你明确要求,否则助理会被警告避免这些行为:

  • rm -rf, find ... -delete
  • git reset --hard, git push --force
  • chmod -R, chown -R
  • sudo 任何事物
  • 具有系统范围的包管理器
  • 编辑shell配置文件或系统配置

错误代码

代码 含义
INVALID_REQUEST 输入格式错误
INVALID_PATH 文件路径错误或缺少父目录
PATH_OUTSIDE_ROOT 路径逃逸 MCP_CWD (包括通过符号链接)
FILE_EXISTS 文件存在并且 overwrite 是假的
PERMISSION_DENIED 操作系统级权限失败
COMMAND_NOT_FOUND 未找到Shell命令
COMMAND_FAILED 命令以非零代码退出
TIMEOUT 超出命令 timeout_ms
OUTPUT_TRUNCATED 超出输出 max_output_bytes
SERVER_MISCONFIGURED MCP_CWD 无效或缺失
INTERNAL_ERROR 意外的服务器错误

发展

npm install
npm test          # 21 tests, ~1s
npm run build     # compile to dist/
npm run dev       # run with tsx (no build)

许可证

麻省理工学院