MCP-AQL
CRUDE semantic endpoints for LLM-native control.
Most MCP servers expose a flat list of tools. DollhouseMCP uses MCP-AQL instead, grouping operations by what they do to state so the AI gets semantic clarity before it acts.
| Endpoint | Purpose | Permission level |
|---|---|---|
| Create | Add new elements, install from the Collection, add memory entries | Confirm once per session |
| Read | List, search, get details, activate, introspect | Auto-approved |
| Update | Edit existing elements | Confirm each time |
| Delete | Remove elements, clear entries | Confirm each time |
| Execute | Run agents, manage execution lifecycle, confirm operations | Confirm each time |
Endpoint modes
| Mode | Endpoints | Tokens | Env variable | Best for |
|---|---|---|---|---|
| CRUDE | 5 | ~4,300 | MCP_AQL_ENDPOINT_MODE=crude |
Default semantic grouping with host-level permission control |
| Single | 1 | ~350 | MCP_AQL_ENDPOINT_MODE=single |
Constrained multi-server environments |
| Discrete | ~40 | ~29,600 | MCP_INTERFACE_MODE=discrete |
Backward compatibility with older tool naming |
Why CRUDE matters
-
Semantic clarity
The model knows that read calls are safe and delete calls are destructive without guessing from dozens of tool names.
-
Progressive disclosure
The AI starts with a small endpoint surface and discovers operations, parameters, and formats through introspection.
-
Token efficiency
The consolidated interface is dramatically lighter than exposing the entire discrete tool catalog up front.
-
Better host policies
MCP clients can apply different approval rules per endpoint because the operation intent is already grouped.
Representative operations by endpoint
| Endpoint | Representative operations |
|---|---|
| Create | create_element, addEntry, install_collection_content, submit_collection_content, record_execution_step |
| Read | list_elements, search_all, search_collection_enhanced, open_portfolio_browser, convert_skill_format, get_relationship_stats |
| Update | edit_element, upgrade_element |
| Delete | delete_element, clear, clear_github_auth |
| Execute | execute_agent, complete_execution, continue_execution, prepare_handoff, resume_from_handoff, approve_cli_permission |
{ "operation": "introspect", "params": { "query": "operations" } }
{ "operation": "introspect", "params": { "query": "format", "name": "persona" } }
The same progressive-disclosure principle applies to elements themselves: metadata in frontmatter gives the model a quick scan of what exists, and the full markdown body is only loaded when the element is activated or inspected more deeply.
MCP-AQL is not just a naming layer. It is the structure that lets the server describe itself at runtime while keeping permission behavior legible to both the LLM and the human operator.