mcpField
S
SecureInput

SecureInput

本地服务
github.com安全0今天更新

关于 SecureInput

SecureInput 是面向编码 Agent 的本地开源 MCP 服务,用独立输入界面收集 API 密钥、密码或令牌,避免默认将秘密返回到聊天结果。凭据可交给本地命令或写入受限权限的 .env 文件。

主要功能

  1. 01内联表单或配对浏览器输入
  2. 02通过标准输入或环境变量交付
  3. 03安全写入 .env 文件
  4. 04请求状态查询与取消
  5. 05默认不在 MCP 结果中返回秘密
  6. 06仅监听本机回环地址

适用场景

  1. 01在不粘贴到聊天的情况下提供 API 密钥
  2. 02将凭据传给本地命令执行
  3. 03为项目更新 .env 配置
  4. 04让无头 Agent 请求一次性凭据

MCP 相关

它通过 stdio MCP 桥接器提供 request_secret 及状态查询、取消工具;支持内联表单的客户端可直接显示输入界面,其他客户端使用配对的本机浏览器。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
npmsecureinput0.1.1
mcpbsecureinput-release-0.1.1.mcpb

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

SecureInput — 为 AI 编码 Agent 安全输入私密 API 密钥

CI

让 AI 编码 Agent 获得所需的访问权限,而无需在聊天中粘贴 API 密钥。 SecureInput 是一个开源、本地优先的 Model Context Protocol(MCP)服务,用于管理 API 密钥、密码和令牌。主机支持时,它会在内嵌 MCP App 中收集输入;否则会在配对的 localhost 浏览器中收集。它可以通过 stdin 或环境变量将值传递给本地命令,也可以将值写入 .env 文件。

默认的 MCP 响应包含状态和退出信息,不包含机密。MCP 桥接专为 Claude Code、Cursor、Codex、VS Code / GitHub Copilot、Windsurf 和 Cline 等 stdio 客户端设计;是否能内嵌显示取决于主机对 MCP Apps 的支持。macOS 和 Linux 需要 Node.js 22 或更高版本。

安装 · 连接 Agent · 安全与信任 · 常见问题

观看 20 秒图解概览 · 使用虚假密钥运行真实组件

agent: "I need a GitHub token to create the repo."
        │
        ▼
  request_secret (MCP)
        │
        ▼
  inline form in a compatible host, or paired localhost browser
        │
        ▼
  SecureInput daemon on 127.0.0.1
        ├── execute: gh auth login --with-token   (token through stdin)
        └── write_env: .env.local                 (plaintext file, mode 0600)
        │
        ▼
agent: { "ok": true, "status": "completed", "exitCode": 0 }

为什么要开发它

编码 Agent 经常需要凭据。常见的做法都不理想:

做法问题
在聊天中粘贴密钥密钥会进入模型上下文、聊天记录、日志,还可能进入遥测数据。
让 Agent 打印终端命令你必须手动运行;密钥可能留在 shell 历史记录或 ps 中。
在终端提示符中输入虽然可行,但重复繁琐、容易输错,而且远程或无头 Agent 无法使用。
手动提交 .env容易设置错误的权限、重复密钥,或误提交文件。

SecureInput 为凭据提供独立的输入路径。默认情况下,它不会在 MCP 工具结果中返回该值。内嵌主机、你运行的命令,以及能够访问已写入 .env 文件的应用,仍属于信任边界。请参阅安全模型。

功能

  • 原生支持 MCP — 一个工具 request_secret,以及轮询、取消和状态工具。
  • 仅限本地 — 绑定到 127.0.0.1;使用配对令牌、签名会话 Cookie,并进行 Origin 和 CSRF 检查。
  • 默认不在聊天中传递机密 — Agent 会收到请求状态和退出详情。stdout/stderr 不会包含在 MCP 结果中。
  • 直接执行命令 — 不使用 shell;通过 stdin 或环境变量提供机密,绝不将其作为命令行参数传递。
  • 安全写入 .env — 原子替换、0600 权限、保留注释和换行符;仅允许 .env 和 .env.*。
  • 两种输入模式 — 紧凑的内嵌表单按 Enter 键提交;配对浏览器会显示请求详情,并为高风险操作提供额外确认。
  • 一次性请求 — 待处理请求会过期,结果仅短暂保留,且每次提交只能领取一次。
  • 纵深防御 — 使用兼容 RE2 的验证模式、值和输出大小上限、ANSI 清理、输出脱敏,以及不记录值的审计元数据。
  • 精简的 shadcn/ui 前端 — UI 刻意保持简单:配对、请求列表、表单和结果。
  • 可选返回模式 — 供确实需要获取该值的客户端使用;默认禁用,并明确标记为危险。

要求

  • Node.js 22 或更高版本
  • macOS 或 Linux(代码支持 Windows,但 CI 尚未覆盖)
  • 兼容 MCP Apps 的主机;或者在同一台机器上使用浏览器作为备用方案

安装

Claude Desktop:下载捆绑包
  1. 从 GitHub Releases 下载 secureinput-release-0.1.0.mcpb。此捆绑包未经签名;安装前请检查源代码和发布内容。
  2. 在 Claude Desktop 中,打开 Settings → Desktop app → Manage(位于 Extensions 旁边;旧版本中为 Settings → Extensions),然后依次选择 Advanced settings → Install Extension…,并选择下载的文件。是否可用可能取决于组织设置。请参阅 Claude 的安装指南。
  3. 在 Claude 的连接器或扩展设置中确认 SecureInput 已连接,然后使用虚假密钥进行测试。内联输入取决于主机支持情况;否则,请使用配对的本地浏览器。

此捆绑包需要兼容 Node.js 22 的运行时,并支持 macOS 和 Linux。这是直接下载的捆绑包,并非 Claude 官方目录中的条目。要更新,请下载并安装更新版本的捆绑包;推送到 GitHub 不会自动更新已安装的副本。

从源代码安装

npm 包尚未发布。请从此仓库安装,或从 GitHub Releases 下载 MCP 捆绑包,以供兼容 MCPB 的客户端使用。此捆绑包需要 Node.js 22 或更高版本,目前未经签名。

git clone https://github.com/r69shabh/secureinput.git
cd secureinput
npm ci
npm run build
npm link          # puts `secureinput` on your PATH

将 SecureInput 添加到你的 MCP 客户端。客户端首次连接时会自动启动本地守护进程。要自行启动并配对浏览器备用方案:

secureinput serve

内联请求不会打开浏览器。客户端需要使用浏览器备用方案时,如果启用了打开浏览器的功能,系统会自动打开其配对页面。你也可以手动打开并配对:

secureinput pair

你也可以检查一切是否正常运行:

secureinput status
secureinput doctor

守护进程监听 http://127.0.0.1:4780。配置文件位于 ~/.secureinput/,权限模式为 0600。

npm link 仅供本地使用。也可以使用 npm install -g .,或指定 dist/cli/index.js 的绝对路径。

浏览器或内联输入

本地内联组件重新构建后,已连接的 SecureInput 服务会自动通知资源已更新。支持 MCP 工具列表变更通知的客户端,无需重新连接即可在后续请求中使用新表单;已打开的表单仍会保留原版本。如果客户端不刷新工具元数据,可能需要重新连接。要安装此刷新功能本身,需要重启现有 MCP 进程一次。

在 GitHub 上推送更改不会在用户的电脑上安装更新:请先更新本地检出版本并重新构建。刷新机制只会更新组件;运行中的服务或守护进程如有更改,仍可能需要重启。SecureInput 不会在后台下载或执行更新。

在兼容的 MCP Apps 客户端上,内联输入为默认方式。如果客户端无法渲染,SecureInput 会自动打开配对的本地主机浏览器输入界面。支持内联请求时不会打开浏览器,按 Enter 键即可授权所请求的交付,无需额外的 SecureInput 确认对话框。宿主仍可能应用自身的 MCP 工具权限。

现有的浏览器专用显式偏好设置会保留。要将现有安装切换为优先使用内联输入:

secureinput settings --input-mode inline
secureinput stop

重新连接 MCP 客户端以应用更改后的设置。仅在希望强制使用浏览器输入时,才使用 secureinput settings --input-mode browser。

内联输入需要宿主声明 MCP Apps HTML 功能。仅支持文本的客户端会自动使用浏览器。两种模式都会将数据交付给同一套本地 execute 或 write_env 实现。内联表单只显示字段标签,以及带内嵌提交箭头的圆角轮廓输入框。在内联模式下,按 Enter 键即可授权所请求的交付,包括 Agent 明确要求的覆盖操作;浏览器流程则保留独立的审核控件。内联表单使用 AES-256-GCM 加密值和单次请求能力;每次都会生成新的 RSA-OAEP-SHA-256 密钥对来封装加密密钥。只有守护进程持有私钥。能力和公钥通过仅供组件使用的工具结果元数据提供;宿主必须确保这些元数据不会进入模型上下文。不支持内联模式下将数据返回给 Agent,此类操作会改用浏览器。

内联组件无需直接访问网络:它会通过宿主的 MCP 桥接器提交密文。这并不能防范会篡改组件代码或密钥的恶意宿主。本地浏览器与聊天宿主之间的隔离性更强。无论哪种模式,都不会对已获准命令的文件系统或网络访问进行沙盒隔离;仅仅使用终端命令也不能据此声称数据“永不用于训练”。

要对实际组件以及终端到环境变量的流程进行本地合成测试:

npm run build
npm run demo:host

打开打印出的回环 URL,然后提交一个虚构密钥。参考宿主会在受限 iframe 中渲染真实的 MCP App;演示用 Node 命令会在隔离的临时目录中创建 .env.inline-demo,并将其权限设为 0600。紧凑的内联表单不会显示命令供审核。此参考宿主是测试夹具,不能证明特定聊天产品支持内联应用。仅在经过单独评估的宿主中使用真实凭据。

连接你的编码 Agent

SecureInput 以 stdio MCP 桥接器的形式运行。第一个需要它的客户端会自动启动共享守护进程;浏览器只需配对一次。

Claude Code
claude mcp add secureinput -- secureinput mcp

运行 claude mcp list 检查连接。如果希望该配置在所有项目中可用,请在 secureinput 前添加 --scope user。

Cursor

添加到 ~/.cursor/mcp.json(或项目的 .cursor/mcp.json):

{
  "mcpServers": {
    "secureinput": {
      "command": "secureinput",
      "args": ["mcp"]
    }
  }
}
Codex CLI

使用 Codex CLI 注册服务:

codex mcp add secureinput -- secureinput mcp
codex mcp list

或者,添加到 ~/.codex/config.toml:

[mcp_servers.secureinput]
command = "secureinput"
args = ["mcp"]
VS Code / GitHub Copilot

添加到 .vscode/mcp.json:

{
  "servers": {
    "secureinput": {
      "type": "stdio",
      "command": "secureinput",
      "args": ["mcp"]
    }
  }
}
任意 MCP 客户端

使用 stdio 服务,命令为 secureinput,参数为 mcp。

{
  "mcpServers": {
    "secureinput": {
      "command": "secureinput",
      "args": ["mcp"]
    }
  }
}

如果可执行文件不在 PATH 中,请使用 dist/cli/index.js 的绝对路径:

{
  "mcpServers": {
    "secureinput": {
      "command": "node",
      "args": ["/absolute/path/to/secureinput/dist/cli/index.js", "mcp"]
    }
  }
}

在 Agent 规则中加入类似以下说明,让 Agent 使用该工具,而不是要求用户粘贴密钥:

When you need an API key, password, or token, call the SecureInput MCP tool
request_secret. Do not ask me to paste secrets into chat. Prefer delivery
mode "execute" with the secret in stdin/env, or "write_env" for .env files.

MCP 工具

request_secret

创建安全输入请求,并可选择等待用户提交。

{
  "title": "GitHub CLI login",
  "description": "Authenticate gh so I can create and push the repository.",
  "fields": [
    {
      "id": "token",
      "label": "GitHub token",
      "description": "A fine-grained token with repo access.",
      "type": "password",
      "minLength": 20
    }
  ],
  "delivery": {
    "mode": "execute",
    "command": "gh",
    "args": ["auth", "login", "--with-token"],
    "stdin": "{{token}}",
    "timeoutSeconds": 60
  },
  "waitSeconds": 30
}

字段:

  • title — 简短的请求名称,最多 100 个字符。
  • description — 说明需要该密钥的原因,最多 1000 个字符。
  • cwd — 可选的工作目录,相对于 MCP 客户端的工作目录解析;解析结果必须位于允许的根目录内。
  • fields — 1–10 个输入项。每项包含 id、label、可选的 description、type(password 或 text)、placeholder、minLength、maxLength、pattern(RE2)、required、sensitive 和 autocomplete。
  • delivery — execute、write_env 或 return(默认禁用)。
  • timeoutSeconds — 请求有效时长,30–900 秒。默认值为 300。
  • waitSeconds — 此工具调用阻塞等待的时长,0–240 秒。默认值为 30。

如果用户在 waitSeconds 内尚未提交,结果为 { "requestId": "req_…", "status": "pending", "inputMode": "inline" }(或 "browser")。请使用返回的请求 ID 调用 check_secret_request。

check_secret_request

对现有请求进行长轮询。最多等待 45 秒。

{ "requestId": "req_…", "waitSeconds": 30 }
cancel_secret_request

取消仍处于待处理状态的请求。

{ "requestId": "req_…" }
secureinput_status

返回输入模式、返回模式状态以及待处理请求的 ID 和状态。完整的浏览器/API 策略响应保持不变。

传递模式

execute — 使用密钥运行命令
{
  "mode": "execute",
  "command": "gh",
  "args": ["auth", "login", "--with-token"],
  "cwd": ".",
  "stdin": "{{token}}",
  "env": {},
  "timeoutSeconds": 120
}
  • 命令会直接以 shell: false 启动。SecureInput 不会进行 shell 插值。
  • 密钥字段可以通过 {{fieldId}} 出现在 stdin 或 env 值中,但不能出现在 command 或 args 中。在某些系统上,其他进程仍可能看到环境变量;如有条件,请优先使用 stdin。
  • 非敏感的 text 字段可用于 args,例如用户名。
  • 至少有一个密钥引用必须通过 stdin 或 env 传递。
  • stdout 和 stderr 不会提供给 Agent。配对的本地浏览器可以显示经过大小限制、尽力脱敏的输出。
  • 子进程会收到基本的操作系统变量(如 PATH、HOME 和临时目录设置)、固定的终端设置,以及显式配置的传递 env 映射。不会继承其他守护进程环境变量。
  • 超时后会终止进程组。
  • 命令必须以非交互方式运行。不支持仅限 TTY 的登录流程;请改用该工具的令牌/非交互模式。
write_env — 写入 .env 文件
{
  "mode": "write_env",
  "path": ".env.local",
  "mapping": {
    "secret": "STRIPE_SECRET_KEY"
  },
  "overwrite": false
}
  • 仅允许 .env 和 .env.* 文件;文件名包含 example、sample、template、dist、defaults 或 schema 时会被拒绝。不接受 .envrc 等类似脚本的文件名。
  • 父目录必须存在,且解析结果必须位于允许的根目录内。
  • 不允许使用符号链接。
  • 已有键需要设置 overwrite: true。浏览器会要求确认覆盖;内联提交则授权所请求的覆盖,无需单独确认。
  • 写入是原子操作,生成的文件权限为 0600。会保留已有注释、export 前缀、引号样式和换行符。
  • 拒绝处理大于 1 MiB 的文件。
return — 将密钥返回给 Agent(危险)

默认禁用。启动守护进程时使用 --allow-return 以启用:

secureinput serve --allow-return

此设置会持久保存到配置文件中。返回模式会将密钥放入模型上下文和对话记录中。仅当 execute 和 write_env 无法解决问题时才使用此模式。

Agent 看到的内容

MCP 响应是精简的状态对象。完整请求详情仅通过仅供 widget 使用的 _meta 发送,不会在模型可见的内容中重复出现。输入待处理时,内嵌 widget 不会轮询。提交后,它会长轮询仅供应用使用的状态工具,使 UI 更新不会进入模型上下文。

已完成的 execute 请求如下所示:

{"requestId":"req_…","status":"completed","exitCode":0}

密钥不会出现在工具结果、请求对象、SSE 流、审计日志或服务日志中。

安全模型

SecureInput 面向本地桌面威胁模型构建,而非用于防范存在恶意用户的多用户主机。

请参阅安全与信任指南,了解示意图、数据位置和实用检查清单。

设计上受到保护

  • 仅监听环回地址的服务,并通过 Host 标头检查拒绝 DNS 重绑定攻击。
  • 256 位随机 MCP 和配对令牌,存储在权限为 0600 的配置文件中。
  • 配对令牌交换为签名的 HttpOnly、SameSite=Strict 会话 Cookie。
  • 浏览器状态变更请求会进行同源检查并使用自定义 CSRF 标头。
  • 严格的 CSP、frame-ancestors 'none'、不启用 CORS,以及 API 和 HTML 入口点上的 no-store。
  • 单次请求认领、每个请求的 TTL、待处理请求上限和速率限制。
  • 以恒定时间比较令牌,并对配对操作实施速率限制。
  • 使用 RE2 验证模式,避免正则表达式拒绝服务攻击。
  • 不会刻意将提交的字段值放入 URL、argv、日志、审计记录或错误消息中。初始配对 URL 包含单独的配对令牌;请妥善保密。
  • 输出脱敏会处理每个密钥的原始形式、JSON 转义形式、URL 编码形式和 base64 形式,以及常见令牌格式。
  • 使用 shell: false 执行命令;超时后会终止进程组。
  • 环境变量写入采用原子操作、权限为 0600、可防范符号链接,并限制在允许的根目录内。
  • 风险评估会标记 shell/网络/绝对路径命令、环境变量覆盖和返回模式。浏览器流程会添加审核复选框;内嵌流程不会显示这些复选框,提交即表示授权传递。
  • 审计日志仅记录元数据和结果:请求 ID、客户端、传递目标、字段名称、退出码和耗时。

保护范围之外

  • 你批准的命令可能会外传密钥。审核准确的命令和目标位置是最后一道控制措施。
  • 具有文件系统或终端访问权限的 Agent,可能会在写入 .env 文件后读取该文件,或运行命令来读取它。如果不希望创建持久文件,请使用带 stdin 的 execute。
  • 同一用户下的恶意软件、root、受攻击的浏览器、恶意扩展程序或键盘记录器都可以读取你输入的任何内容。SecureInput 不声称能够阻止它们。
  • 在某些系统上,同一用户运行的其他进程可能会看到环境变量。命令支持时,优先使用 stdin。
  • 对经过转换的密钥(已哈希、拆分、加密或重新编码的输出),脱敏只能尽力而为。
  • 待处理请求和密钥值仅保存在内存中。重启守护进程会丢弃这些内容。
  • .env 文件是明文文件。SecureInput 会设置安全权限,但不会加密任何内容。

配置

默认配置目录:~/.secureinput/

文件用途
config.json端口、令牌、允许的根目录、返回/审计/浏览器设置。权限为 0600。
runtime.json正在运行的守护进程 PID 和端口。
audit.jsonl仅包含元数据的审计记录。不含密钥值。
server.log守护进程日志。不含密钥值。

环境变量:

变量含义
SECUREINPUT_HOME覆盖配置目录。
SECUREINPUT_NO_OPEN设为 1 可阻止自动打开浏览器。
SECUREINPUT_WEB_DIR覆盖已构建的 Web UI 目录。

允许的根目录默认为你的主目录。启动守护进程时可进一步收紧范围:

secureinput serve --root ~/projects

多个目录可重复使用 --root。首次运行时会解析并持久化这些值。更改后请重启守护进程。

CLI 参考

secureinput serve [--port 4780] [--root <path>]... [--allow-return]
                  [--no-open] [--no-audit] [--home <path>] [--web-dir <path>]
secureinput mcp   [--home <path>] [--port <port>]
                  [--client-name <name>] [--client-version <version>]
secureinput pair  [--home <path>] [--port <port>] [--no-open]
secureinput status
secureinput stop
secureinput doctor
  • serve 运行守护进程并打开配对页面。
  • mcp 运行 stdio 桥接程序,并在需要时自动启动守护进程。
  • pair 在需要时启动守护进程,并输出配对 URL。
  • status 显示守护进程的运行状况、策略和待处理请求。
  • stop 停止守护进程。
  • doctor 检查 Node 版本、守护进程是否可访问,以及运行时 PID。

MCP 桥接程序会继承当前工作目录,并将其报告给守护进程。该目录必须位于允许的根目录内;否则请求会被拒绝,而不会静默回退。

HTTP API 和 HTTP MCP

守护进程还会公开一个无状态的 Streamable HTTP MCP 端点:

POST http://127.0.0.1:4780/mcp
Authorization: Bearer <mcpToken from ~/.secureinput/config.json>
Content-Type: application/json

对于偏好使用 HTTP 而非 stdio 的客户端或测试框架,这很实用。该端点使用 JSON 响应,而不是长连接 SSE 会话。它仍仅限环回访问,并且需要 MCP 令牌。

浏览器 UI 使用 /api 下经过身份验证的 REST 和 SSE 端点。这些属于实现细节,可能会发生变化;MCP 工具则是稳定的接口。

选择交付方式

方法适用场景持久化内容
使用 stdin 的 execute接受通过 stdin 传入令牌的非交互式 CLI 登录或命令命令可能会自行存储凭据
使用环境变量的 execute需要环境变量的命令命令可能会存储凭据;同一用户的其他进程可能会看到该命令的环境变量
write_env读取 .env 文件的本地应用仅所有者可访问的明文文件

当你需要在 SecureInput 中查看目标位置和风险确认信息时,请使用浏览器输入模式。紧凑的内联形式会显示输入标签并立即提交,不会显示浏览器的审核界面。无论使用哪种模式,都必须有人输入该值。

常见问题

编码 Agent 能看到我的 API 密钥吗? 默认情况下,MCP 结果不会主动返回该密钥。Agent 会看到请求 ID、状态和退出代码;标准输出和标准错误会保留在本地。获准执行的命令仍可能写入或传输这些值,而具有终端或文件系统访问权限的 Agent 可能能够读取已写入的 .env 文件。return 模式会明确将该值提供给 Agent,除非使用 --allow-return 启动守护进程,否则此模式处于禁用状态。

我可以在 Agent 聊天中输入机密吗? 可以,默认支持兼容的 MCP Apps 宿主。小组件会先加密提交内容,再通过宿主传递给本地守护进程。它使用相同的本地命令/环境文件交付实现;按 Enter 键即表示授权内联交付,而浏览器仍保留审核控件。宿主仍控制渲染和小组件元数据,因此只能在你信任的宿主中使用内联输入。请参阅下方的输入模式设置。这并不表示它兼容所有聊天客户端。

机密存储在哪里? SecureInput 会在进程内存中保留待处理请求和提交的值,并在交付后丢弃引用;但无法保证 JavaScript 内存会被清零。write_env 会按预期将明文写入你批准的 .env 文件。命令也可能自行持久化凭据。已完成请求的元数据会在内存中保留 10 分钟,只有元数据会写入审计日志。

它能与 Claude Code 配合使用吗? 可以。运行 claude mcp add secureinput -- secureinput mcp。相同的 stdio 桥接也适用于 Cursor、Codex CLI、VS Code Copilot、Cline、Windsurf 和其他 MCP 客户端。

它能与 Cursor 配合使用吗? 可以。将上方所示的 mcpServers 条目添加到 Cursor 的 MCP 配置中。

为什么不直接使用密码管理器? 密码管理器很适合人类使用,但它不是 MCP 交付途径。SecureInput 专注于将机密交付给特定命令或环境文件,并提供可审计的目标,且无需 Agent API 密钥。

Agent 能读取我的整个环境吗? 命令会接收一小组操作系统环境变量,以及交付映射中明确提供的值。它仍以你的操作系统用户权限运行,并可能读取文件或凭据存储。浏览器模式会显示命令,并为高风险请求添加确认步骤;紧凑内联模式不会显示这些详细信息。请使用权限范围尽可能小的凭据。

如果守护进程重启,会发生什么? 待处理请求和已完成结果都会丢失。Agent 会收到“找不到请求”错误,并可创建新请求。这是有意为之:不设机密保险库,也不保留过期凭据。

我可以通过 SSH 或在开发容器中使用它吗? 守护进程只监听 loopback。如果浏览器和 Agent 在同一台机器上运行,就可以使用。对于远程容器,请通过 SSH 转发端口,并从该机器的浏览器会话进行配对;不要将端口 4780 暴露到公网。远程/多用户托管不在支持范围内。

Windows 怎么样? 代码会处理 Windows 进程终止和路径,但目前 CI 仅在 Linux 上运行。现阶段请将 Windows 支持视为尽力而为。

浏览器 UI 是否仅使用 shadcn/ui 构建? UI 使用 shadcn/ui 组件、Radix 原语、Tailwind 和 lucide 图标。没有第三方 UI 套件或外部资源。

开发

npm ci
npm run typecheck
npm test
npm run build
  • npm run dev 会构建 Web UI 并启动守护进程,但不会打开浏览器。
  • npm run dev:web 会在端口 5173 上运行 Vite,并将 /api 代理到守护进程。
  • npm test 会运行 node:test 单元测试和集成测试,包括身份验证、CSRF、Origin/Host 拒绝、SSE、通过 HTTP 的 MCP、一次性提交、过期处理、脱敏、环境文件写入以及 stdio 桥接行为。

项目结构:

src/shared/   schemas, validation, redaction, env parser
src/server/   daemon, auth, policy, request service, delivery, audit
src/mcp/      stdio bridge
src/cli/      command-line entry point
src/web/      React + Vite + Tailwind + shadcn/ui
test/         node:test unit and integration tests

有关详细设计和威胁模型,请参阅 PLAN.md;有关漏洞报告,请参阅 SECURITY.md;有关贡献指南,请参阅 CONTRIBUTING.md。

许可证

MIT。请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。