Summary
Define how MCPAQL adapters name their tools to prevent collisions when multiple adapters run simultaneously, and specify annotation requirements for rich client display.
Problem
Every MCPAQL adapter currently exposes the same 5 tool names: mcp_aql_create, mcp_aql_read, mcp_aql_update, mcp_aql_delete, mcp_aql_execute. When multiple adapters are running (Apple Mail + GitHub + Slack), clients see multiple identically-named tools with no way to distinguish them. The LLM must guess which mcp_aql_read to call.
This is especially visible in Claude Desktop where only the tool name is prominently displayed, not the MCP server config name.
Proposal
1. Adapter-Scoped Tool Name Convention
The spec MUST define a tool naming template that includes the adapter identity. The canonical pattern:
{adapter}_mcpaql_{endpoint}
Examples:
apple_mail_mcpaql_read
apple_mail_mcpaql_create
github_api_mcpaql_read
github_api_mcpaql_execute
The mcpaql segment is the protocol brand — not aql (which collides with other query languages). The full mcpaql name MUST be used.
The adapter schema defines the tool name pattern:
tool_names:
pattern: "{adapter}_mcpaql_{endpoint}"
Template variables:
{adapter} — the adapter's name field, snake_cased
{endpoint} — one of: create, read, update, delete, execute
Single-adapter deployments MAY use the bare pattern mcpaql_{endpoint} (no adapter prefix) for backward compatibility, but this SHOULD be opt-in, not the default.
2. Annotation Requirements
Adapters MUST set the following MCP tool annotations:
| Annotation |
Requirement |
Example |
title |
MUST — human-readable adapter + endpoint name |
"Apple Mail — Read" |
readOnlyHint |
MUST — true for READ, false for others |
true |
destructiveHint |
MUST — true for DELETE and EXECUTE, false for others |
true |
idempotentHint |
SHOULD — true for READ, false for CREATE/EXECUTE |
true |
openWorldHint |
SHOULD — true for HTTP adapters, false for local/native |
false |
The title annotation is the primary display mechanism for rich clients. It SHOULD follow the pattern: "{Adapter Display Name} — {Endpoint}".
3. Generator Updates
The adapter generator MUST:
- Read
tool_names.pattern from the adapter schema (default: "{adapter}_mcpaql_{endpoint}")
- Generate tool registrations using the resolved names
- Set all required annotations on each tool
- Include the adapter display name in the
title annotation
4. Introspection
The introspect operation MUST include adapter identity:
{
"success": true,
"data": {
"_protocol": {
"version": "1.0.0",
"mode": "crude",
"adapter": "apple-mail",
"display_name": "Apple Mail"
},
"operations": [...]
}
}
Client Annotation Support (Current Landscape)
| Client |
title |
readOnlyHint |
destructiveHint |
Notes |
| Claude Code |
Supported |
Active (parallelization) |
Active (confirmation) |
Most mature |
| Claude Desktop |
Supported |
Active (auto-approval) |
Active (confirmation) |
Primary target |
| Cursor |
Unknown |
Unknown |
Unknown |
MCP support confirmed |
| Windsurf |
Unknown |
Unknown |
Unknown |
MCP support confirmed |
| Zed |
Unknown |
Unknown |
Unknown |
MCP support confirmed |
| Continue |
Unknown |
Unknown |
Unknown |
MCP support confirmed |
Branding Note
The protocol name is MCPAQL, not AQL. Tool names MUST use mcpaql (e.g., apple_mail_mcpaql_read), not aql (e.g., apple_mail_aql_read). AQL collides with ArangoDB's query language and other established uses.
Acceptance Criteria
References
Summary
Define how MCPAQL adapters name their tools to prevent collisions when multiple adapters run simultaneously, and specify annotation requirements for rich client display.
Problem
Every MCPAQL adapter currently exposes the same 5 tool names:
mcp_aql_create,mcp_aql_read,mcp_aql_update,mcp_aql_delete,mcp_aql_execute. When multiple adapters are running (Apple Mail + GitHub + Slack), clients see multiple identically-named tools with no way to distinguish them. The LLM must guess whichmcp_aql_readto call.This is especially visible in Claude Desktop where only the tool name is prominently displayed, not the MCP server config name.
Proposal
1. Adapter-Scoped Tool Name Convention
The spec MUST define a tool naming template that includes the adapter identity. The canonical pattern:
Examples:
apple_mail_mcpaql_readapple_mail_mcpaql_creategithub_api_mcpaql_readgithub_api_mcpaql_executeThe
mcpaqlsegment is the protocol brand — notaql(which collides with other query languages). The fullmcpaqlname MUST be used.The adapter schema defines the tool name pattern:
Template variables:
{adapter}— the adapter'snamefield, snake_cased{endpoint}— one of:create,read,update,delete,executeSingle-adapter deployments MAY use the bare pattern
mcpaql_{endpoint}(no adapter prefix) for backward compatibility, but this SHOULD be opt-in, not the default.2. Annotation Requirements
Adapters MUST set the following MCP tool annotations:
title"Apple Mail — Read"readOnlyHinttruefor READ,falsefor otherstruedestructiveHinttruefor DELETE and EXECUTE,falsefor otherstrueidempotentHinttruefor READ,falsefor CREATE/EXECUTEtrueopenWorldHinttruefor HTTP adapters,falsefor local/nativefalseThe
titleannotation is the primary display mechanism for rich clients. It SHOULD follow the pattern:"{Adapter Display Name} — {Endpoint}".3. Generator Updates
The adapter generator MUST:
tool_names.patternfrom the adapter schema (default:"{adapter}_mcpaql_{endpoint}")titleannotation4. Introspection
The
introspectoperation MUST include adapter identity:{ "success": true, "data": { "_protocol": { "version": "1.0.0", "mode": "crude", "adapter": "apple-mail", "display_name": "Apple Mail" }, "operations": [...] } }Client Annotation Support (Current Landscape)
Branding Note
The protocol name is MCPAQL, not AQL. Tool names MUST use
mcpaql(e.g.,apple_mail_mcpaql_read), notaql(e.g.,). AQL collides with ArangoDB's query language and other established uses.apple_mail_aql_readAcceptance Criteria
{adapter}_mcpaql_{endpoint}as default patternmcp_aql_*toolsReferences
docs/adapter/element-type.mddocs/adapter/generator.md