内容
# 1Password 安全 MCP
用于浏览器登录工作流的本地 MCP 服务器:
- 列出可访问的 1Password保险箱项目名称
- 描述字段标签而不返回值
- 复制选定的字段到 macOS 剪贴板
服务器使用固定的官方 `@1password/sdk` 包。`copy_secret` 在 MCP 服务器进程内读取选定的值,写入 macOS 剪贴板,并仅返回元数据。
## 设置
服务账户令牌从 `.env` 读取:
```sh
OP_SERVICE_ACCOUNT_TOKEN=ops_...
```
`ONEPASSWORD_SERVICE_ACCOUNT_TOKEN` 和之前的 `1PASSWORD_SERVICE_ACCOUNT_TOKEN` 名称也被接受。
安装本地 Bun 和固定的 SDK 依赖:
```sh
./scripts/install-bun.sh
./vendor/bun/bun install
```
运行本地烟雾测试:
```sh
./vendor/bun/bun ./scripts/mcp-call.mjs tools/list '{}'
./vendor/bun/bun ./scripts/mcp-call.mjs list_secrets '{"vault":"Agents","limit":10}'
```
## MCP 工具
`list_secrets`
列出服务账户可见的保险箱名称和项目名称。不返回任何值。
`describe_secret`
返回选定项目的字段标签、ID、用途和类型。在 MCP 响应之前,值被剥离。
`copy_secret`
要求代理在此工具运行后粘贴到目标输入框。它将选定的字段写入 macOS 剪贴板而不返回该值,并在默认情况下 30 秒后恢复之前的剪贴板:
```json
{
"vault": "Agents",
"item": "AT&T",
"field": "username",
"restoreAfterSeconds": 30
}
```
您也可以提供 `op://...` 引用:
```json
{
"secretRef": "op://Agents/AT&T/username",
"field": "username"
}
```
## Codex 插件
此仓库也是一个 Codex 插件。插件清单位于 `.codex-plugin/plugin.json`,其捆绑的 MCP 配置位于 `.mcp.json`。
对于仓库本地安装,将此仓库添加为本地 Codex 市场根目录:
```sh
codex plugin marketplace add /Users/lingxi/repos/1password-safe-mcp
codex plugin add 1password-safe-mcp@1password-safe-mcp-local
```
重启 Codex 或在安装后启动新线程。插件通过以下方式启动 MCP 服务器:
```json
{
"mcpServers": {
"1password-safe": {
"command": "./bin/1password-safe-mcp"
}
}
}
```
## Cursor 插件
此仓库也是一个 Cursor 插件。插件清单位于 `.cursor-plugin/plugin.json`,Cursor 从 `mcp.json` 发现插件 MCP 服务器。
对于本地测试,从仓库根目录安装或导入此仓库作为本地 Cursor 插件。捆绑的 MCP 服务器名为 `1password-safe`,通过 `./bin/1password-safe-mcp` 启动。
如果您想直接从 Cursor 项目/全局 MCP 配置运行 MCP 服务器,而不是安装插件,请使用以下相同的结构:
```json
{
"mcpServers": {
"1password-safe": {
"type": "stdio",
"command": "/Users/lingxi/repos/1password-safe-mcp/bin/1password-safe-mcp",
"envFile": "/Users/lingxi/repos/1password-safe-mcp/.env"
}
}
}
```
## 直接 Codex 配置
```toml
[mcp_servers."1password-safe"]
command = "/Users/lingxi/repos/1password-safe-mcp/bin/1password-safe-mcp"
```
## 运行时选择
该项目使用 Bun 作为 MCP 服务器,因为官方的 1Password JavaScript SDK 可以作为普通依赖项固定和锁定。Rust 对于当前的形状没有带来太多好处,因为不再有本地键盘帮助程序;唯一的 macOS 特定边界是 pasteboard 命令。
## 安全注意事项
- 服务账户应限制在专用的自动化保险箱中。
- `@1password/sdk` 依赖项在 `bun.lock` 中固定和锁定。
- `copy_secret` 不会将秘密返回给代理。
- 选定的秘密仍然进入全局 macOS 剪贴板,并对接收粘贴的任何应用程序可见。
- `copy_secret` 使用 macOS pasteboard 路径,不需要 Accessibility。
- 没有 AppleScript、键盘事件帮助程序或 `.app` 包。