Archery MCP

Archery MCP

A read-only MCP server for Archery that enables secure instance query, ticket management, and restricted SQL execution through AI clients.

Category
访问服务器

README

Archery MCP

许可证:MIT

面向 Archery 的安全只读 Model Context Protocol Server。项目使用 Archery 用户名和密码认证,维护 Django Session 与 CSRF 状态,并向 AI 客户端提供实例查询、工单查询和受限 SQL 查询工具。

功能特性

  • 通过 Archery /authenticate/ 接口使用用户名和密码登录。
  • 自动处理 CSRF、复用 Session,并在会话过期后重新登录一次。
  • 使用 SQL AST 解析器对只读 SQL 做本地强校验。
  • 实例归属、查询权限、超时、行数限制、审计日志和数据脱敏继续由 Archery 服务端负责。
  • 不提供工单审批、变更 SQL 执行或任意 HTTP 代理工具。
  • 已在 Archery v1.14.0 上完成真实环境验证。

MCP 工具

工具 说明
archery_health 检查 Archery 连通性并识别版本
archery_login_status 验证配置的账号能否建立 Session
archery_list_instances 查询账号有权查看的实例,需要实例列表权限
archery_list_query_instances 查询账号可用于只读查询的实例
archery_list_databases 查询指定实例中的数据库
archery_query 执行一条受限只读查询,最多返回 5000 行
archery_export_query 将查询结果分批写入 CSV,默认不限制总行数
archery_list_workflows 查询当前账号可见的 SQL 工单
archery_workflow_status 查询工单状态
archery_workflow_detail 查询工单审核或执行明细

安装方式一:Windows EXE(推荐)

Windows 用户可以直接使用发布产物 archery-mcp.exe,无需安装 Python,也无需单独安装依赖。

MCP 客户端配置示例:

{
  "mcpServers": {
    "archery": {
      "command": "D:/tools/archery-mcp.exe",
      "env": {
        "ARCHERY_URL": "https://archery.example.com",
        "ARCHERY_USERNAME": "service-account",
        "ARCHERY_PASSWORD": "use-your-secret-store",
        "ARCHERY_VERIFY_TLS": "true",
        "ARCHERY_EXPORT_DIR": "D:/tools/archery-exports"
      }
    }
  }
}

EXE 使用标准输入输出与 MCP 客户端通信,因此不要直接双击运行。启动和停止由 MCP 客户端负责。

本地构建 EXE

维护者需要 Python 3.10 或更高版本执行构建,最终使用者不需要 Python:

.\build-exe.ps1 -Python python

脚本会依次安装构建依赖、执行全部单元测试、使用 PyInstaller 生成单文件 EXE,并通过真实 MCP stdio 握手检查全部工具。成功产物位于:

dist/archery-mcp.exe

GitHub Actions 中的“构建 Windows EXE”工作流支持手动触发,也会在推送 v* 标签时自动构建并上传 archery-mcp-windows-x64 Artifact。

安装方式二:Docker

使用方无需安装 Python,但需要安装 Docker。镜像使用标准输入输出传输 MCP 协议,因此必须使用 -i 保持 stdin 打开。

构建并验证镜像

Windows PowerShell:

.\build-docker.ps1 -Image archery-mcp:local -Python python

也可以手工执行:

docker build -t archery-mcp:local .
python scripts/smoke_test_docker.py archery-mcp:local

Docker MCP 客户端配置

下面的 -e ARCHERY_* 只传递变量名,实际值来自 MCP 客户端进程环境,不会出现在 Docker 命令行参数中:

{
  "mcpServers": {
    "archery": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "--read-only",
        "--tmpfs",
        "/tmp:size=64m,mode=1777",
        "--security-opt",
        "no-new-privileges:true",
        "-e",
        "ARCHERY_URL",
        "-e",
        "ARCHERY_USERNAME",
        "-e",
        "ARCHERY_PASSWORD",
        "-e",
        "ARCHERY_VERIFY_TLS",
        "-e",
        "ARCHERY_TIMEOUT",
        "-e",
        "ARCHERY_EXPORT_DIR",
        "--volume",
        "D:/tools/archery-exports:/exports",
        "archery-mcp:local"
      ],
      "env": {
        "ARCHERY_URL": "https://archery.example.com",
        "ARCHERY_USERNAME": "service-account",
        "ARCHERY_PASSWORD": "use-your-secret-store",
        "ARCHERY_VERIFY_TLS": "true",
        "ARCHERY_TIMEOUT": "30",
        "ARCHERY_EXPORT_DIR": "/exports"
      }
    }
  }
}

项目也提供 docker-compose.yml。在宿主机设置所需环境变量后,可以执行:

docker compose build
docker compose run --rm archery-mcp

不要使用缺少 -idocker run,否则容器无法接收 MCP 客户端发送的 stdio 消息。

安装方式三:Python

需要 Python 3.10 或更高版本。

git clone <仓库地址>
cd archery-mcp
python -m venv .venv

Windows PowerShell:

.\.venv\Scripts\python.exe -m pip install .

Linux 或 macOS:

./.venv/bin/python -m pip install .

环境变量

环境变量 说明
ARCHERY_URL Archery 根地址,例如 https://archery.example.com
ARCHERY_USERNAME 最小权限服务账号用户名
ARCHERY_PASSWORD 服务账号密码
ARCHERY_VERIFY_TLS 是否校验 TLS 证书,默认为 true
ARCHERY_TIMEOUT HTTP 超时时间,默认 30 秒,最大 120 秒
ARCHERY_EXPORT_DIR CSV 导出目录,Python/EXE 默认是当前目录下的 exports

Python 方式的 MCP 客户端配置

Windows 示例:

{
  "mcpServers": {
    "archery": {
      "command": "D:/path/to/archery-mcp/.venv/Scripts/python.exe",
      "args": ["-m", "archery_mcp.server"],
      "env": {
        "ARCHERY_URL": "https://archery.example.com",
        "ARCHERY_USERNAME": "service-account",
        "ARCHERY_PASSWORD": "use-your-secret-store",
        "ARCHERY_VERIFY_TLS": "true",
        "ARCHERY_EXPORT_DIR": "D:/path/to/archery-exports"
      }
    }
  }
}

不要将真实凭据提交到 Git。${ENV_VAR} 占位符是否生效取决于 MCP 客户端,建议通过客户端进程环境或密钥管理服务注入凭据。

查询安全

archery_query 只接受一条 SELECTWITH 或集合查询,并拒绝:

  • 多条 SQL;
  • 新增、更新、删除、DDL 和管理命令;
  • FOR UPDATE 等锁查询;
  • 文件导入、文件读取和文件导出操作;
  • sleepbenchmark 等延迟或资源消耗函数;
  • 普通查询超过 5000 行的返回请求。

分页导出

archery_export_query 适合导出超过 Archery 单次查询上限的数据。默认每页查询 5000 行,不限制总行数,并持续分页到 Archery 返回不足一页为止。工具不会把大量数据返回给 AI,而是流式写入 CSV,只返回文件路径、实际行数、分页次数和是否因显式限制而截断。

示例参数:

{
  "instance_name": "read-replica",
  "database": "example",
  "sql": "select id, name from account order by id",
  "page_size": 5000,
  "max_rows": 0,
  "filename": "accounts.csv"
}

多页导出要求 SQL 顶层包含稳定且尽量唯一的 ORDER BY,例如 order by id。传入 SQL 不能自行包含 LIMITOFFSET,分页条件由 MCP 统一生成。CSV 使用 UTF-8 BOM 以兼容 Excel,并对 =+-@ 等开头的文本增加前缀,降低 CSV 公式注入风险。

max_rows=0 表示不限制总行数;传入正数时可以主动设置本次导出上限。不限量导出可能持续占用 Archery 查询资源和本地磁盘,请确保 SQL 使用稳定排序,并监控导出目录容量。

导出文件只能写入 ARCHERY_EXPORT_DIR。Docker 模式必须把宿主机目录挂载到 /exports;Compose 默认将项目下的 exports 目录挂载进去。

CSV 可能包含敏感业务数据。请限制导出目录的操作系统访问权限,设置定期清理策略,不要把导出目录提交到 Git、打进镜像或暴露为公共下载目录。

本地 SQL 校验属于纵深防御,不能替代 Archery 或数据库权限。生产环境必须使用专用最小权限账号,优先关联只读数据库实例,并保持 Archery 的资源组、查询权限、超时、审计日志、行数限制和数据脱敏配置有效。

启用交互式 2FA 的账号无法用于机器登录。服务检测到 2FA 后会终止登录,应为 MCP 创建未启用交互式 2FA 的最小权限服务账号。

本地开发

python -m pip install -e ".[test]"
python -m pytest -q

提交代码前请阅读 贡献指南。安全问题请按 安全策略 处理。

许可证

本项目使用 MIT License。许可证文件保留标准英文法律文本。

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选