enji-guard-cli
Exposes Enji Guard access and compact report metadata to local tools via an MCP server.
README
enji-guard-cli
Python 3.14 CLI and MCP bridge for Enji Guard.
This repository is an early prototype. It supports a shared core, a Typer CLI, and a FastMCP server that can expose Enji Guard access and compact report metadata to local tools.
Mental Model
Enji Guard groups GitHub repositories into projects. Most workflows should use
the GitHub owner/name repository selector; add --project NAME_OR_ID only
when the account has ambiguous repositories or when a batch operation must be
scoped to one project.
Project admin commands are direct domain actions: create, rename, delete, and
move repositories between projects. project delete is destructive and
requires --yes.
Recon is baseline discovery. Report audits are separate, slow jobs that produce readable reports and scores. Scores are triage hints: use them to sort and prioritize repositories, then read the reports before changing code. When a report exposes commit hashes, compare them with the current checkout before treating the report as fresh.
CLI output is human text and tables by default. Use --json only when another
tool needs structured output.
Agent Workflow
The service runtime is Docker. Agents should call the CLI inside the running container instead of installing or running this Python package on the host:
docker exec -i enji-guard-cli enji-guard --help
When working on another repository, pass the repository as OWNER/NAME. If an
agent is already in a GitHub checkout and wants to derive it from origin, it
can do that in the host shell and still pass an explicit selector to the
container:
REPO=$(git config --get remote.origin.url | sed -E 's#^git@github.com:##; s#^https://github.com/##; s#\.git$##')
docker exec -i enji-guard-cli enji-guard auth status
docker exec -i enji-guard-cli enji-guard repo resolve "$REPO"
docker exec -i enji-guard-cli enji-guard status "$REPO"
If the repository is absent from Enji:
docker exec -i enji-guard-cli enji-guard repo connect "$REPO"
For triage across all visible repositories:
docker exec -i enji-guard-cli enji-guard status --sort weakest
docker exec -i enji-guard-cli enji-guard repo list --sort latest-report
For reports:
docker exec -i enji-guard-cli enji-guard audit start "$REPO" --all
docker exec -i enji-guard-cli enji-guard wait "$REPO" security --timeout-seconds 7200
docker exec -i enji-guard-cli enji-guard report read "$REPO"
Recon and report audits can take tens of minutes. Use status for a snapshot,
wait for one audit, and report read after reports are ready. Prefer reading
reports through CLI/MCP instead of relying on email; disable noisy scheduled
mail when it is not part of the workflow.
Requirements
- Docker
- uv, only for repository development and QA
Runtime
docker compose up -d --force-recreate --remove-orphans --wait
docker exec -i enji-guard-cli enji-guard --help
Authentication
Preferred future path is an Enji API token:
printf '%s' "$ENJI_API_TOKEN" | docker exec -i enji-guard-cli enji-guard auth import-token --stdin
Until API tokens are available, cookie auth is supported as a temporary compatibility path:
pbpaste | docker exec -i enji-guard-cli enji-guard auth import-cookie --stdin
docker exec -i enji-guard-cli enji-guard auth status
Do not paste credentials directly into shell history. The auth file defaults to
~/.config/enji-guard/auth.json and is written with private file permissions.
CLI
docker exec -i enji-guard-cli enji-guard access
docker exec -i enji-guard-cli enji-guard project list
docker exec -i enji-guard-cli enji-guard project create Pets
docker exec -i enji-guard-cli enji-guard project rename Pets Friends
docker exec -i enji-guard-cli enji-guard project delete Pets --yes
docker exec -i enji-guard-cli enji-guard repo resolve j2h4u/enji-guard-cli
docker exec -i enji-guard-cli enji-guard repo move j2h4u/enji-guard-cli --to-project Friends
docker exec -i enji-guard-cli enji-guard status j2h4u/enji-guard-cli
docker exec -i enji-guard-cli enji-guard audit start j2h4u/enji-guard-cli --all
docker exec -i enji-guard-cli enji-guard wait j2h4u/enji-guard-cli security
docker exec -i enji-guard-cli enji-guard report read j2h4u/enji-guard-cli
docker exec -i enji-guard-cli enji-guard --project Pets schedule list
docker exec -i enji-guard-cli enji-guard --project Pets schedule set --enabled off
docker exec -i enji-guard-cli enji-guard --project Pets email set --auto off
docker exec -i enji-guard-cli enji-guard auth refresh
Pass --json when a command output is consumed by automation.
Use the global --project NAME_OR_ID filter when a command must be scoped to
one Enji project.
repo move uses global --project as source project or selector
disambiguation when needed. --to-project selects the destination project.
schedule controls automatic report-audit runs. It shows one row per
repo/report audit and can batch update all report audits for one repo or one
project. Account-wide schedule writes are intentionally rejected; pass REPO or
--project.
MCP
Local HTTP MCP service:
docker compose up -d --force-recreate --remove-orphans --wait
Endpoint:
http://127.0.0.1:8001/mcp
The Docker service starts a background cookie refresh loop. Keep
~/.config/enji-guard writable by the container user:
mkdir -p ~/.config/enji-guard
chown -R 1000:1000 ~/.config/enji-guard
chmod 700 ~/.config/enji-guard
Development
just verify
The completion gate includes Ruff, basedpyright, import-linter, Vulture, deptry, OpenAPI contract validation, CRAP <= 30 per function, tests, and Docker build.
Security Notes
Cookie auth is temporary and will be removed when API-token support is available from Enji. MCP HTTP transports do not add their own authentication; keep them bound to loopback or behind an explicit trusted boundary.
License
PolyForm Noncommercial License 1.0.0. Commercial use requires separate permission.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。