Veridise/audithub-mcp
GitHub: Veridise/audithub-mcp
连接 AI 编程助手与 AuditHub 区块链安全审计平台的 MCP 服务器,支持通过 LLM agent 启动扫描、查询审计结果并监控任务状态。
Stars: 22 | Forks: 0
# AuditHub MCP Server
此代码库包含 `audithub-mcp` 的源代码,这是一个用于
[AuditHub](https://audithub.veridise.com) 的 MCP server。
`audithub-mcp` 允许基于 LLM 的 agent 访问以下功能:
* 发现有关 AuditHub 组织和项目的信息
* 启动和监控 AuditHub tool 任务
* 访问 AuditHub 的 issues 和 findings
根据设计,该 MCP server 将功能限制为只读且非破坏性的。
可以通过配置文件启用其他功能。
## 前置条件
- Python 3.12+
- [uv](https://docs.astral.sh/uv/)
## 安装
`audithub-mcp` 作为一个 Python package 实现,但目前尚未在 PyPI 上提供。
您必须直接从此代码库安装。
### 全局安装
如果您使用的是 `uv` package manager,则可以使用 `uv` 安装 `audithub-mcp`:
```
uv tool install 'git+https://github.com/Veridise/audithub-mcp'
audithub-mcp --help
```
### 本地克隆
从代码库根目录开始:
```
uv venv
uv sync --active
```
如果您的虚拟环境已经激活,并且您只想运行
server entrypoint,请使用:
```
uv run audithub-mcp --help
```
## 使用 `audithub-mcp`
要使用 `audithub-mcp`,您需要配置两部分:您的 agent 和
`audithub-mcp` 配置文件。
两者都配置好后,agent 将自动启动 MCP server
并使用其工具。
### Agent 配置
要在您的 agent 中启用 `audithub-mcp`,您必须将其添加到您的 agent 的 MCP server
配置中。
以下示例假设 `audithub-mcp` 已在 `PATH` 中可用,并且
您的配置文件位于 `~/.config/audithub-mcp/config.yaml`。
* Codex CLI
* 对于交互式设置,请使用 `codex mcp add audithub-mcp`
* 如果您想使用配置文件进行设置,请将以下内容添加到您的 `.codex/config.toml` 中:
[mcp_servers.audithub-mcp]
command = "audithub-mcp"
args = ["--config", "~/.config/audithub-mcp/config.yaml"]
* Claude Code
* 对于交互式设置,请使用 `claude mcp add audithub-mcp audithub-mcp`
* 如果您想使用配置文件进行设置,请将以下内容添加到您的 `.claude/mcp.json` 中:
{
"mcpServers": {
"audithub-mcp": {
"command": "audithub-mcp",
"args": [
"--config",
"~/.config/audithub-mcp/config.yaml"
]
}
}
}
### MCP Server 配置
您将需要创建一个包含 `audithub-mcp` server
创建信息的 YAML 文件,并确保 agent 配置调用 `audithub-mcp` 时使用了
`--config ` 参数。
如果您不确定将配置文件放在哪里,建议的默认位置是
`~/.config/audithub-mcp/config.yaml`。
文件权限应设置为 `400`(所有者只读),因为它包含
凭证。
有关如何创建
配置文件的详细信息,请参阅[配置文档](./docs/configuration.md)。
## 可用的 MCP 工具
| 工具 | 描述 |
|---|---|
| `get_organizations` | 列出允许列表中的组织;传入 `details=true` 获取完整的组织记录,传入 `filter_id` 缩小结果范围 |
| `get_defi_vanguard_detectors` | 使用 Vanguard 列表块格式列出组织的所有 DeFi Vanguard detector |
| `get_projects` | 列出组织中允许列表里的项目;传入 `details=true` 获取完整的项目记录,传入 `filter_id` 缩小结果范围 |
| `get_versions` | 列出项目的版本;传入 `details=true` 获取完整的版本记录,传入 `filter_id` 缩小结果范围,传入 `latest_only=true` 仅获取最新版本 |
| `get_task_info` | 获取 AuditHub task 的状态和详细信息 |
| `get_task_artifacts` | 列出 AuditHub task 的已清理 artifact 元数据 |
| `get_task_artifact` | 通过 ID 获取 task artifact,内容为 base64 编码 |
| `get_task_logs` | 获取 task 一个或多个步骤的日志,并将每个结果写入本地输出文件 |
| `get_task_findings` | 获取 task 的 findings 并将其写入本地输出文件 |
| `wait_for_task_completion` | 轮询 task 直到没有待处理步骤或达到超时,然后返回最新的 task 快照和完成状态;如果没有超时,支持 task 的客户端可以将其作为 task 调用 |
| `parse_findings_from_task_log` | 将一个或多个 task 日志文件解析为包含 findings 及计数的 JSON,并写入本地绝对输出路径 |
| `get_version_comments` | 获取特定项目版本的评论 |
| `get_version_comment_threads` | 获取特定项目版本的评论线程 |
| `get_thread_comments` | 获取项目版本中特定线程的评论 |
| `get_project_issues` | 获取项目的所有 issue |
| `get_project_issue` | 获取项目中的特定 issue |
| `get_project_comments` | 获取项目跨所有版本的所有评论 |
| `run_orca_task` | 为项目版本启动 OrCa task;仅在显式启用 task 运行时注册 |
| `run_defi_vanguard_task` | 为项目版本启动 DeFi Vanguard task;仅在显式启用 task 运行时注册 |
| `create_version_from_file` | 通过上传本地 `.zip` 压缩包创建项目版本;仅在显式启用版本创建时注册 |
| `create_version_from_url` | 从 git 仓库或压缩包 URL 创建项目版本;仅在显式启用版本创建时注册 |
所有工具均返回由 `audithub-sdk` 模型支持的带类型的 Python 对象。
`get_organizations`、`get_projects` 和 `get_versions` 返回的对象
仅公开属于已配置允许列表中组织/项目的条目。
## 安全模型
- **默认只读。** 默认工具命名为 `get_*`,并且仅调用生成的 `audithub-sdk` GET endpoint。
- **Task 完成轮询。** `wait_for_task_completion` 会重复获取 task 详细信息,直到没有待处理步骤或达到超时,然后返回带有布尔完成标志的最新已清理 `Task` 快照。当支持 task 的客户端在无超时的情况下调用时,它可以作为 task 运行,而不是阻塞请求。
- **可选的 OrCa task 执行。** 仅在提供 `AH_ENABLE_TASK_RUNS=1` 或 `--enable-task-runs` 时才会注册 `run_orca_task` mutation 工具。它通过 `audithub-sdk` 调用生成的 OrCa POST endpoint。
- **可选的 DeFi Vanguard task 执行。** `run_defi_vanguard_task` mutation 工具在同一 task 运行可选开关下注册。其输入在顶层被展平:`organization_id`、`project_id`、`version_id`、detector 选择以及 runtime 选项。将 detector 选择作为包含两个元素的 JSON 数组 `[type, id]` 传递,其中内置选择器使用来自 `get_defi_vanguard_detectors` 的内置 detector 代码,自定义选择器使用同一工具显示的目录 ID。server 在调用生成的 DeFi Vanguard v2 POST endpoint 之前,会通过后端 detector 目录解析这些选择。
- **链上 OrCa 模式。** 在针对已部署的合约启动 OrCa 时,请将 `deployment_info_file` 作为以 `.deployment.json` 结尾的路径传递。server 会将其标准化为 `on_chain=True` 并提前拒绝不匹配的路径,以便调用者不会意外启动本地 Foundry 风格的运行。
- **可选的版本创建。** 仅在提供 `AH_ENABLE_VERSION_CREATION=1` 或 `--enable-version-creation` 时才会注册 `create_version_from_url` mutation 工具。它通过 `audithub-sdk` 调用生成的项目版本 URL POST endpoint。
- **本地 findings 解析。** `parse_findings_from_task_log` 实用工具读取一个或多个本地 task 日志文件,使用共享的日志解析器提取 findings,并写入包含已解析 findings 以及 findings 总数和每个日志计数的 JSON 文件。它不会调用 AuditHub API。
- **Detector 目录缓存。** DeFi Vanguard v2 内置 detector 列表是从 AuditHub 配置 endpoint 惰性获取的,并在进程内缓存一天。自定义 detector 在每次请求时从组织库和标准库中实时获取。
- **Detector 列表格式。** `get_defi_vanguard_detectors` 为每个 detector 返回一个块。每个块以 `detector: ` 开始,其中 `` 是与 `DefiVanguardV2DetectorSelectionInput` 匹配的 JSON 值,后跟 `title:`。标准库的自定义 detector 还包含从 detector payload 加载的 `description:`。每个块以 `------` 结束。
- **凭证隔离。** OIDC 凭证在启动时从环境中读取一次,并传递给 `audithub_sdk_ext.AuthenticatedApiClient`。它们永远不会被接受作为工具参数,也不会出现在工具输出或已清理的错误消息中。
- **ID 允许列表。** Server 拒绝访问任何其数字 ID 未明确包含在 `AH_ALLOWED_ORG_IDS` / `AH_ALLOWED_PROJECT_IDS` 中的组织或项目。该检查在任何网络请求之前运行。
- **仅限 SDK 传输。** 所有 AuditHub 交互均通过 `audithub-sdk` 和 `audithub_sdk_ext` 进行;MCP server 中没有原始 HTTP 辅助程序。
## 开发工作流
- 运行测试:`uv run pytest`
- 类型检查:`uv run mypy`
- Lint:`uv run ruff check`
- 格式化代码:`uv run ruff format`
### 在本地覆盖 `audithub-sdk`
要针对 `audithub-sdk` 的本地检出测试 `audithub-mcp`,请在根目录的 [`pyproject.toml`](./pyproject.toml) 中添加路径源
覆盖,然后重新同步
环境。
根目录 `pyproject.toml` 覆盖示例:
```
[tool.uv.sources]
audithub-sdk = { path = "/absolute/path/to/audithub-sdk", editable = true }
```
然后运行:
```
uv sync --active
```
要返回固定版本,请从
`[tool.uv.sources]` 中移除 `audithub-sdk` 条目,然后再次运行 `uv sync --active`。
## 许可证
[Apache 2.0](./LICENSE)
标签:AI代理集成, LLM工具, MCP服务器, Python, 区块链安全, 无后门, 智能合约审计, 逆向工具