mcpField
E
emisar

emisar

远程服务
emisar.dev云与基础设施3305 天前更新

关于 emisar

emisar 是一个 MCP 服务,让 AI Agent 通过声明式基础设施操作而非 shell 管理服务器,适合需要约束生产环境权限的团队。策略引擎决定操作是执行、等待审批还是拒绝,主机上的 runner 在执行前再次校验。

主要功能

  1. 01声明式动作目录,参数带类型与结构约束
  2. 02策略决定执行、等待审批或拒绝
  3. 03主机侧 runner 出站连接,不开放入站端口
  4. 04操作包内容哈希校验与受信任确认
  5. 05控制平面与 runner 双重审计日志

适用场景

  1. 01让 AI Agent 在生产主机上执行受限的运维操作
  2. 02对高风险变更设置人工审批环节
  3. 03为 AI 操作留存可追溯的审计记录

MCP 相关

emisar 是一个 MCP 服务,向 MCP 客户端暴露经过声明的基础设施动作,而不是任意命令执行入口。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://emisar.dev/api/mcp/rpc
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

详细介绍

emisar

让 Agent 持续工作,同时限定其对生产环境的操作权限。

emisar 为具备 MCP 能力的 Agent 提供已声明基础设施操作目录,而非 shell。策略决定哪些操作可以运行、哪些需要等待人员批准,以及哪些会被拒绝。一个仅向外发起连接的小型执行器会在主机上再次检查操作,然后才执行任何操作。

从公开的工具包目录开始,让 emisar 推荐适合主机的工具包。添加自己的操作,无需为每个客户端再添加一个 MCP 服务。

从一台主机开始

你需要一个 emisar 账户、一台运行 systemd 的 Linux 主机,以及 sudo。GitHub CLI 使用 gh attestation verify --bundle 检查发行版签名。如果没有 GitHub CLI,安装程序会在仅使用校验和继续之前征求许可。使用 --yes 时,它会发出警告并继续。允许出站 HTTPS 访问 emisar.dev:443、registry.emisar.dev:443、tuf-repo-cdn.sigstore.dev:443 和 tuf-repo.github.com:443。最后两个地址提供用于验证发行版校验和的公开信任根。无需登录 GitHub。

GitHub 是可选的发行版备用来源。如果你希望使用该备用来源,还需允许访问 api.github.com:443、github.com:443 和 release-assets.githubusercontent.com:443。

  1. 在控制台中选择 Connect a runner。复制生成的命令;其中包含一个全新且仅可使用一次的注册密钥。

  2. 在主机上运行该命令:

    curl -fsSL https://emisar.dev/install.sh \
      | sudo EMISAR_ENROLLMENT_KEY=emkey-enroll-... bash
    

    安装程序会验证已签名的发行版校验和,并据此验证存档。随后,它会创建服务、安装与主机匹配的入门工具包,并启动执行器。

  3. 在控制台中确认执行器已上线,然后附上原因调度 linux.uptime。当输出出现,且运行记录显示在审计跟踪中时,即表示完成。

  4. 打开 AI agents 并连接客户端。远程 MCP 客户端使用 OAuth;本地 stdio 客户端可以使用 emisar-mcp 桥接程序及其浏览器审批流程。

完整操作指南(包括预期输出和故障排除)请参阅 emisar.dev/docs/quickstart。Agent 可以使用公开的 install-emisar 技能执行并验证安装。

操作如何运行

AI client
    |  MCP: discover actions, request one with typed arguments
    v
emisar control plane
    |  authenticate, scope, apply policy, wait for approval when required
    v
outbound-only runner
    |  verify pack hash, validate arguments, enforce local limits
    v
declared host command
       stream redacted output, journal the attempt, update fleet audit

操作工具包定义了契约:可执行文件、argv 格式、参数架构、风险、超时时间、输出限制、脱敏规则和副作用说明。模型会从该契约中选择操作;它不会为执行器编造命令行。

添加工具包即可在相同的 MCP 接口后扩展功能。目录发生变化时,运维人员无需部署另一个工具服务,也无需重新配置每个 Agent。

边界如何保障安全

  • 运行器会建立出站 TLS WebSocket 连接,且不开放任何入站监听器。 命令通过此已建立的连接返回。
  • 云端输入仅限于已声明的操作和有类型、受架构约束的参数。运行器会拒绝 未知操作和参数。
  • 操作包采用内容寻址:其内容的哈希值用于标识操作包。控制平面会固定受信任 操作包的哈希值,运行器会在执行前从磁盘重新计算该哈希值。新的或已更改的自定义操作包须等待信任确认。
  • 控制平面会在分发前评估运行器范围、风险策略、操作覆盖项、 常设授权和条件审批。
  • 在主机上,运行器会将执行选项限制在操作包的限制范围内,并运行已声明的 二进制文件及 argv。运行器会在输出离开主机前对其进行脱敏,Emisar 则会在运行历史中保留 脱敏后的输出。
  • 控制平面审计日志会记录被拒绝和待处理的请求。每个运行器 也会将其执行尝试和本地拒绝记录到哈希链式 JSONL 日志中。
  • 运行器可以选择要求经桥接器证明的分发:意图须由客户授权的 MCP 桥接器使用 Ed25519 或 ECDSA P-256 叶密钥签名。这样,控制平面就无法伪造或扩大获准调用。

请阅读 .agent/kb/specs/security-model.md,了解准确的保障措施、限制和威胁模型。

emisar 不是什么

  • 它不是沙箱或进程隔离器。我们建议使用此类工具,例如 coop。
  • 它不是通用的 execute(command) 工具,也不能替代 SSH。
  • 它不能替代操作系统最小权限、变更管理或配置 管理。
  • 它无法让已获准的破坏性操作变得无害。安全边界的强度取决于所用的操作、操作包信任、 策略、运行器配置和主机权限。

仅用于预发布环境的 shell 操作包是对已声明操作模型的明确紧急破例(仅限紧急情况)。 它属于严重风险,默认拒绝,绝不会被推荐,也不应安装在生产运行器上。

找到合适的入口

目标从这里开始
安装、升级、加固或诊断主机runner/README.md
连接 Claude、ChatGPT、Cursor、Codex 或其他 MCP 客户端连接 CLI Agent
检查或开发 stdio 桥接器mcp/README.md
浏览、安装或编写操作包packs/README.md
让 Agent 安装 emisar、连接客户端或编写操作包skills/README.md
查看架构和信任边界.agent/kb/architecture.md
查看协议契约.agent/kb/specs/wire-protocol.md 和 .agent/kb/specs/mcp-api.md
为控制平面贡献代码portal/README.md
查看生产环境 GCP 基础设施infra/README.md

仓库布局

portal/   Elixir/Phoenix control plane, operator console, website, and MCP API
runner/   Go host runner and operator CLI
mcp/      Go stdio-to-HTTP MCP bridge
packs/    Versioned action-pack catalog
skills/   Standalone customer skills for coding agents
infra/    Production Terraform for emisar on Google Cloud
run       Root contributor command for development, tests, gates, and operations
dev/      Development Compose topologies, images, configs, and fixtures
tools/    Go implementations behind the contributor command and CI
dist/     Tracked distribution packages plus ignored generated build output
.agent/kb/ Repository architecture, specifications, runbooks, and rules

每个顶层项目都有自己的 AGENTS.md,其中包含其架构、安全规则和验证门槛。运行 ./run help 查看完整的贡献者命令列表。

本地开发

推荐的方式只需在主机上安装 Coop 和 Docker。它会在隔离的项目镜像中安装仓库指定的所有工具版本:

./run bootstrap             # works before Go is installed
coop build                  # build the pinned project image once
coop run -- ./run setup     # sidecars, deps, migrations, browser tooling
coop shell                  # enter the development box

然后,在 shell 中:

./run seed        # explicit, idempotent demo data
./run serve       # live reload at the URL printed by Coop
# or: ./run serve --iex

如需原生开发,请使用 asdf 安装 .tool-versions 中指定的确切版本。你还需要 Git、Coop、Docker、PostgreSQL 客户端、ShellCheck、jq、GNU Bash(支持 read -N)、GNU coreutils、Chrome/Chromium 和 ImageMagick。在 macOS 上,Apple 随附的 Bash 和 BSD 工具无法运行所有 pack 回归检查:

brew install bash coreutils jq
export PATH="$(brew --prefix coreutils)/libexec/gnubin:$(brew --prefix bash)/bin:$PATH"

./run setup 会在启动服务前检查所有前置条件;./run doctor 会报告检测到的所有版本以及需要修复的不匹配项。在 macOS 上,完成设置后,请为此工作区运行一次 ./run certs trust。

快速开发循环会在当前环境中运行 Phoenix,并仅在工作区隔离的 Coop 依赖栈中运行 PostgreSQL 和 Keycloak。

./run urls 会打印此工作区独有的 Portal、metrics、Postgres 和 Keycloak URL。Coop 分支会继承相同的设置,但会使用不同的端口和卷。只有在你明确要求时,Setup、serve 和 reset 才会应用种子数据。

使用 ./run status 以只读方式查看当前工作区,使用 ./run logs [db|keycloak] 查看其对应的 sidecar 日志,使用 ./run psql 访问其开发数据库。每个规范门禁(./run gate <project>)都会打印当前阶段和耗时;发生故障时,会指出中断的阶段。

根目录下的 docker-compose.yml 仍保留速度较慢的打包拓扑,其中包含发布版 Portal 镜像、已填充种子数据、三个 runner、MCP 和签名。使用 ./run smoke 启动;服务地址为 http://localhost:4010。请参阅 portal/README.md 和 dev/README.md。

许可证

本仓库采用双重许可:

  • runner/、mcp/ 和 packs/ 按 Apache License 2.0 开源。你可以独立检查、构建、打包和运行主机上的组件。
  • 其他所有内容(包括 portal/)均以源代码形式提供,遵循 Business Source License 1.1。非生产用途免费。只有在 Additional Use Grant 允许的范围内,为运行 Apache 许可组件或托管服务而进行的生产用途才被许可。其他生产用途需要商业许可证。每个版本在其 Change Date 到期后转为 Apache 2.0。

请参阅贡献指南、安全政策和 CLA。如需商业许可,请联系 [email protected]。

评论

支持 Markdown

第一次接触 MCP?

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

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