High-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph — average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.
MCP connector for bounded infrastructure actions
emisar connects MCP-capable agents to a catalog of declared infrastructure actions. The control plane applies policy and approvals, then an outbound-only runner rechecks the pack hash and arguments on the host before execution.
Builders who want Claude Code, Codex, Cursor, or another MCP client to manage infrastructure through approved actions.
You can let an agent investigate and operate hosts without giving it a raw shell.
What it does
Declared actions
Actions are packaged with a fixed executable, argv shape, argument schema, risk level, timeout, output limits, and redaction rules.
Policy and approvals
The control plane scopes requests, applies policy, and pauses for human approval when required.
Outbound-only runner
The runner uses an outbound TLS WebSocket and rejects unknown actions and arguments before running anything.
Content-addressed packs
The runner verifies pack hashes from disk so custom packs only run when they are trusted.
Audit trail
Denied, pending, and executed requests are recorded in the control plane and in a hash-chained JSONL journal on the host.
MCP client bridge
Local stdio clients can connect through `emisar-mcp`, while remote MCP clients use OAuth.
How to get it
- 1Run it on the host
curl -fsSL https://emisar.dev/install.sh \ | sudo EMISAR_ENROLLMENT_KEY=emkey-enroll-... bash
- 2The recommended path needs only Coop and Docker on the host. It installs every…
./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
- 3Then, inside the shell
./run seed # explicit, idempotent demo data ./run serve # live reload at the URL printed by Coop # or: ./run serve --iex
README
emisar
Leave the agent working. Keep production authority bounded.
emisar gives MCP-capable agents a catalog of declared infrastructure actions instead of a shell. Policy decides what runs, what waits for a person, and what is denied. A small outbound-only runner checks the action again on the host before it executes anything.
Start with the public pack catalog, let emisar suggest the packs that match a host, and add your own actions without adding another MCP server to every client.
Start with one host
You need an emisar account, a Linux host with
systemd, and sudo. GitHub CLI with gh attestation verify --bundle checks the
release signature; without it the installer asks, or warns and continues when
run with --yes, on the checksum alone. Allow
outbound HTTPS to emisar.dev:443, registry.emisar.dev:443,
tuf-repo-cdn.sigstore.dev:443, and tuf-repo.github.com:443. The last two
serve the public trust roots used to authenticate release checksums; no GitHub
login is required.
GitHub is the optional release fallback. To permit that fallback, also allow
api.github.com:443, github.com:443, and
release-assets.githubusercontent.com:443.
-
In the console, choose Connect a runner. Copy the generated command; it contains a fresh, single-use enrollment key.
-
Run it on the host:
curl -fsSL https://emisar.dev/install.sh \ | sudo EMISAR_ENROLLMENT_KEY=emkey-enroll-... bashThe installer authenticates the signed release checksum, verifies the archive against it, creates the service, installs host-matched starter packs, and starts the runner.
-
Confirm the runner is online in the console, then dispatch
linux.uptimewith a reason. You are done when the output appears and the run is present in the audit trail. -
Open LLM agents and connect your client. Remote MCP clients use OAuth; local stdio clients can use the
emisar-mcpbridge and its browser approval flow.
The complete walkthrough, including expected output and troubleshooting, is at
emisar.dev/docs/quickstart. An agent can
perform and certify the setup with the public
install-emisar skill.
How an action runs
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
The action pack is the contract. It fixes the executable, argv shape, argument schema, risk, timeout, output limits, redaction, and side-effect description. The model selects from that contract; it does not invent a command line for the runner to execute.
Adding a pack adds capabilities behind the same MCP surface. Operators do not need to deploy another tool server or reconfigure every agent when the catalog changes.
What holds the boundary
- No inbound runner listener. The runner opens an outbound TLS WebSocket and exposes no inbound listener; commands return through that established connection.
- Declared actions only. Cloud input is limited to typed, schema-bounded arguments. The runner rejects unknown actions and arguments.
- Content-addressed packs. The control plane pins the trusted pack hash; the runner recomputes it from disk before execution. New or changed custom packs wait for trust.
- Policy before side effects. Runner scope, risk policy, action overrides, standing grants, and conditional approval are evaluated before dispatch.
- Host-side enforcement. The runner clamps execution options to the pack's limits and runs the declared binary and argv. Runner output is redacted before leaving the host; Emisar retains the resulting redacted output in run history.
- Two records. The control-plane audit includes denied and pending requests; every runner also writes its execution attempts and local refusals to a hash-chained JSONL journal.
- Optional bridge-attested dispatch. A runner can require intent signed by the customer-authorized MCP bridge with an Ed25519 or ECDSA P-256 leaf key, so the control plane cannot originate or widen a permitted call.
Read the exact guarantees, limitations, and threat model in
.agent/kb/specs/security-model.md.
What emisar is not
- It is not a sandbox or process isolator. We recommend using one, such as coop.
- It is not a generic
execute(command)tool or a replacement for SSH. - It does not replace OS least privilege, change management, or configuration management.
- It does not make a permitted destructive action harmless. The safety boundary is only as strong as the actions, pack trust, policy, runner configuration, and host permissions in use.
The staging-only shell pack is the explicit break-glass exception to the
declared-action model. It is critical-risk, default-denied, never suggested,
and should not be installed on production runners.
Find the right surface
| Goal | Start here |
|---|---|
| Install, upgrade, harden, or diagnose a host | runner/README.md |
| Connect Claude, ChatGPT, Cursor, Codex, or another MCP client | Connect a CLI agent |
| Inspect or develop the stdio bridge | mcp/README.md |
| Browse, install, or author action packs | packs/README.md |
| Let an agent install emisar, connect a client, or author a pack | skills/README.md |
| Review architecture and trust boundaries | .agent/kb/architecture.md |
| Review protocol contracts | .agent/kb/specs/wire-protocol.md and .agent/kb/specs/mcp-api.md |
| Contribute to the control plane | portal/README.md |
| Review the production GCP infrastructure | infra/README.md |
Repository layout
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
Each top-level project has its own AGENTS.md with its architecture, security
rules, and verification gate. Run ./run help for the complete contributor
command surface.
Develop locally
The recommended path needs only Coop and Docker on the host. It installs every repository pin in the isolated project image:
./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
Then, inside the shell:
./run seed # explicit, idempotent demo data
./run serve # live reload at the URL printed by Coop
# or: ./run serve --iex
For native development, install the exact versions in .tool-versions with
asdf, plus Git, Coop, Docker, the PostgreSQL client, ShellCheck,
Chrome/Chromium, and ImageMagick.
./run setup validates all prerequisites before starting services; ./run doctor reports every detected version and an actionable mismatch. On macOS,
run ./run certs trust once for this workspace after setup.
The fast loop runs Phoenix in the current environment and keeps only PostgreSQL and Keycloak in the workspace-isolated Coop dependency stack.
./run urls prints this workspace's distinct Portal, metrics, Postgres, and
Keycloak URLs. Coop forks inherit the same setup but receive different ports and
volumes. Seeds are never applied by setup, serve, or reset unless explicitly
requested.
Use ./run status for a read-only view of the current workspace, ./run logs [db|keycloak] for its exact sidecar logs, and ./run psql for its development
database. Every canonical gate prints its current phase and elapsed time; a
failure names the phase that stopped it.
The root docker-compose.yml remains the slower packaged topology with the
release Portal image, seeded demo data, three runners, MCP, and signing. Start it
with ./run smoke; it serves http://localhost:4010. See
portal/README.md and dev/README.md.
License
This repository is dual-licensed:
runner/,mcp/, andpacks/are open source under the Apache License 2.0. You can inspect, build, package, and operate the on-host components independently.- Everything else, including
portal/, is source-available under the Business Source License 1.1. Non-production use is free. Production use is permitted only as needed to operate the Apache-licensed components or the hosted service under the Additional Use Grant; other production use requires a commercial license. Each version converts to Apache 2.0 on its Change Date.
See contributing, security,
and the CLA. For commercial licensing, contact
licensing@emisar.dev.
Files in the repo
- .agent
- .claude
- .codex
- .gemini
- .githooks
- .github
- dev
- dist
- infra
- mcp
- packs
- portal
- runner
- skills
- tools
- .dep-age-allow
- .dockerignore
- .gitattributes
- .gitignore
- .shell
- .tool-versions
- .trivyignore.yaml
- AGENTS.md
- CLAUDE.md
- docker-compose.yml
- GEMINI.md
- go.work
- go.work.sum
- install-mcp.ps1
- install-mcp.sh
- install.sh
- LICENSE.md
- README.md
- run
- server.json
Discussion (0)
Ask about usage, or say what you built with itSign in to join the discussion.
No comments yet. Be the first to say what this is good for.
More connectors

Universal provider proxy for OpenAI Codex & Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code
Git-native persistent memory for AI coding agents. Implements Google OKF v0.2 with sub-300µs in-memory BM25 search, embedded MCP server, and progressive disclosure. Slashes token bloat by 80% with zero external databases or dependencies. Built in pure Go.
Local-first code intelligence graph for MCP and CLI. Builds a persistent map of your codebase so AI coding tools read only what matters, with benchmarked context reductions on reviews and large-repo workflows.
Stop your AI from making things up — it proposes, deterministic tools decide, every claim checked against ground truth with evidence. Grounded facts and context survive resets. Reverse engineering is the proving ground. MCP server + CLI.
20 MB lightweight cross-platform database client for 90+ databases, including MySQL, PostgreSQL, SQLite, Redis, MongoDB, DuckDB, SQL Server, and Dameng. Built-in AI, MCP Server, CLI, desktop and Docker. | 轻量级跨平台数据库管理工具,支持 MySQL、PostgreSQL、SQLite、Redis、MongoDB、达梦等 90+ 数据库,提供桌面端、Docker、CLI、内置 AI 助手和 MCP Server。