Archery MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Archery MCPlist query instances"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Archery MCP
面向 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 上完成真实环境验证。
Related MCP server: sqldb-mcp-server
MCP 工具
工具 | 说明 |
| 检查 Archery 连通性并识别版本 |
| 验证配置的账号能否建立 Session |
| 查询账号有权查看的实例,需要实例列表权限 |
| 查询账号可用于只读查询的实例 |
| 查询指定实例中的数据库 |
| 执行一条受限只读查询,最多返回 5000 行 |
| 将查询结果分批写入 CSV,默认不限制总行数 |
| 查询当前账号可见的 SQL 工单 |
| 查询工单状态 |
| 查询工单审核或执行明细 |
安装方式一: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.exeGitHub 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:localDocker 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不要使用缺少 -i 的 docker run,否则容器无法接收 MCP 客户端发送的 stdio 消息。
安装方式三:Python
需要 Python 3.10 或更高版本。
git clone <仓库地址>
cd archery-mcp
python -m venv .venvWindows PowerShell:
.\.venv\Scripts\python.exe -m pip install .Linux 或 macOS:
./.venv/bin/python -m pip install .环境变量
环境变量 | 说明 |
| Archery 根地址,例如 |
| 最小权限服务账号用户名 |
| 服务账号密码 |
| 是否校验 TLS 证书,默认为 |
| HTTP 超时时间,默认 30 秒,最大 120 秒 |
| CSV 导出目录,Python/EXE 默认是当前目录下的 |
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 只接受一条 SELECT、WITH 或集合查询,并拒绝:
多条 SQL;
新增、更新、删除、DDL 和管理命令;
FOR UPDATE等锁查询;文件导入、文件读取和文件导出操作;
sleep、benchmark等延迟或资源消耗函数;普通查询超过 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 不能自行包含 LIMIT 或 OFFSET,分页条件由 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。许可证文件保留标准英文法律文本。
Available Tools
10 toolsarchery_export_queryA
将只读查询分批导出为 CSV;默认每页 5000 行,不限制总行数。
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | ||
| schema | No | ||
| database | Yes | ||
| filename | No | ||
| max_rows | No | ||
| page_size | No | ||
| instance_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description bears full responsibility. It discloses key behavioral traits: read-only nature, batched export, default page size of 5000, and no limit on total rows. This goes beyond the schema by clarifying execution semantics. However, it does not mention how output is delivered (e.g., file path vs. content) or any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence. Every phrase adds value: read-only, export CSV, batching, default page size, and total row limit. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to spell out return values. It adequately covers the core behavioral aspects: batching, page size, unbounded rows. But it lacks information about how the CSV is returned or prerequisites like instance configuration, which are not covered elsewhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds minimal parameter meaning. It mentions page_size default and max_rows behavior ('默认每页 5000 行,不限制总行数'), but does not explain instance_name, database, sql, schema, or filename. Most parameter meanings (like instance_name) are not obvious, leaving the agent to guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description '将只读查询分批导出为 CSV' clearly states a specific verb (exporter), resource (read-only query), and output format (CSV) with a batching mechanism. It distinguishes from siblings like 'archery_query' which presumably returns raw results rather than exporting to CSV.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for read-only queries that need CSV export in batches, providing clear context but no explicit exclusion or alternative tool reference. It does not explicitly say 'use this instead of archery_query when...' but the purpose is transparent enough to infer selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archery_healthA
检查 Archery 是否可访问并返回版本;不执行登录。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It adds transparency by explicitly stating 'does not perform login' (no authentication side effect) and that it returns the version. This is useful, though it does not mention other potential behavioral aspects like read-only nature or error handling, but the simplicity of a health check makes this sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the action verb '检查', and includes only essential information: what it does and what it doesn't do. There is zero verbosity or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter health check with an output schema, the description fully covers purpose, non-login behavior, and expected return (version). The sibling tool names provide additional context, and the output schema handles return structure. No significant gaps exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is trivially 100%. The description clarifies the tool's function, which indirectly confirms there are no inputs to worry about. With 0 params, baseline is 4, and the description does not need to add parameter-specific details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('检查' / check) and clearly states the resource (Archery accessibility) and expected output (version). It distinguishes itself from sibling tools like archery_login_status by explicitly focusing on connectivity and version rather than login status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context for use: checking accessibility and version. It includes an explicit 'does not perform login' exclusion, which helps differentiate it from login-related tools. However, it does not explicitly name alternative tools or give positive when-to-use scenarios beyond the inherent purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archery_list_databasesB
查询指定可读实例中的数据库;实例归属由 Archery 校验。
| Name | Required | Description | Default |
|---|---|---|---|
| instance_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It uses '查询' which implies a read-only operation, and adds that instance ownership is validated by Archery, providing some context. However, it does not describe error handling, pagination, output format, or anything about side effects. It is minimally transparent but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short clauses, front-loading the core action and adding a validation note. Every word contributes value, with no fluff. It is highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple one-parameter tool with an output schema present, so the description does not need to explain return values. However, it lacks guidance on parameter sourcing and does not clarify what 'readable instance' means in terms of prerequisites or limitations. The description is adequate for a trivial tool but leaves some gaps in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero description coverage, so the description must compensate. The description mentions '指定可读实例' (specified readable instance), hinting that the instance_name parameter should refer to a readable instance and that ownership is checked. However, it does not explain where valid values come from (e.g., from archery_list_instances), nor does it provide any format or constraints beyond the schema's title. The semantic addition is minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: query databases in a specified readable instance. It uses a specific verb (查询) and resource (数据库), and specifies the target instance. However, it does not explicitly differentiate from sibling tools like archery_list_instances or archery_list_query_instances, though the focus on databases within an instance makes it reasonably distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: only for readable instances, and notes that instance ownership is verified by Archery. It does not explicitly mention when to use this tool instead of alternatives, nor does it provide exclusions or prerequisites (e.g., how to obtain valid instance names). The context is implied but not fully articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archery_list_instancesA
分页查询当前 Archery 账号有权查看的数据库实例。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| search | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses permission filtering and pagination behavior, which is useful, but it does not mention authentication requirements, side effects, or return format (though output schema exists). It adds some context beyond the schema but lacks explicit read-only confirmation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence that front-loads the verb and resource, with no extraneous words. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description captures the core purpose and scope, and an output schema exists to define returns. However, the missing search parameter explanation and lack of behavioral details (e.g., authentication, error conditions) leave the description incomplete for safe and correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. The term 'paginated' suggests limit and offset semantics, but the search parameter is left unexplained. The description does not clarify how search filters results, leaving ambiguity for the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a paginated query of database instances accessible to the current Archery account, specifying both verb and resource. The permission scoping and pagination help distinguish it from sibling tools like archery_list_query_instances and archery_list_databases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing accessible instances but does not explicitly state when to choose this over alternatives such as archery_list_query_instances or archery_list_databases. No when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archery_list_query_instancesA
查询当前账号所在资源组中允许只读查询的实例。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It uses '查询' (query), which strongly implies a read-only operation, and specifies the account/resource-group scoping. It does not mention side effects, auth requirements, or rate limits, but for a list operation this is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that immediately states the verb, object, and scope. There is no redundant information or filler, making it optimally concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple, parameterless list tool with an output schema available. The description fully explains what the tool returns and its scoping constraints. There are no missing details that would hinder an agent from invoking it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so per the rubric the baseline is 4. There are no parameters to explain, and the description still adds context about the implicit scope (current account's resource group and read-only-query eligibility).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('查询'/'query') and resource ('实例'/'instances'), and adds a precise scope: instances in the current account's resource group that allow read-only queries. This distinguishes it from the sibling 'archery_list_instances', which likely lists all instances without that filter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need instances that are permitted for read-only querying in the current account's resource group. However, it does not explicitly mention alternatives or when not to use it, providing only implied usage context rather than explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archery_list_workflowsC
分页查询当前账号有权查看的 SQL 工单。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| search | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It only mentions permission-based scoping and pagination, but fails to disclose other behaviors such as response format, sorting, rate limits, or implications of the search parameter. Safety profile is unaddressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence without wasted words. It conveys the core action and scope efficiently, fitting the conciseness criterion despite being under-specified in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a straightforward list operation, but the description leaves gaps: search semantics, pagination details, and permission behavior are implied but not elaborated. An output schema exists, reducing the need to explain return values, yet the description is still minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not compensate. Limit and offset are somewhat inferred from names, but 'search' is ambiguous—unclear whether it filters by ID, title, or content. No parameter meanings are clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('paginated query') and resource ('SQL workorders') with a scope ('current account has permission to view'). It distinguishes from sibling tools by resource type (workflows vs instances/databases), though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like workflow_detail or workflow_status. The description implies a list operation, but there are no explicit use-case instructions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archery_login_statusA
使用配置的用户名和密码登录,确认账号可用于 MCP。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It mentions using configured credentials and performing a login, but does not state whether this has side effects (e.g., creating a session), how failures are handled, or what the response indicates. This is a significant gap for a tool that performs an authentication action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that directly conveys the purpose and result. There is no wasted verbiage, and it is appropriately sized for a simple zero-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description is minimally functional. However, it does not mention prerequisites (e.g., whether credentials must be preconfigured) or how this tool relates to sibling archery tools, leaving some contextual gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema coverage is 100% (trivially). The description adds meaning by referencing 'configured username and password', implying server-side configuration rather than user-supplied arguments, which is useful context beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('login' with configured credentials) and the outcome ('confirm account can be used for MCP'), making it distinct from sibling tools that list or query resources. The verb 'login' and resource 'account' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'confirm account can be used for MCP' implies this tool is a prerequisite or validation step before using other archery tools, but it does not explicitly state when to use it versus alternatives, nor does it mention exclusions or preferred timing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archery_queryA
执行单条受限只读查询;最多返回 5000 行。
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | ||
| limit | No | ||
| schema | No | ||
| database | Yes | ||
| instance_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of transparency. It explicitly discloses that the operation is '只读' (read-only) and imposes a 5000-row maximum, which are key behavioral traits. However, it leaves '受限' (restricted) vague and does not mention potential errors or authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes essential information: execution type, read-only nature, single-query scope, and row limit. It is highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 parameters with zero schema descriptions and no annotations, so the description must cover more ground. It does cover the read-only constraint and row limit, and an output schema exists to explain return values. Yet it lacks parameter-level guidance and sibling differentiation, leaving the description merely adequate, not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter meanings. It mentions a 5000-row limit, vaguely related to the `limit` parameter, but does not explain `instance_name`, `database`, `schema`, `sql`, or the actual use of `limit`. The parameter names are somewhat self-explanatory, but the description fails to add meaningful detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description '执行单条受限只读查询;最多返回 5000 行' clearly states the tool executes a single restricted read-only query with a 5000-row limit. The specific verb '执行' and resource '查询' combined with the constraints distinguish it from sibling tools like archery_export_query, which likely handles larger or exported results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: use for a single, read-only query capped at 5000 rows. It does not explicitly name alternatives or exclusion criteria, such as when to prefer archery_export_query, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archery_workflow_detailB
查询一个有权查看的 SQL 工单审核或执行明细。
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the transparency burden. It mentions a permission requirement ('有权查看的') but does not disclose error behavior, authentication scope, or whether the operation is read-only. This is minimal behavioral disclosure for a query tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, front-loaded with the verb and resource. It is structurally efficient and easy to parse, earning a top score for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one required parameter) and has an output schema, so the description can rely on those for return details. However, it omits parameter semantics and usage context, and with no annotations, it remains only minimally viable for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero description coverage for the workflow_id parameter, and the description does not explain it at all. Although the parameter name is transparent, the description adds no meaning beyond the schema, failing to compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb '查询' (query) and clearly identifies the resource as 'SQL 工单审核或执行明细' (SQL workflow audit/execution details). It distinguishes this tool from siblings like archery_workflow_status and archery_list_workflows by focusing on detail retrieval for a single workflow. The mention of '有权查看的' (with permission to view) adds helpful scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as archery_workflow_status or archery_list_workflows. It does not mention exclusions or prerequisites beyond permission, so the agent receives no context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archery_workflow_statusB
查询一个有权查看的 SQL 工单当前状态。
| Name | Required | Description | Default |
|---|---|---|---|
| workflow_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description notes a permission requirement ('有权查看的') and the verb '查询' implies a read-only operation. However, it does not disclose other behaviors like error handling or response format, which would be expected given the lack of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that immediately states the action and target. There is no redundancy or unnecessary detail, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and an output schema, the description covers the core purpose, permission constraint, and read-only nature. However, it lacks any guidance on typical usage scenarios or edge cases (e.g., how to obtain workflow_id), so it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0% and the description does not explain the workflow_id parameter. Although the schema's title 'Workflow Id' provides some context, the description adds no additional meaning, failing to compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('查询' - query) and resource ('SQL 工单当前状态' - current status of SQL workflow). It specifies the scope as 'status' which is a distinct resource view, but it does not explicitly mention sibling tools like archery_workflow_detail, so it doesn't fully differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no mention of when to use this tool versus alternatives such as archery_workflow_detail. The phrase '有权查看的' implies a permission prerequisite, but it does not provide contextual guidance or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.1.0- First observed
archery_export_query - First observed
archery_health - First observed
archery_list_databases - First observed
archery_list_instances - First observed
archery_list_query_instances - First observed
archery_list_workflows - First observed
archery_login_status - First observed
archery_query - First observed
archery_workflow_detail - First observed
archery_workflow_status
TDQS
Scored across 10 tools
Most tools target distinct resources/actions, such as health, login, instance listing, querying, and workflow inspection. However, `list_instances` and `list_query_instances` overlap in scope (both list instances, with subtle permission differences), which could cause occasional misselection.
The `archery_` prefix is used consistently, and most listing tools follow a `list_` pattern. Minor deviations exist with `query`, `export_query`, and `workflow_status`/`workflow_detail`, which don't follow a strict verb_noun structure, but the names remain readable and predictable.
Ten tools provide a well-scoped set for interacting with Archery, covering health, authentication, instance discovery, querying, export, and workflow inspection without exceeding a manageable number.
The tool set covers the core read-oriented workflows: discovering instances/databases, running read-only queries, exporting results, and checking workflow status. Minor gaps exist, such as no tool for retrieving table schemas or creating SQL workflows, but these are acceptable for a read-focused MCP server.
Maintenance
Related MCP Connectors
Read-only MCP server for AIStatusDashboard status, incidents, metrics, and fallback recommendations.
Draxlr's remote MCP server connects AI assistants to your SQL databases and dashboards. Explore schemas, run read-only queries, manage saved queries and dashboards, and export results, all with row-level security so each user sees only their own data.
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
The HubSpot MCP Server acts as a bridge that enables AI assistants and Large Language Models to securely interact with HubSpot CRM data through natural conversation, without requiring users to understand complex API structures. It provides read-only access to standard CRM objects (contacts, companies, deals, tickets, products, invoices, and more) and their associations, secured via OAuth 2.0, allowing AI agents to perform tasks like summarizing deals, fetching company updates, and looking up record changes.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceRead-only SQL Server MCP server enabling safe database queries, table listing, and schema inspection with built-in security protections.MIT
- AlicenseAqualityAmaintenanceA read-only MCP server that exposes SQL database access to LLMs, supporting multiple database types, compact columnar results, pagination, and file export.617 npmMIT
- AlicenseNot gradedqualityCmaintenanceA read-only MCP server for exploring on-premises, multi-instance Microsoft SQL Server estates from AI clients, with read-only enforcement and Windows authentication support.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceA security-first, read-only MCP server for AI assistants to safely query MySQL, PostgreSQL, and Redis with layered safety checks.1MIT