Skip to main content
Glama

Server Details

Exact, shared memory for multiple AI agents. Azquo is a hierarchical database: each fact is stored once in hierarchies that always total correctly, every write is attributed to the agent and person behind it, and any figure can be traced back to the file and cell it came from. There is no schema to design first - agents build and reorganise the structure themselves - and people work with the same data live in Microsoft Excel. Suited to finance and insurance work, where figures must stand up to review.

Ownership verified
Status
Healthy
Uptime
99.6% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A4.1/5.0

Scored across 41 tools

Disambiguation4/5

Tools are largely partitioned by resource and action: database lifecycle, names/sets/attributes, AQL values, imports, reports, documents, and history. The few apparent overlaps (get_report_data/open_in_browser, list_reports/list_database_sheets) are explicitly scoped in their descriptions.

Naming Consistency4/5

Most names use predictable snake_case verb_noun or verb_object patterns, but there are deviations such as aql_write vs query_aql, noun-first current_business/history_settings/name_history, and open_in_browser/try_on_copy. The convention is still readable and mostly consistent.

Tool Count2/5

41 tools is heavy and exceeds the 25+ threshold, making discovery and selection costly even for a complex domain. The broad Azquo surface justifies many operations, but the set could be consolidated or staged to reduce cognitive load.

Completeness4/5

The surface covers database lifecycle, model discovery/editing, values read/write, imports, reports/workbooks, documents, audit/history, library copies, and users. Minor gaps remain around creating/updating reports or import templates and managing users/external connections, but core agent workflows are well covered.

Available Tools

41 tools
apply_structureApply structureA
Idempotent
Inspect

Add parent → child relations between names. Idempotent: existing links stay; new ones are added. With createMissing=true (default) names are auto-created if not found. Returns: applied, alreadyLinked, namesCreated (the names that didn't exist before), namesResolved (every child in input order with its resolved id — use to chain into edit_name_attributes).

═══ PROVENANCE — required on every write ═══ source: origin reference (file/URL/document/short note). Lands in the audit trail. agent: your AI agent name (e.g. "Claude"). Lands in the audit trail.

NameRequiredDescriptionDefault
agentYesAI agent name (e.g. "Claude"). REQUIRED.
sourceYesOrigin reference — file, URL, document, or short note. REQUIRED.
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name
relationsYesNon-empty array of {parent, child} pairs
createMissingNoAuto-create names that don't exist (default: true)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (idempotentHint, destructiveHint=false, readOnlyHint=false), and the description adds real side-effect detail beyond them: how idempotency actually behaves, that names get silently auto-created, and that source/agent land in an audit trail. It omits error modes and what happens with cycles or missing parents when createMissing=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and idempotency, then a compact Returns block, then a clearly delimited PROVENANCE section. Slightly dense in the returns enumeration, but every sentence carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly supplies the return fields and their meaning. Provenance requirements for this write are spelled out. Missing only edge-case behavior (invalid parent with createMissing=false, error shape), which keeps it from full completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3, but the description adds meaning the schema lacks — specifically that source and agent go into the audit trail and are mandatory on every write, which clarifies why they are required. It does not touch the business parameter, so it is not fully additive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Add parent → child relations between names'. It also names the sibling it hands off to (edit_name_attributes), so the agent can distinguish this hierarchy-building tool from attribute-editing tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operative context: idempotent behavior, the createMissing default that changes what gets written, and the follow-up workflow via namesResolved → edit_name_attributes. It stops short of explicit when-not-to-use guidance or naming alternative tools for overlapping goals.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

aql_writeWrite values with AQLA
Destructive
Inspect

Write a 2D region of values into an Azquo database using the same AQL grammar as query_aql. AQL reference: https://www.azquo.com/connect/#aql

Mirrors the read shape — rowHeadings × columnHeadings × context — and adds a 2D values array. The cell at values[r][c] is anchored to the union of rowHeadings[r] + columnHeadings[c] + context, exactly as a read at the same coordinates would resolve.

Two modes, distinguished by options.createNames:

Case 1 — TRANSACTIONAL find-or-create. Caller supplies options.rowSet + options.rowLanguage (and/or columnSet + columnLanguage) + createNames: true. Unresolved row/column headings are FIND-OR-CREATED under the target set with the language attribute set. Arrow form: rowSet = "A->B" puts new names into B as a child of A (chain is auto-created if missing). Use for: importing new transactions, customers, or any entity whose ID column is the row heading.

Case 2 — MULTI-FACETED all-or-nothing (default; createNames: false). Every heading must resolve to an existing name. Any miss is fatal — no values land. Use for: writing into a pre-structured region where the names are already known.

Structure-only mode: omit values (or pass []). The call resolves the headings, find-or-creates names if createNames=true, but writes no values. Equivalent to declaring hierarchy.

For date columns where the duplicate-name trap applies, use options.rowLanguage = "date" (bare attribute name, no "language" prefix). rowLanguage / columnLanguage always take the literal attribute name verbatim.

createNames and ignoreHeadingErrors are mutually exclusive — supply at most one.

═══ PROVENANCE — required on every write ═══ source: origin reference (file/URL/document). Lands on Provenance.name in the audit trail. agent: your AI agent name (e.g. "Claude"). Lands on Provenance.method.

NameRequiredDescriptionDefault
agentYesAI agent name (e.g. "Claude"). REQUIRED.
sourceYesOrigin reference — file, URL, document, or short note. REQUIRED.
valuesNo2D array of cell values (string | number | boolean | null). Omit or [] for structure-only mode.
contextYesContext expressions as a 2D array — use [[]] if no context needed
optionsNoEngine options — see query_aql for the full shape. Adds rowSet/columnSet/createNames for AQL-write.
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name to write into
rowHeadingsYesRow heading expressions as a 2D array of strings
columnHeadingsYesColumn heading expressions as a 2D array of strings

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive/non-idempotent/write, and the description adds real behavioral context: the all-or-nothing 'any miss is fatal — no values land' failure mode, find-or-create semantics, required provenance landing on Provenance.name/method in the audit trail. It does not state whether existing cell values are overwritten/replaced, which is a genuine gap for a destructive write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but appropriately so for a 9-param, two-mode, nested-option write tool. Core purpose is front-loaded, then modes, edge cases, and provenance are sectioned with headers and zero filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex mutation with no output schema it covers modes, failure semantics, mutual exclusions, and provenance thoroughly. The one omission is what a successful call returns (cells written, names created), which an agent would want without an output schema to consult.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3), but the nested options object is only described as 'see query_aql for the full shape.' The description compensates with genuine semantics: createNames modes, rowSet/columnSet, the 'A->B' arrow form and auto-created chains, and the verbatim-attribute 'date' trap for rowLanguage/columnLanguage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource+mechanism: 'Write a 2D region of values into an Azquo database using the same AQL grammar as query_aql.' It explicitly differentiates from the read sibling by naming query_aql and stating it mirrors its shape, so the agent can tell read from write without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use routing: Case 1 (createNames:true) is flagged for 'importing new transactions, customers, or any entity whose ID column is the row heading'; Case 2 (default) for 'writing into a pre-structured region where the names are already known.' It also names the structure-only mode and the createNames/ignoreHeadingErrors mutual exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

audit_cellTrace where a value came fromA
Read-only
Inspect

Explain where one value in a query_aql result came from: the provenance (which import, file, user or write, and when) of every stored value behind the cell, and the calculation if the cell is a function or a total. Read-only. Use it when a number looks wrong or the user asks "where does this figure come from?". For the history of a name's attributes and set membership use name_history instead.

Call it with exactly the rowHeadings, columnHeadings and context you passed to query_aql (the query is re-run to locate the cell), plus the zero-based row and col of the cell in that result's rows array. Example: after query_aql returned rows[2][0] = 1250, pass the same three arrays with row 2, col 0.

Returns headline (the cell and its headings), function (the formula, when calculated) and auditForDisplayList - one entry per provenance: user, method, name (the source, e.g. the file), date, context and the values it supplied (capped at 1000). Returns {message: "cell not found"} when row/col is outside the result. Earlier, overwritten values show only while the database records history (history_settings).

NameRequiredDescriptionDefault
colYesZero-based column index of the cell to audit
rowYesZero-based row index of the cell to audit
contextYesContext expressions exactly as passed to query_aql - [[]] if that query had none
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name, as used for the query_aql call
rowHeadingsYesRow heading expressions exactly as passed to query_aql, e.g. [["`Products` children"]]
columnHeadingsYesColumn heading expressions exactly as passed to query_aql, e.g. [["Sales"], ["Jan", "Feb"]]

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the 'Read-only' sentence is redundant, but the description adds real behavior: the query is re-run to locate the cell, provenance values are capped at 1000, a {message: "cell not found"} result for out-of-range row/col, and that overwritten values only surface while history_settings records history. Only permissions/auth context is unstated, so 4 rather than 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then call pattern, then return shape and edge cases — a sensible order. It is long and the 'Read-only' clause repeats the annotation, but nearly every sentence carries information an agent needs (call pattern, example, error case, history caveat).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description carries the return contract itself (headline, function, auditForDisplayList with per-provenance fields) and covers the failure mode and history dependency. An agent has everything needed to call and interpret this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds semantics the schema does not: rowHeadings/columnHeadings/context must be passed exactly as in the original query_aql call because the query is re-run, and it works through a concrete example (rows[2][0] = 1250 → row 2, col 0). The database param is merely implied by 'the same three arrays' framing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Explain where one value in a query_aql result came from', and enumerates exactly what it resolves (import, file, user or write, and when, plus the calculation). It also names the sibling it is not for, name_history, so an agent can separate the two without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit trigger ('Use it when a number looks wrong or the user asks "where does this figure come from?"') plus an explicit alternative and its condition ('For the history of a name's attributes and set membership use name_history instead'). This is the full when-to-use / when-not-to-use pattern.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

copy_azquo_skillsCopy Azquo skillsA
DestructiveIdempotent
Inspect

Copy azquo_skills (the Azquo usage-skills database) from data.azquo.ai into the current business, so a local or offline Azquo has its own copy. Call it again later to refresh. ASK THE USER FIRST: confirm 'Copy azquo_skills from data.azquo.ai into ?' and wait for a yes. A database already called by the target name is REPLACED, and any local edits to it are lost, so say so when list_databases shows one already there. Use current_business to name the target in that question. No key is needed: the server fetches with the public read-only key.

NameRequiredDescriptionDefault
targetNoName for the local copy. Default azquo_skills.
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by naming exactly what is destroyed (a database already called by the target name is REPLACED and local edits are lost) and what auth situation applies (no key needed; the server uses the public read-only key). It also explains the idempotent/refresh semantics in user-facing terms. Note the mild tension with openWorldHint=false, since the copy is fetched from the remote host data.azquo.ai, but the endpoint is fixed and read-only, so this reads as an in-ecosystem fetch rather than a genuine contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the action and the source, then the mandatory user-confirmation step, then the destructive caveat. Dense but almost every sentence carries a distinct instruction; the refresh sentence and the key sentence are minor restatements but earn their place for a destructive, externally-sourced operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, safety, auth, refresh and the sibling lookup needed before calling, which is complete for a two-parameter tool with no output schema. The only gap is that it never hints at what a successful copy returns or how long it takes, which an agent might want given no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (target and business) are already documented in the schema, making 3 the baseline. The description does add one useful cross-tool cue - use current_business to obtain the name for the confirmation question - but it does not explain the default or formatting of target beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (copy), a specific resource (azquo_skills, glossed as the Azquo usage-skills database) and the exact source (data.azquo.ai into the current business). This is enough to separate it from siblings like copy_from_library or create_database without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use (local/offline Azquo needs its own copy), when-to-repeat (call again later to refresh), a required pre-condition (ask the user first and wait for a yes, with the exact confirmation wording), and a conditional check against list_databases when a same-named database already exists. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

copy_from_libraryCopy from libraryAInspect

Copy one database from the shared Azquo library into the current business, with its reports, import templates and uploaded file types. ASK THE USER FIRST: confirm 'Copy into ?' and wait for a yes before calling this — never copy speculatively or as a side effect of a browse request. Use current_business to name the target in that question, and list_library for the available database names. Nothing is ever overwritten: if the name is already taken in the target business the copy lands as 'name_1', 'name_2', and so on. Always tell the user the target name from the result, which is the name the database is actually stored under and may differ from the one they asked for — database names are sanitised, so spaces become underscores and punctuation is dropped.

NameRequiredDescriptionDefault
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesName of the library database to copy, exactly as returned by list_library.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (readOnlyHint=false, idempotentHint=false, destructiveHint=false): it discloses that nothing is ever overwritten and that collisions become 'name_1', 'name_2', that names are sanitised (spaces to underscores, punctuation dropped), and that the returned `target` may differ from what the user asked for. These are exactly the mutation-side facts an agent needs before invoking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then the confirmation protocol, then behavior, then output guidance — every sentence carries distinct information. It is on the long side for a two-parameter tool, with a couple of clauses that could be tightened, but nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden of explaining the return value and it does so, telling the agent to report the `target` name from the result and why it may differ. Combined with the collision and sanitisation rules, an agent has everything needed to call this safely and report the outcome accurately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is already 100%, so the baseline is 3, but the description adds real meaning by tying values to sibling tools (list_library for valid database names, current_business to name the target business) and by explaining the naming/sanitisation semantics that determine what the stored name will be. It doesn't add format constraints for the `business` param itself, which is why it isn't a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Copy one database from the shared Azquo library into the current business') plus the payload that comes along with it (reports, import templates, uploaded file types). This clearly separates it from siblings like create_database, try_on_copy, and copy_azquo_skills without needing to open their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when/when-not guidance: confirm 'Copy <database> into <business>?' with the user and wait for yes, and never copy speculatively or as a side effect of a browse request. It also routes the agent to the right sibling tools for each input (current_business for the target, list_library for the source names).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_databaseCreate databaseAInspect

Create a new, empty Azquo database in the current business (see current_business). Use it to start a new model from scratch; to start from a ready-made one use copy_from_library, and to experiment on an existing database use try_on_copy. Needs an administrator or developer; the creator becomes its owner.

The name is cleaned: spaces become underscores and anything other than letters, digits and underscores is dropped ("Sales 2026!" becomes Sales_2026). Fails with database_create_failed if a database of that name already exists in the business - check list_databases first.

databaseServerId: usually left out - the database then goes on the default server, the one the admin site's New database offers first. Give it only to choose a particular server; an unknown id fails with unknown_databaseServerId and the error lists the valid ids.

Returns the new database record: id, name (as cleaned), persistenceName, databaseServerId and its counts (all zero). Next steps are usually apply_structure or import_file, then persist_database.

NameRequiredDescriptionDefault
nameYesName for the new database, e.g. Sales_Forecast. Letters, digits and underscores; spaces become underscores
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseServerIdNoOptional. Integer id of the database server, as a string, e.g. "0". Leave out to use the default server

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: role requirement, ownership effect, name-sanitization rules with a worked example, two named failure modes, and the default-server behavior. Annotations already cover safety (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the bar is lower, but the failure semantics go well beyond them. It stops short of saying whether creation is reversible or what happens to the caller's session context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded — purpose then alternatives then parameter notes then return value, in a predictable order. It runs long (~190 words) and repeats some name-cleaning detail already in the schema, but each paragraph carries usable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by naming the returned fields (id, name, persistenceName, databaseServerId, zero counts) and suggesting next steps (apply_structure, import_file, persist_database). For a 3-parameter creation tool, an agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning: databaseServerId is 'usually left out', resolves to the default the admin site offers first, and an unknown id fails with a listing of valid ids. The name-cleaning example ('Sales 2026!' becomes Sales_2026) also clarifies the transform beyond the schema's one-liner.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb + resource + scope ('Create a new, empty Azquo database in the current business') and immediately contrasts with the two relevant siblings, copy_from_library and try_on_copy. An agent can distinguish this from all 38 siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use routing ('start a new model from scratch' vs 'ready-made one' vs 'experiment on an existing database'), plus a prerequisite (check list_databases first to avoid the create_failed collision) and a permissions condition (administrator or developer). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

current_businessShow current businessA
Read-only
Inspect

Return the currently effective business and user for this MCP session, and whether an acting-as override is in effect. Use before any destructive action.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful non-schema context — that the result is session-scoped and may include an acting-as override — but it does not explain what an acting-as override implies or what calling this changes (it changes nothing, which is worth stating).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, tightly written, with the return contents front-loaded and the usage instruction trailing. Every clause carries information and nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters and no output schema, the description carries the whole burden of describing what comes back, and it does so in prose (business, user, acting-as state). There is no missing prerequisite or return-shape ambiguity for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline of 4 applies. There is nothing for the description to disambiguate beyond the fact that the call requires no arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a precise verb and three distinct return subjects (current business, current user, acting-as override state) scoped to 'this MCP session'. An agent can distinguish it immediately from siblings like list_businesses or switch_business, which enumerate or mutate businesses rather than report context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states an explicit triggering condition: 'Use before any destructive action.' That is concrete guidance. It falls short of 5 because it never names the alternative it complements (switch_business, apply_structure) or contrasts when to read context versus switch it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_databaseDelete databaseA
DestructiveIdempotent
Inspect

Permanently delete an Azquo database by name, with all its names, values and history. NOT REVERSIBLE - there is no restore, and its backups are deleted too. Do not call without the user explicitly asking for this database to be deleted; confirm the name and the business (current_business) with them first. To remove a few names use delete_name (restorable with restore_name); to test changes safely use try_on_copy.

Also removed: reports left linked to no other database or user, its import template if no other database uses it, its upload history, pending uploads and uploaded source files. Reports and templates shared with other databases are kept.

Needs an administrator of the business, or the developer who owns the database; the name must be exact (list_databases). Errors database_not_found for an unknown name. Returns {deleted: true, name} - also when a developer who does not own it is refused silently, so confirm with list_databases afterwards.

NameRequiredDescriptionDefault
nameYesExact name of the database to delete, as shown by list_databases, e.g. Sales_Forecast
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint and non-reversibility, but the description adds cascading deletions (linked reports, import template if unused, upload history, pending uploads, source files) and what is kept, permission requirements (admin or owning developer), and the dangerous silent-refusal behavior that still returns {deleted: true}. This is rich context well beyond the structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the irreversible destructive nature, then proceeds in logically grouped blocks: alternatives, cascade effects, permissions, errors, return value. Despite the length, each sentence carries operational weight for a destructive, side-effecting tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a destructive, cascading operation with no output schema, the description covers permissions, error behavior, the silent-refusal trap, and even the return shape. Nothing an agent needs to call this safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already fully documented in the schema. The description reinforces exact-name matching and the business parameter, but adds little syntax or meaning beyond what the schema and its descriptions already provide — the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Permanently delete an Azquo database by name') and enumerates the full scope of what is removed. It explicitly differentiates from siblings delete_name and try_on_copy, so an agent can select correctly without opening other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when/when-not guidance ('Do not call without the user explicitly asking... confirm the name and the business first') and names the alternatives (delete_name for a few names, try_on_copy for safe testing) with the condition that selects them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_import_templateDelete import templateA
DestructiveIdempotent
Inspect

Permanently delete one import template (the workbook of rules that interprets incoming data files) and its file on disk. NOT REVERSIBLE - there is no restore; read it first with read_workbook if its rules may be wanted again. Do not delete without the user asking for it.

Get the id from list_import_templates. Administrators only, and only templates in the current business. A database that used the template is not updated and still points at the deleted id, so imports into it lose those rules; list_database_sheets shows which template each database uses.

Returns {deleted: true, id}. That is returned even when nothing was removed (unknown id, other business, or not an administrator), so call list_import_templates afterwards to confirm it has gone.

NameRequiredDescriptionDefault
idYesNumeric import template id, as returned by list_import_templates, e.g. 42
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true, but the description adds substantial context beyond them: irreversibility with no restore, deletion of the on-disk file, the authorization scope, the downstream effect that referencing databases keep pointing at a dead id and lose those rules, and the critical quirk that {deleted: true, id} is returned even when nothing was removed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the destructive warning, then prerequisites, side effects, and return caveat in a logical order. Every sentence carries information, though the return-value caveat and the database-pointer consequence make it longer than a typical tool description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no output schema, the description supplies the missing return-value semantics ({deleted: true, id}) including the false-success caveat, plus auth scope and side effects. Nothing an agent needs to call this safely is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both id and business are already documented in the schema. The description only restates that the id comes from list_import_templates and does not add format or edge-case detail beyond what the schema provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (delete) and resource (import template), and defines what the resource actually is: 'the workbook of rules that interprets incoming data files'. This distinguishes it cleanly from siblings like delete_database, delete_report and delete_name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when/when-not guidance: read first with read_workbook if the rules may be wanted, and 'Do not delete without the user asking for it.' It also names list_import_templates for obtaining the id and constrains usage to administrators in the current business.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_nameDelete nameA
DestructiveIdempotent
Inspect

Delete a name from the database. Its values are deleted with it, as are the documents and images uploaded to it with create_upload_link (the response's documentsDeleted says how many) - those cannot be brought back. The name itself can: restore_name returns it, with its attributes, sets and children, as a new name (find it with list_deleted_names). Looks up by integer nameId — the id returned in apply_structure's namesResolved, or surfaced by describe_set / describe_query. Returns 404 if no name matches the id.

═══ PROVENANCE — required on every write ═══ source: origin reference (why this name is being deleted — usually a ticket, note, or upstream document). Lands in the audit trail. agent: your AI agent name (e.g. "Claude"). Lands in the audit trail.

NameRequiredDescriptionDefault
agentYesAI agent name (e.g. "Claude"). REQUIRED.
nameIdYesInteger id of the name to delete (from apply_structure namesResolved, describe_set, describe_query, etc.)
sourceYesOrigin reference — file, URL, document, or short note explaining the deletion. REQUIRED.
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true, but the description goes well beyond them: it names exactly what is destroyed (values, uploaded documents and images, with the response's documentsDeleted count), states that those cannot be brought back, explains that the name itself can be restored as a NEW name via restore_name, and documents the 404 on a missing id plus the mandatory audit provenance.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the destructive effect and the recovery path, then the lookup mechanics, then a clearly headed provenance block. Every element earns its place, though the prose is somewhat long for a five-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by describing the response field documentsDeleted and the 404 failure mode. Combined with the cascade/restore semantics and the required provenance fields, an agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds rationale the schema lacks: why nameId is an integer and where it comes from, and the audit-trail purpose of source/agent, including a concrete example for the agent name. It slightly duplicates schema text but reinforces the semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (delete a name) and immediately distinguishes its effect: values, documents and images uploaded via create_upload_link are destroyed while the name itself is recoverable. An agent can tell exactly what this does versus edit_name_attributes or restore_name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for use — look up by integer nameId sourced from apply_structure/describe_set/describe_query — and points to restore_name and list_deleted_names for recovery. It does not spell out an explicit when-not-to-use case, but no sibling performs the same deletion, so the guidance is effectively complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_reportDelete reportA
DestructiveIdempotent
Inspect

Permanently delete one online report (an Excel report users run in Azquo): its workbook file, its menu entries, its external data requests and its schedules. NOT REVERSIBLE - unlike delete_name there is no restore; read it first with read_workbook if its layout may be wanted again. Do not delete without the user asking for it. The databases the report showed are not touched.

Get the id from list_reports. Needs an administrator, or the developer who uploaded the report. Errors report_not_found when the id is not one of the reports list_reports shows you. Returns {deleted: true, id}.

NameRequiredDescriptionDefault
idYesNumeric report id, as returned by list_reports, e.g. 17
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds substantial context beyond them: the exact artifacts removed, irreversibility with no restore, that the underlying databases are untouched, the authorization requirement (administrator or the uploading developer), and the report_not_found error condition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the destructive verb and scope before any caveats, and every sentence carries distinct information (irreversibility, read-first advice, consent requirement, blast-radius boundary, id sourcing, auth, error, return shape). Dense but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, irreversible operation it supplies everything an agent needs: prerequisites from list_reports, authorization model, error behavior, blast radius relative to databases, and the return shape {deleted: true, id} in the absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented, including the business override and its rationale. The description only adds the sourcing hint for id from list_reports, which the schema already states. Baseline 3 is appropriate when the schema carries the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (delete) plus a precisely scoped resource (one online report, defined as an Excel report users run in Azquo), with an enumeration of what is destroyed: workbook file, menu entries, external data requests, schedules. It also distinguishes itself from the sibling delete_name by noting the absence of any restore path.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when/when-not and alternatives: 'Do not delete without the user asking for it', read it first with read_workbook if the layout may be wanted, and contrasts with delete_name which can be restored. It also states where to obtain the id (list_reports).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

describe_databaseDescribe databaseA
Read-only
Inspect

Get an overview of an Azquo database: top-level sets with child counts, available attributes, and the 'meta information' subtree (semantic descriptions stored back into the database).

Use this as the first step when exploring an unfamiliar database — one call gives more context than multiple AQL probes.

NameRequiredDescriptionDefault
depthNoDepth of the meta-information subtree to return (default: 3)
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name to describe
attributesNoAttribute names to include on each meta-info node, e.g. ["AI TEXT"].

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description goes beyond that by enumerating the returned structure — sets, child counts, attributes, and the semantic meta-information subtree — which matters because there is no output schema to carry that information.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The return contents are front-loaded and the usage guidance follows, so an agent gets the payload description before the routing advice.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must and does sketch the return shape, and it frames the tool's role as an exploration entry point. It stops short of noting practical caveats such as subtree size at higher depth values or how the 'business' parameter interacts with a read, but nothing essential to correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so depth, business, database, and attributes are all already documented in the schema, including the cross-business caveat on 'business'. The description adds no parameter-level detail beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get an overview) and resource (Azquo database) and then enumerates exactly what comes back: top-level sets with child counts, available attributes, and the meta-information subtree. This clearly separates it from siblings like list_databases and describe_set, which cover different scopes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use this as the first step when exploring an unfamiliar database" gives an explicit entry condition, and "one call gives more context than multiple AQL probes" names the alternative (query_aql) it displaces. It lacks an explicit when-not-to-use clause, so it falls just short of the top mark.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

describe_queryLook up names and notesA
Read-only
Inspect

Resolve a name-query expression and return the matched names with full details: parents, attributes (including AI Text bodies and any other attribute values), and child counts.

The query is a name expression as understood by the Azquo NameQueryParser. Common forms:

  • An exact display name (e.g. "State + Territory derivation")

  • A set verb in POSTFIX position after a backtick-quoted name: API endpoints children Florida Coverages parents Sales from 2024 to 2025 Set verbs are ALWAYS postfix. The prefix English form "children of X" is NOT valid AQL — the parser will try to resolve "of" as a name and fail.

  • Set algebra on backtick-quoted names: Florida * Coverages (intersection), A + B (union), A - B (difference)

Read-only: "edit:..." commands and "... as " assignments change the database, so they are refused here - run them through aql_write. A name containing the word "as" must be in backticks.

Use this after list_names / describe_set to read attribute values that the other discovery tools don't surface — most importantly the AI Text attribute on a note. Internal/user storage attributes are filtered out by the server.

Each resolved entry includes its integer id — use it directly to chain into edit_name_attributes or delete_name without a separate lookup.

Limit defaults to 50 resolved names per call.

NameRequiredDescriptionDefault
limitNoMax resolved names to return (default: 50)
queryYesName-query expression. Postfix set verbs only — `Topic` children, NOT `children of Topic`.
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, it discloses that 'edit:...' commands and '... as <set>' assignments are refused because they mutate, that internal/user storage attributes are server-filtered, and that limit defaults to 50. These are concrete behavioral traits not present in the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and return shape, then structured bullets for query syntax and behavioral notes. It is long, but for a query-language tool the syntax guidance and examples each earn their place; only minor trimming is possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description correctly documents the return shape (parents, attributes, AI Text bodies, child counts, integer id). Combined with the syntax rules, write-refusal, attribute filtering, and default limit, an agent has everything needed to call and chain it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description goes well beyond it for the key 'query' param: postfix set-verb syntax, the backtick-quoting rule (including names containing 'as'), and set algebra operators (*, +, -) with examples. It adds little for 'business'/'database', so not a full 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (resolve) and resource (name-query expression) and enumerates the return payload: matched names with parents, attributes including AI Text bodies, and child counts. It explicitly distinguishes itself from sibling discovery tools (list_names, describe_set) and from the write path (aql_write, edit_name_attributes, delete_name).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it: 'Use this after list_names / describe_set to read attribute values that the other discovery tools don't surface.' It also routes write commands to aql_write and explains how to chain the returned id into edit_name_attributes or delete_name, covering when-not and alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

describe_setDescribe setA
Read-only
Inspect

Drill into a named set: returns its child names with child counts, plus the parent path. Use after describe_database to explore a specific set.

For meta-info topic reads, pass depth and attributes together to pull the whole topic plus its note bodies in a SINGLE round-trip — e.g. depth=2, attributes=["AI TEXT"] on the "Start here" set of Azquo_Skills returns every Start-here note with its full AI TEXT body. Without these params you would need 1 + N calls (one describe_set plus one describe_query per child). Prefer the combined call for any topic-read.

NameRequiredDescriptionDefault
depthNoHow many levels of children to expand (default: 1)
setNameYesName of the set to describe
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name
attributesNoAttribute names to include on each returned child, e.g. ["AI TEXT"]. Omit for none.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds meaningful behavioral context beyond that: it describes the return shape (child names with child counts, parent path) and explains the round-trip performance difference between a single combined call and 1 + N calls. It does not cover error handling, permissions, or size limits, but for a read-only tool with annotations this is solid added context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then usage context, then the advanced combined-call pattern. Every sentence contributes something useful: the return shape, the relationship to describe_database, the single-round-trip optimization, the alternative cost, and the final recommendation. It is appropriately sized for a tool with this much behavioral nuance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must carry the burden of explaining return values; it does so by stating child names, child counts, and parent path, and by describing what the combined call returns (note bodies). It also covers the primary usage flow and the performance trade-off, leaving no critical gap for an agent to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every parameter. The description adds meaning beyond the schema by explaining the interaction between depth and attributes (passing them together pulls a whole topic plus note bodies in one round-trip) and gives a concrete example (depth=2, attributes=["AI TEXT"]). It does not explain business or setName beyond the schema, but the key combined-parameter behavior is well covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Drill into a named set: returns its child names with child counts, plus the parent path.' It distinguishes itself from sibling tools by naming describe_database as a predecessor and describe_query as the alternative for per-child reads, so an agent can tell what this tool does and does not do without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to use it after describe_database to explore a specific set, and it names describe_query as the alternative when depth/attributes are not passed. The guidance goes further by explaining the combined depth+attributes pattern for topic reads and instructing to 'Prefer the combined call for any topic-read,' giving clear when-to-use and when-not-to-use conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_name_attributesEdit name attributesA
DestructiveIdempotent
Inspect

Surgical attribute edit on an existing name. Each entry in the attributes map sets that attribute on the named name; an empty string value deletes that attribute. Attributes not mentioned in the map are left untouched (this is NOT a wipe-and-replace).

Looks up by integer nameId — the id returned in apply_structure's namesResolved, or surfaced by describe_set / describe_query. Returns 404 if no name matches the id — silent no-op is never the result.

To rename a name, set its default_display_name attribute via this same call.

═══ PROVENANCE — required on every write ═══ source: where this edit originates — file path, URL, document name, or short note. Lands in the audit trail so the user can return to it. agent: your AI agent name (e.g. "Claude"). Lands in the audit trail so the user can see which AI made the edit.

NameRequiredDescriptionDefault
agentYesAI agent name (e.g. "Claude"). REQUIRED.
nameIdYesInteger id of the name to edit (from apply_structure namesResolved, describe_set, describe_query, etc.)
sourceYesOrigin reference — file, URL, document, or short note. REQUIRED.
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name
attributesYesMap of attribute-name → attribute-value (string). Empty value deletes the attribute. Values are stored verbatim, so JSON or other encoded content should be stringified by the caller and parsed on read.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (destructiveHint=true, idempotentHint=true): it discloses that empty values delete attributes, that unmentioned attributes are left untouched (explicitly NOT wipe-and-replace), that a missing nameId yields 404 rather than a silent no-op, and that source/agent are required provenance landing in the audit trail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core semantics in the first two lines, then lookup behavior, then a clearly headed PROVENANCE block. Sections are separated and each sentence carries distinct information despite the overall length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive write with no output schema, the description covers the mutation semantics, failure mode (404), partial-update guarantee, provenance requirements, and the rename path. Nothing an agent needs in order to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it explains the delete-on-empty-string semantics of the attributes map, the verbatim storage rule, the source/agent audit purpose, and where nameId comes from — context the schema fields do not carry.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Surgical attribute edit on an existing name') and immediately distinguishes itself from a wipe-and-replace sibling behavior. It also names related tools (apply_structure, describe_set, describe_query) as sources of the nameId, so an agent can place it in the workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete when-to-use guidance, notably that renaming is done by setting default_display_name through this same call, and that the id comes from apply_structure/describe_* output. It does not, however, explicitly say when to prefer a different write tool (e.g. apply_structure or aql_write) over this one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_report_dataRun reportAInspect

Fetch the full data for a report, including all regions and current choice values.

Reports in Azquo are Excel-based templates with named data regions. Each region contains row/column headings and a 2D array of values. Reports also support 'choices' — named parameters that filter the data (e.g. selecting a business unit, time period, etc).

Use it to see what a report shows a user - the figures as laid out in the report. For an ad-hoc question that no report answers, use query_aql; to see a report's formulas and layout rather than its data, use read_workbook. Find reports with list_reports (or list_database_sheets for one database).

Pass reportId as either a numeric ID or the report name. The database parameter is required. Any additional choices can be passed as key/value pairs. Choices are SAVED as this user's selections, as when they are picked in the report in a browser, so they also apply to the next run of any report using the same choice. A choice passed as "" clears the saved selection; leave a choice out to keep it as it is.

Example choices: { "Month": "Jan-24", "Department": "Sales" }

The result includes browserLink: a one-use link (10 minutes) that opens this report in the person's browser ALREADY SIGNED IN as this same user, with the choices just made, where they can change them. Give it to the person when they want to see the report; run again for a fresh one. Do not give any other address for the report - a plain address makes them sign in again, and they may land as another login of theirs, whose saved choices differ.

A library report (library: true in list_reports) runs read-only on its azquo_library database: pass that database's name; nothing is saved. open_in_browser shows it read-only. Its result carries libraryCopy: offer the person early to copy the database (copy_from_library) so it is theirs on admin.azquo.ai.

A choice value must be one of the options the report offers for it (choices in the result; run once without choices to see them): any other value is refused with invalid_choice, listing the options, and the saved choices are put back as they were. When a data region could not be filled the result STARTS with a warning and lists errors: the figures are blank or incomplete - do not present them as the report; tell the person what went wrong.

Errors report_not_found when the report does not exist or is not one this user may run, and report_render_failed when the report cannot be calculated.

NameRequiredDescriptionDefault
choicesNoOptional choice parameters to filter report data, e.g. { Month: 'Jan-24' }. Saved as the user's selections; "" clears one
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name to run the report against - usually the database list_reports shows for it
reportIdYesReport ID (number) or exact report name (string), from list_reports, e.g. 17 or "Monthly Sales"

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark the tool as non-read-only and non-idempotent, but the description adds crucial side-effect details: choices are saved as the user's selections and affect future runs, empty string clears a saved choice, omitted choices persist, and invalid values restore saved choices. It also discloses one-use browserLink behavior, library read-only behavior, warnings for incomplete data, and specific error outcomes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but front-loaded and well structured: purpose first, then sibling alternatives, then parameter semantics, then behavioral caveats. Every section adds operational value for a complex report-runner, with no wasted filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and a complex tool that mutates saved choices, returns a browserLink, and has library and error behaviors, the description is complete enough for correct invocation. It covers return-adjacent context like browserLink, libraryCopy, validation failure, and render errors.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema documents all four parameters in detail. The description reinforces required database, reportId as numeric ID or name, and choice key/value semantics, especially save/clear/omit behavior, but much of this is also present in the schema. Baseline 3 is appropriate because the schema does most of the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: fetches full report data including regions and current choices. It explicitly distinguishes this from sibling tools such as query_aql, read_workbook, list_reports, and open_in_browser, so an agent can select it without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use guidance and names alternatives with selection conditions: query_aql for ad-hoc questions, read_workbook for formulas/layout, list_reports to find reports. It also explains the special library-report path and read-only behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

history_settingsChange history settingsA
Destructive
Inspect

See or change whether a database records history - value history (audit_cell), name attribute history and set membership history (name_history), all together - and clear it.

action: get - current setting, and when it was last switched and cleared (the default) off - stop recording, e.g. while a database is in development and every test import rewrites it on - start recording again (the default for every database) clear - DELETE ALL value, name and set history for the database. NOT REVERSIBLE. Needs confirm: "CLEAR". Typically at the end of development so history starts from real use. Do not clear without the user explicitly asking for it.

off/on/clear need an administrator, or the developer who owns the database, and provenance: source: why. agent: your AI agent name (e.g. "Claude").

NameRequiredDescriptionDefault
agentNoAI agent name - required for on/off/clear
actionNoget (default), on, off or clear
sourceNoWhy - required for on/off/clear
confirmNoMust be "CLEAR" for action clear
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (destructiveHint=true, readOnlyHint=false): it states clear is NOT REVERSIBLE, requires confirm="CLEAR", requires an administrator or the owning developer, and requires provenance (source and agent). These are concrete operational requirements the annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then an efficiently formatted per-action list. It is fairly long, but nearly every line carries required operational detail (permissions, confirm token, provenance).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter destructive mutation tool with no output schema, the description covers everything an agent needs: action semantics, irreversibility, confirmation token, permission requirements, and provenance inputs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining the semantics of each action enum value and the role of confirm/source/agent for the write actions, though most of these are also mirrored in the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('See or change whether a database records history') and enumerates the four actions precisely. It clearly distinguishes itself from history-reading siblings like name_history and audit_cell, which query rather than configure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use guidance per action: 'off' while a database is in development and every test import rewrites it, 'on' to start recording, 'clear' typically at end of development. It also states an explicit prohibition: 'Do not clear without the user explicitly asking for it.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_fileImport fileA
Destructive
Inspect

Import SMALL INLINE DATA into an Azquo database - a base64-encoded blob under fileContent. Filename selects the import template.

THIS IS THE NARROW ROUTE, NOT THE GENERAL ONE. It base64-transports the file through the agent's context, so it is capped at 256 KB and refuses anything larger. Use it ONLY when the data exists solely in your context and you have no shell. Otherwise:

  • fetchable by URL -> import_from_url. The SERVER downloads it; nothing crosses your context.

  • you can run curl -> POST /api/importdata with -F 'file=@...' -F 'database=...' and an X-Azquo-Business header if switching business. ~0.1s for a 57 KB file where this tool takes minutes.

See azquo_skills id 813 for the HTTP recipe.

NameRequiredDescriptionDefault
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesTarget database name
filenameYesOriginal filename including extension — used to select the correct import template
fileContentYesBase64-encoded file bytes. Capped at 256 KB decoded - use import_from_url or POST /api/importdata for anything larger.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations carry the safety profile (readOnlyHint=false, destructiveHint=true, idempotentHint=false), and the description adds hard behavioral context beyond them: a 256 KB decode cap that refuses larger input, the fact bytes transit the agent's context, and a concrete performance comparison. It does not say what the import does to existing data in the target database (merge vs overwrite), which is the one behavioral gap left for a destructive write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the narrow-route warning and the cap before the alternative branches, and the bulleted alternatives are easy to scan. Slightly long, with the 256 KB limit repeated in both prose and schema, but every section carries routing or limit information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete enough to call correctly: prerequisites, size cap, template selection, the optional `business` caveat, and escalation paths are all covered, and no output schema exists to require return documentation. The only omission is the effect on pre-existing data in the target database, relevant because the tool is flagged destructive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents `business`, `database`, `filename` (template selection) and `fileContent` (base64, 256 KB cap). The description largely restates the filename-to-template and content-cap semantics rather than adding syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Import SMALL INLINE DATA into an Azquo database') and immediately scopes it as the narrow route for base64 blobs under `fileContent`. It names the sibling it is not (the general route via import_from_url / HTTP), so an agent can distinguish it without opening the schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('ONLY when the data exists solely in your context and you have no shell') plus two when-not branches with named alternatives: fetchable-by-URL to import_from_url and shell-available to POST /api/importdata. It even quantifies the tradeoff (~0.1s vs minutes).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_from_queryImport from external databaseA
Destructive
Inspect

Run SQL against a configured external database connection and import the result into an Azquo database. THE SERVER CONNECTS AND FETCHES - the rows never pass through your context, and the credentials are held server-side, so you never see or supply them.

This is the right tool for a business's own internal database. Use list_external_connections to see what is configured; if the source you need is not there, ask an administrator to add it in azquo-admin rather than looking for another route.

TWO WAYS TO SAY WHAT THE COLUMNS MEAN, and you need one of them: Supply 'headings' - a tab-separated Azquo header line matching the SELECT order. The source's own column names are discarded. Right for a one-off load. Omit 'headings' - the source's column names are kept as the header row, and the target database's IMPORT TEMPLATE interprets them. Right for a recurring feed, because the mapping then lives server-side instead of being restated on every run. Check list_import_templates for the database first.

Imported by the same path as POST /api/importdata, so the usual header grammar applies (see Azquo_Skills > Import). Check 'values adjusted' in the result against what you expected.

NameRequiredDescriptionDefault
sqlYesSQL to run against that connection. Read-only queries only - this is an import.
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesTarget Azquo database name
filenameNoFile name to import under. Import instructions are parsed from it, so it matters. Defaults to <connection>_query.tsv
headingsNoOPTIONAL. Tab-separated Azquo header line, one heading per selected column in the order the SQL returns them. SUPPLY IT for a one-off load: the source's own column names are then discarded and yours are used. OMIT IT for a recurring feed that the target database has an IMPORT TEMPLATE for: the source's column names are kept as the header row and the template interprets them. One or the other is needed - with neither, the import has nothing to tell it what the columns mean.
connectionYesName of the external database connection, from list_external_connections

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already declaring readOnlyHint=false, destructiveHint=true, and openWorldHint=true, the description adds substantial operational context: the server connects and fetches so rows never pass through context, credentials are held server-side and never supplied, the import follows the POST /api/importdata path, and the result should be checked for 'values adjusted'. This is well beyond what the annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and then structured into useful sections for connection behavior, source selection, and heading modes. It is longer than strictly necessary because it repeats some schema-level details for headings, but the organization is clear and most sentences carry useful operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, externally-connected import tool with six parameters and no output schema, the description covers the key context: data never enters the agent context, credentials are server-side, column meaning must come from either headings or an import template, and the result should be checked for 'values adjusted'. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters, including business, database, filename, and headings, are already documented in the schema. The description restates the headings decision rule and connection lookup rather than adding new meaning, so the baseline 3 for high schema coverage is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: run SQL against an external database connection and import the result into an Azquo database. It explicitly distinguishes this from sibling import tools by saying it is the right choice for a business's own internal database, so an agent can tell what it does and when it applies without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit routing guidance: use list_external_connections to see configured sources, ask an administrator via azquo-admin if the source is missing rather than seeking another route. It also spells out the two headings strategies with when to use each (one-off load vs recurring feed) and points to list_import_templates for recurring feeds.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_from_urlImport from URLA
Destructive
Inspect

Bulk-load a delimited-text or spreadsheet file into a database by URL. THE SERVER DOWNLOADS IT, so the file never passes through your context - this is the right tool for anything large.

Same import path as POST /api/importdata: the file needs a self-describing Azquo header row (see Azquo_Skills > Import), and the FILE NAME matters because import instructions are read from it. Returns the same validation summary including lines imported and values adjusted - check that against what you expected, a completed import is not proof of a correct one.

Use this instead of import_file for anything beyond a few KB. If the data exists only in your context and nowhere fetchable, either write it to a file and POST /api/importdata with a shell, or fall back to import_file and accept the cost.

NameRequiredDescriptionDefault
urlYeshttp or https URL the SERVER can reach. Public addresses only.
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesTarget database name
filenameNoOverride the file name used for the import. Defaults to the last path segment of the URL. Set this when the URL does not end in a sensible name, because import instructions are parsed out of the file name.
headingsNoThe self-describing Azquo header line to PREPEND to the downloaded file, e.g. `Ford;child of Manufacturer`\t`.Description`\t`Units;peers {Manufacturer, Month}`. Almost always needed: a file fetched from somewhere else will carry its own headings or none, not Azquo ones. Use the same delimiter as the file. Omit only if the file already has an Azquo header row.
replaceFirstLineNoDrop the file's own first line before prepending 'headings'. Set true when the source has its own header row that the Azquo headings replace; false (default) when the file is bare data.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses that the server performs the download, that the file name drives parsing of import instructions, that an Azquo header row is almost always required, and warns that a completed import is not proof of a correct one. For a destructive, non-idempotent write this is valuable extra context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core capability and the routing rule before the caveats. It is on the longer side, with a parenthetical aside about shells and MCP sessions, but nearly every sentence carries actionable information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without an output schema, the description still characterizes the return (a validation summary with lines imported and values adjusted). Combined with the annotations covering safety and world-access, an agent has everything needed to invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already carries the parameter detail; the description nonetheless adds conceptual meaning by stressing that the file name determines import instructions, which explains why filename and headings matter. It stops short of per-parameter guidance, keeping it just above the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Bulk-load a delimited-text or spreadsheet file into a database by URL') and immediately clarifies the mechanism (the server downloads it, not your context). It draws a clear line against the sibling import_file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing rules: 'Use this instead of import_file for anything beyond a few KB,' plus a named fallback path (write to a file and POST /api/importdata, or fall back to import_file) for data that exists only in context. This is a genuine when/when-not decision tree.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_businessesList businessesA
Read-only
Inspect

List the businesses this MCP session can switch between. Peers are derived from the API key owner's email — one entry per business that email is a member of. Use switch_business to change the active one.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds valuable behavioral context by explaining that entries are derived from the API key owner's email — one per business that email is a member of — clarifying the data scope and authorization basis.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences: purpose, derivation, and next-step alternative. Front-loaded with the core purpose, no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless read-only list tool with annotations covering safety and no output schema, the description is complete: it explains what is listed, the scope, and how to act on the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters, the baseline is 4. The schema is empty, and the description needs no parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb 'List' and resource 'businesses', scopes it to 'this MCP session can switch between', and differentiates from switch_business by naming it as the tool for changing the active one. An agent can tell what this tool does and how it relates to siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context: use to see switchable businesses, and names switch_business for the next action. However, it does not explicitly state when not to use it or contrast with current_business for fetching the active business.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_databasesList databasesA
Read-only
Inspect

List all Azquo databases available to the current user. The shared azquo business overlays two DBs onto every session: azquo_skills (read-only usage skills, always readable) and azquo_suggestions (open-write DB where any agent can propose improvements). Overlaid entries carry overlay: true plus readOnly and openWrite flags; local DBs never carry them. Every database in the azquo_library training library is also overlaid, read-only, carrying library: true — so worked examples can be opened and read in place with describe_database / query_aql, without copying them first. A library database is not listed in the user's business on admin.azquo.ai: when they work with one, offer early to copy it with copy_from_library (ask first) so it is theirs to see and change.

NameRequiredDescriptionDefault
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and openWorldHint annotations, the description discloses important behavior: business sessions overlay azquo_skills and azquo_suggestions, overlaid entries carry overlay/readOnly/openWrite flags, library databases are read-only and carry library:true, and they are not listed in the user's business on admin.azquo.ai. This is rich context an agent needs to interpret results correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and then explains overlay and library semantics. It is somewhat long, but the additional sentences carry useful domain-specific information rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and one optional parameter, the description provides enough detail about return values by explaining the overlay, readOnly, openWrite, and library flags. It also explains the practical implication for library databases, which is important for correct follow-up behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the only parameter, business, is already documented in the schema with its semantics. The description does not add meaning beyond the schema, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: list Azquo databases available to the current user. It also explains overlay and local database distinctions, and ties library databases to related tools like describe_database, query_aql, and copy_from_library, so an agent can understand the tool's role among siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear post-listing guidance: library examples can be opened directly, and when a user works with a library database the agent should offer to copy it with copy_from_library after asking first. It does not explicitly state when not to use this tool or contrast it with every listing alternative, but the operational context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_database_sheetsList database sheetsA
Read-only
Inspect

List every Excel workbook associated with one database, grouped into the three kinds Azquo holds: reports (online reports users run), setupSheets (the workbooks that built the database in the first place), and importTemplates (the rules for interpreting incoming data files). Use this to answer 'what spreadsheets come with this database?' — list_reports and list_import_templates are business-wide, whereas this is scoped to the one database named. Counts per group are included, and a group is simply empty when a database has none of that kind.

NameRequiredDescriptionDefault
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only and not open-world, so the safety profile is clear. The description adds useful behavioral context: results are grouped into three kinds, counts per group are included, and empty groups are simply empty. It does not discuss permissions, but the annotations lower the burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and grouping, then moves to usage differentiation and return behavior. Every sentence adds value: the group definitions, the sibling comparison, and the note about counts and empty groups.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description explains the return structure (three grouped categories, counts per group, empty groups when none). Combined with full schema coverage for parameters and annotations covering safety, the definition is complete for an agent to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema describes both the optional business parameter and the required database parameter. The description does not add any parameter syntax or usage details beyond what the schema already provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('List every Excel workbook associated with one database') and immediately clarifies the grouping into reports, setupSheets, and importTemplates. It also distinguishes itself from sibling tools by scoping to a single database, unlike list_reports and list_import_templates.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit use case ('what spreadsheets come with this database?') and names the alternatives (list_reports, list_import_templates) while explaining the key difference: those are business-wide, this is scoped to one database. The agent can choose the right tool without further inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_deleted_namesList deleted namesA
Read-only
Inspect

Names that have been deleted, most recent first, with who deleted them and when, how many children they had and which sets they were in. parentId narrows it to names that were in that set. Deleted names keep their ids in the history: pass one to name_history for its last attributes, or restore_name to bring it back. Only deletions made while the database was recording history (history_settings) are listed.

NameRequiredDescriptionDefault
limitNoMost to return (default 100)
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name
parentIdNoOptional id of a set - only names deleted from it

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real behavioral context: results are ordered most-recent-first, they carry who/when/child-count/set membership, and it discloses the important precondition that only history-recorded deletions appear. It doesn't cover pagination behavior despite a limit param.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences that are front-loaded with what is returned, then filtering, then routing, then the precondition. Every sentence carries information, though the return-contents enumeration is slightly packed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates the returned fields, states ordering, and gives the history-recording precondition an agent needs before calling. Combined with annotations covering the safety profile, this is nearly complete; only pagination/limit behavior is unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all four parameters are already documented in the schema. The description restates parentId's narrowing behavior (which the schema also says) but adds nothing on limit or business. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('names that have been deleted') and immediately distinguishes itself from list_names by scoping to deletions, while also naming return contents and ordering. An agent can tell this apart from list_names without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Routes the agent forward explicitly: pass a returned id to name_history for last attributes or restore_name to restore it, which names the relevant siblings and their trigger conditions. It also states a usage precondition (only deletions made while history was recording are listed). It stops short of an explicit 'use this instead of list_names when...' contrast, keeping it at 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_documentsList documentsA
Read-only
Inspect

List the documents stored with a database (uploaded via create_upload_link), newest first: id, filename, size, the name they are attached to, and markdownChars - the size of the Markdown copy read_document returns (null when there is none, with markdownNote saying why). Pass nameId for one name's documents.

Read-only. Use it to find a document's id before read_document, or to see what source files (PDFs, spreadsheets, notes) back a database. Data files loaded by import_file are not documents and are not listed here. Returns {database, count, documents}, every document at once (no paging). Errors database_not_found when the database does not exist or this user cannot open it.

NameRequiredDescriptionDefault
nameIdNoOptional: only documents attached to this name - a nameId from list_names or describe_set, e.g. 123
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond readOnlyHint: discloses no paging (every document at once), null-handling for markdownChars with an accompanying markdownNote, the return envelope {database, count, documents}, and the database_not_found error condition including permission failure. This is exactly the behavioral context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action and scope, then layers usage, exclusions, and return shape. Dense but every sentence is load-bearing; the parenthetical about markdownNote is slightly nested but justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the full burden and does so: it names the returned fields, the envelope, the count, and the error case. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description adds real meaning by explaining that nameId scopes results to one name's documents and how markdownChars/markdownNote relate to read_document output. It does not discuss the business parameter, but the schema documents it fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the specific verb and resource (list the documents stored with a database), the ordering (newest first), the exact fields returned, and explicitly distinguishes documents from files loaded via import_file. The agent can separate it from read_document and import_file without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives two concrete use cases (find a document's id before read_document; see what source files back a database) and an explicit exclusion (import_file data is not listed here). It also names the nameId narrowing case, so both including and excluding conditions are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_external_connectionsList external connectionsA
Read-only
Inspect

List the external database connections configured for this business. Use the connection NAME with import_from_query.

Credentials are never returned - the server holds them. Connections are set up by an administrator in azquo-admin; if the source you need is not listed, ask for it to be added rather than looking for another route to the data.

NameRequiredDescriptionDefault
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the standard read-only annotation, the description adds two vital behavioral constraints: 'Credentials are never returned - the server holds them' (a security guarantee) and 'Connections are set up by an administrator in azquo-admin' (a constraint on data management/access). This significantly enhances operational awareness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The tool definition is highly efficient. It presents the core function, followed by immediate operational instructions (usage), and then critical constraints (security/admin setup), making maximum use of minimal text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a read-only listing tool. It details what the tool does, how its output must be used, and necessary security/administrative constraints, leaving no critical operational gaps for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Since the schema description coverage is 100%, the schema already fully documents the `business` parameter. The description provides contextual flavor ('for this business') but does not add semantic meaning that compensates for an incomplete schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description immediately states its purpose: to 'List the external database connections configured for this business.' Furthermore, it explicitly instructs the agent to 'Use the connection NAME with import_from_query,' clearly distinguishing its output role relative to sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit instructions for workflow. It directs the user on the subsequent action required after listing the connection ('Use the connection NAME with import_from_query') and provides a critical contingency plan for missing connections ('ask for it to be added rather than looking for another route').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_import_templatesList import templatesA
Read-only
Inspect

List every import template in the current business. An import template is a workbook of rules that tells Azquo how to interpret incoming data files - which columns become which names and values. Read-only, no parameters. Use it to check what templates exist before import_file or import_from_query, or to find the id for delete_import_template. For the template one database uses, use list_database_sheets; to read a template's rules, read_workbook.

Returns an array of templates: id, templateName, filename, notes, user (who uploaded it) and dateCreated. Empty when the business has none. Not paginated.

NameRequiredDescriptionDefault
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, yet the description still adds genuinely new behavioral facts: empty array when the business has none and that results are not paginated. That pagination/empty-result disclosure is exactly the sort of thing annotations do not carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, followed by definition, behavior, routing guidance, and return shape in a tight sequence. Each sentence carries distinct information with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating returned fields (id, templateName, filename, notes, user, dateCreated) and edge cases (empty, unpaginated). Nothing needed to select or invoke this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the optional 'business' parameter is fully documented in the schema and the description need not repeat it. The description's phrase 'no parameters' is imprecise given that optional business argument exists, but it does not contradict any structured field; baseline 3 applies since the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('List every import template in the current business') and immediately defines what a template actually is, so an agent knows the domain concept rather than just the name. It explicitly distinguishes itself from list_database_sheets and read_workbook, which an agent could otherwise confuse with it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use: before import_file or import_from_query, and to find the id for delete_import_template. It also names the alternatives for adjacent needs (list_database_sheets for per-database templates, read_workbook to read rules), so the agent can route correctly without trial and error.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_libraryList library examplesA
Read-only
Inspect

Browse the shared Azquo library of example/demo databases. Returns every catalogue entry in one call with its full description inline, so no follow-up calls are needed to find out what a database contains. Each row carries: name, sector, complexity, features, status, description, and (when the database is uploaded) nameCount and valueCount. Answer questions like 'is there an example with setup sheets?' by reading the description and features text of these rows — there is no separate search endpoint. Library databases can be read in place, but they are not listed in the user's business on admin.azquo.ai: when the user works with one, offer early to copy it with copy_from_library, and copy only on a yes.

NameRequiredDescriptionDefault
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint/openWorldHint, so the description carries the rest and does so: whole catalogue in one call with descriptions inline (no follow-up calls), exact row shape, and the important caveat that library databases are readable in place but do not appear in the user's business on admin.azquo.ai. That stealth-visibility trait is exactly the kind of behavior an agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose and the payoff sentence first, then the row shape, then usage. Dense but largely waste-free; the closing copy_from_library sequence is slightly extended for a list tool, though it is genuinely actionable rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description enumerates the returned fields (name, sector, complexity, features, status, description, nameCount/valueCount when uploaded) and covers the read-in-place-plus-copy workflow. Nothing needed to call it or act on results is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single optional `business` parameter is fully documented in the schema (100% coverage, including its write-time relevance), so the baseline applies. The description never mentions the business parameter or its cross-business semantics, adding nothing beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Browse the shared Azquo library of example/demo databases") and immediately disambiguates from siblings by contrasting with the user's own business databases on admin.azquo.ai and with the absent search endpoint. An agent can tell this is a catalogue read, not a list_databases call.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit trigger cases ("Answer questions like 'is there an example with setup sheets?'"), explicitly rules out a search endpoint ("there is no separate search endpoint"), and prescribes the follow-up: offer copy_from_library early, copy only on an affirmative. Both when-to-use and when-to-act-next are spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_namesFind namesA
Read-only
Inspect

Find names in a database by text match on their display name, when you know roughly what something is called but not where it sits. Read-only. Typical use: resolve an ambiguous label ("Sales" may be a measure in one set and a department in another) to the right nameId before querying or editing it.

Neighbours: describe_set walks a set you already know; describe_query resolves an exact name or a name expression and returns full attributes; list_deleted_names finds deleted names (this tool only sees current ones).

Pass startsWith for a prefix match or contains for a substring match (startsWith wins if both are given). Matching ignores case. With neither, names are returned unfiltered up to the cap. Example: {database: "Sales", startsWith: "Jan"}.

Returns an array of {name, nameId, sets} - sets are the names of the sets it belongs to. At most cardinalityCap names come back (default 500); with a prefix match the cap applies before the prefix filter, so narrow the text if the result looks short.

NameRequiredDescriptionDefault
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
containsNoMatch display names containing this text, ignoring case, e.g. "forecast" (ignored if startsWith set)
databaseYesDatabase name to search
startsWithNoMatch display names starting with this text, ignoring case, e.g. "Jan"
cardinalityCapNoMax names to return (default: 500; 0 or less for no limit)

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, and the description adds the non-obvious cap-ordering quirk: 'with a prefix match the cap applies before the prefix filter, so narrow the text if the result looks short.' It also discloses the return shape and that only current (not deleted) names are visible. The 'Read-only' sentence duplicates the annotation, but the cap semantics is genuinely valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose, then usage, then sibling routing, then parameter behavior and return shape. The Neighbours paragraph and example each earn their place, though the prose is denser than strictly necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly fills the gap by describing the return array ({name, nameId, sets}) and the cardinality cap. Between the description and the fully-covered schema, an agent has everything needed to invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds value beyond the schema: the default behavior with neither filter ('names are returned unfiltered up to the cap'), the startsWith-wins precedence, and a concrete example invocation. It complements rather than repeats the parameter docs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource plus the matching mechanism: 'Find names in a database by text match on their display name.' It also explicitly distinguishes itself from siblings by naming describe_set, describe_query, and list_deleted_names and describing how each differs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use condition ('when you know roughly what something is called but not where it sits') and a concrete workflow ('resolve an ambiguous label to the right nameId before querying or editing it'). The Neighbours paragraph routes the agent to the correct alternative tool for adjacent cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_reportsList reportsA
Read-only
Inspect

List the online reports (Excel reports users run in Azquo) the current user can see, across every database in the business. Read-only, no parameters. Use it to find a report's id or name before get_report_data, read_workbook or delete_report. For the reports, setup sheets and import templates of one database use list_database_sheets instead.

Who sees what: an administrator sees every report in the business; a developer sees the reports on databases they own; a user whose role has the Reports menu item sees every report in the business too (marked readOnly: true when the role may only see Reports - they run, but do not save); other users see the reports on their menus.

Returns an array of reports: id, reportName (with " uploaded by " appended), database (the one it runs against; empty for reports usable with any database, "No database" when unlinked), filename, category, explanation, dateCreated and author. A report linked to several databases appears once for each. To SHOW the person a report, call open_in_browser with its id and database: its one-use link opens the report already signed in as this same user, with their choices. Do not give the person any other address for a report - a plain one makes them sign in again, and they may land as another login of theirs, whose saved choices differ. Then the reports of the shared azquo_library databases (overlaid read-only, as list_databases shows them), marked library: true and readOnly: true - run them with get_report_data on the database shown, or show them with open_in_browser, which opens them read-only (no Save, executes do not run). A library database whose name this business also holds is left out: the business's own copy wins. With none visible, a single placeholder with id 0 and reportName "No reports found" is returned. Not paginated.

NameRequiredDescriptionDefault
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Although annotations already declare readOnlyHint=true, the description adds substantial behavioral context: role-based visibility, readOnly: true and library: true markers, duplicate reports across databases, placeholder behavior when none are visible, and that results are not paginated. It also warns against giving users plain report addresses because of the one-use signed-in link behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and usage, then organized into visibility and return-value details. It is lengthy, but most detail is relevant for this complex listing tool; the inaccurate 'no parameters' phrase is a small structural flaw.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully explains the returned array fields, role-dependent visibility, library overlay behavior, empty-result placeholder, and non-pagination. Its main gap is failing to mention the optional 'business' parameter and instead claiming there are no parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the sole optional 'business' parameter is fully documented in the schema. However, the description says 'no parameters' and never mentions 'business', which is misleading for a cross-business tool even though the schema compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: list online reports the current user can see across every database. It explicitly distinguishes itself from list_database_sheets and positions itself before get_report_data, read_workbook, and delete_report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance, including using the result to find a report id or name before calling get_report_data, read_workbook, or delete_report. It also names the alternative for reports/setup sheets/import templates of one database and explains how to show a report via open_in_browser.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_usersList usersA
Read-only
Inspect

List the user accounts of the current business (see current_business; switch_business to change it). Read-only. Use it to answer who has access and with what role, or to find a user's email or team. For the user behind this MCP session use current_business instead.

Who sees what: an administrator gets every user in the business; a master user gets the users they created; anyone else gets an empty list.

Returns an array, one entry per user: id, email, name, status (the role, e.g. ADMINISTRATOR, MASTER, DEVELOPER, READONLY), endDate (yyyy-MM-dd, when access expires), selections and team. Passwords are never returned. Not paginated.

NameRequiredDescriptionDefault
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint/openWorldHint, but the description adds substantial behavior: role-dependent result visibility (administrator sees all, master sees only their created users, anyone else gets an empty list), that passwords are never returned, and that results are not paginated. The read-only restatement duplicates the annotation but the added context far outweighs it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose, then read-only confirmation, then usage, then visibility rules, then return shape. Every sentence carries decision-relevant information, including the field enumeration that substitutes for the missing output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by listing returned fields, their formats (status role values, yyyy-MM-dd endDate), and the absence of pagination. Permission-scoped visibility and the cross-session business caveat are also covered, so an agent has everything needed to call and interpret this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single optional 'business' parameter is already fully documented in the schema, including cross-references to list_businesses and switch_business. The description touches business scoping indirectly but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (user accounts of the current business) with the scope spelled out. It is immediately distinguishable from siblings like list_businesses, list_names, and current_business without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use cases (who has access and with what role, finding a user's email or team) and names the alternative for the session user (current_business instead). It also routes business switching to switch_business, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

name_historyShow name historyA
Read-only
Inspect

History of one name: every earlier version of its attributes (who set them, who replaced them, when), each change to its membership as a set (names added/removed, by whom, when), and - if it has been deleted - its last attributes, parents and children. Works for deleted names too: use list_deleted_names to find their ids.

asAt (optional): an ISO date (2026-09-01, meaning the end of that day) or date time (2026-09-01T14:30) - adds the name's attributes and set members as they were then.

History is written when the database persists, so an edit made seconds ago may not show yet. A database can have history switched off or cleared (history_settings) - no entries then means none recorded, not no changes. Only attribute changes and set membership are recorded; a name's values have their own history (audit_cell).

NameRequiredDescriptionDefault
asAtNoOptional ISO date or date time to reconstruct the name's attributes and members as at
nameIdYesInteger id of the name (current or deleted)
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name
maxMembersNoMost names to list per membership change or as-at list (default 100); counts are always complete

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover readOnlyHint and openWorldHint, and the description adds substantial operational context beyond that: history is written at persist time so edits seconds old may not appear, history may be switched off or cleared so absence of entries does not mean absence of changes, and only attribute/set-membership changes are recorded. These are exactly the caveats an agent needs to interpret empty results correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the return payload, then parameters, then caveats, and every sentence carries information. It is somewhat long and occasionally packed, but there is no redundant or marketing filler to strip.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description takes on the burden of describing return content in detail (versions, membership changes, last attributes, parents/children) and covers the failure modes (history disabled, persist lag). For a read-only five-parameter tool this is complete enough to call correctly and interpret results safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description clarifies asAt semantics beyond the schema text by explaining that a bare date means 'the end of that day' and giving concrete format examples. It does not add anything for business or maxMembers, but those are already fully documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (one name) and enumerates exactly what the tool returns: attribute-version history, membership-set changes, and last attributes/parents/children if deleted. It distinguishes itself from adjacent tools by explicitly scoping to attributes and membership and naming audit_cell for values, list_deleted_names for id lookup, and history_settings for configuration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states when the tool applies ('works for deleted names too'), routes the agent to list_deleted_names for finding ids of deleted names, and points to audit_cell for value-level history and history_settings for whether history exists at all. Both the alternative and the condition selecting it are given, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_in_browserOpen report in browserAInspect

A link that opens a report in the person's own web browser, ALREADY SIGNED IN as them - the live report with its Save button, choosers and input cells, where they can look and type figures in. Use it when the person should see or work in the report rather than read figures in the chat (get_report_data gives the figures to you). The link works ONCE and only for 10 minutes: give it to the person straight away and do not reuse it - call again for a fresh one. Anyone holding an unused link is signed in as this person, so do not put it anywhere but your reply to them.

reportId and database as for get_report_data; choices (optional) are set first, as there. A library report (library: true in list_reports) opens READ-ONLY on its azquo_library database: choosers work, but there is no Save and its executes do not run - say so to the person. Returns url, expiresInMinutes, and reportName. Errors report_not_found as get_report_data.

NameRequiredDescriptionDefault
choicesNoOptional choices to set before opening, e.g. { Branch: 'North', Year: '2026' }
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name to open the report against - usually the one list_reports shows for it
reportIdYesReport ID (number) or exact report name (string), from list_reports

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say this isn't a read-only/idempotent/destructive call; the description goes far beyond that. It discloses the single-use 10-minute expiry, the security implication that anyone holding an unused link is signed in as the person, and the limitation that library reports open read-only with non-functional executes — all things an agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose and the security/expiry constraint early, then handles the library caveat and return values. It is dense rather than padded, though the layout is a run-on block and the 'choices ... as there' cross-reference is slightly terse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers what the agent needs: return fields (url, expiresInMinutes, reportName), the error case mirroring get_report_data, the read-only library branch, and the confidentiality obligation. With no output schema, describing the returns and errors is exactly the right compensation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters including the nested choices object are already documented. The description only adds the ordering semantics that choices are applied before opening and that reportId/database behave as in get_report_data; useful but marginal against a fully documented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (opens a report in the person's own browser) and immediately scopes it: it is the live, interactive report signed in as the user, not a data dump. It explicitly distinguishes itself from get_report_data, which is named as the sibling that returns figures instead.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit decision rule: use this when the person should see or work in the report, use get_report_data when they want figures in chat. It also covers the library-report variant (read-only, no Save, executes don't run) and tells the agent to communicate that to the person, plus a hard operational constraint that the agent must act immediately rather than cache the link.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

persist_databaseSave database to diskA
Idempotent
Inspect

Flush pending writes for this database to disk. Edits via edit_name_attributes, apply_structure, AQL edit: primitives etc. are queued in-memory; call this to make them durable.

NameRequiredDescriptionDefault
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), and the description adds genuinely new context: writes live in an in-memory queue and this call is what makes them durable. It does not mention whether flushing with nothing pending is a no-op or an error, but the core behavioral model is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no padding, with the core action front-loaded and the triggering tools in the supporting clause. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the annotations already carry the safety profile, so the description's job is to explain the in-memory queue model, which it does. Minor gaps remain around failure/no-op behavior when nothing is pending.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with 'database' documented and 'business' richly explained in the schema (including multi-business write guidance). The description adds nothing parameter-specific, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: flushing pending writes to disk for a named database. This is clearly distinguishable from siblings like apply_structure or aql_write, which produce the queued writes rather than persisting them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent when to call it: after edits made via edit_name_attributes, apply_structure, and AQL edit primitives, which are queued in-memory. It names the producing tools and the durability goal, though it gives no explicit when-not-to-call case (e.g. no pending writes).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_aqlQuery with AQLA
Read-only
Inspect

Query an Azquo database using AQL (Azquo Query Language). AQL reference: https://www.azquo.com/connect/#aql

Read-only - this never creates or changes names or values; a heading with an edit: command or an "as" set assignment is refused (use aql_write for those). The main way to get numbers out of a database for an ad-hoc question. Neighbours: aql_write saves values with the same heading model; get_report_data runs an existing report; describe_set / describe_query explore names and sets rather than values; audit_cell explains where one cell of this tool's result came from.

AQL works with row headings, column headings, and context — all as nested string arrays, laid out like the heading area of a spreadsheet: each inner array is one row of heading cells, each string one heading. In a stack of headings, a heading on an earlier line applies until another heading or a "." replaces it, so it need not be repeated; the LAST line (the right-hand column, for row headings) is where data anchors and must be filled in every position that should have data.

Example — get monthly sales figures by product: rowHeadings: [["Products children"]] columnHeadings: [["Sales"], ["Jan", "Feb", "Mar"]] context: [["2024"]]

The response contains: rowHeadings — resolved row labels columnHeadings — resolved column labels context — resolved context rows — 2D array of cell values (one entry per [row][col]; raw types: string|number|boolean|null) rowCount, columnCount, truncated — pagination info (options.rowLimit, default 1000)

Raise options.rowLimit (0 = no limit) when truncated is true. A heading naming something that is not in the database fails with aql_syntax and the engine's message - find the right name with list_names - unless options.ignoreHeadingErrors is true. Other failures return aql_runtime.

NameRequiredDescriptionDefault
contextYesContext expressions as a 2D array — use [[]] if no context needed
optionsNoEngine options, all optional - omit for defaults. rowLimit (default 1000, 0 = none), columnLimit; sortRow / sortColumn (a heading to sort by) with sortRowAsc / sortColumnAsc; hideRows / hideCols (1 drops blank rows/columns); rowLanguage / columnLanguage (attribute used to match heading text, e.g. "language date"); ignoreHeadingErrors (blank instead of an error for unknown headings); valueFormat "raw" (default) or "formatted". Example: {"rowLimit": 50, "sortColumn": "Sales", "sortColumnAsc": false}
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name to query
rowHeadingsYesRow heading expressions as a 2D array of strings
columnHeadingsYesColumn heading expressions as a 2D array of strings

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond readOnlyHint=true and openWorldHint=false, the description discloses that write-like headings are refused, that unknown headings fail with aql_syntax unless ignoreHeadingErrors is set, that other failures return aql_runtime, and that rowLimit defaults to 1000 with truncation behavior. It also documents the response shape and pagination, which are not in the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but front-loads the core purpose, constraints, and alternatives before moving into heading mechanics, an example, response format, and error behavior. Most sentences carry useful invocation or interpretation guidance, though the density could be trimmed slightly without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and a complex, nested input model, the description compensates by explaining the response fields (rowHeadings, columnHeadings, context, rows, rowCount, columnCount, truncated) and pagination controls. Error behavior and sibling alternatives are also covered, making it complete enough to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds substantial meaning about heading semantics: nested string arrays, earlier-line inheritance, and the requirement that the last row/column line be filled for data anchoring. It also clarifies options such as rowLimit behavior and ignoreHeadingErrors, though the schema already documents most option fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: "Query an Azquo database using AQL (Azquo Query Language)." It also differentiates from key siblings by naming aql_write, get_report_data, describe_set, describe_query, and audit_cell, so an agent can route correctly without opening every schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use this tool (ad-hoc numbers from a database) and when not to (edit: commands or "as" assignments are refused; use aql_write instead). It also names adjacent alternatives for reporting, exploration, and lineage, making the intended context clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_documentRead documentA
Read-only
Inspect

Read a stored document (see list_documents) as Markdown - headings, lists, tables, slides and pages kept. Long documents come a page at a time: 40000 characters by default; when truncated is true, call again with offset = nextOffset. Also returns downloadUrl (valid 60 minutes) for the ORIGINAL file and markdownUrl for the Markdown - give these to the user; do not fetch them yourself. When a document has no Markdown (e.g. an image), markdownNote says why and only the download link is returned.

NameRequiredDescriptionDefault
idYesDocument id, from list_documents or a DOCUMENT <id> / IMAGE <id> attribute
offsetNoCharacter offset to start from (default 0)
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name
maxCharsNoCharacters to return (default 40000, max 200000)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly annotation: discloses the 40000-character default page size, the truncation/continuation contract, that downloadUrl expires in 60 minutes, and that the agent must hand links to the user rather than fetch them. The image/no-Markdown fallback (markdownNote explains, only download link returned) is exactly the kind of edge case that prevents mis-invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the core behavior before pagination and link handling. Every clause carries operational information; nothing is restated from the title or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the return-value burden and does it: markdown body, truncated, nextOffset, downloadUrl, markdownUrl, markdownNote. An agent can read, paginate, and correctly handle the no-Markdown case without further discovery.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline would be 3, but the description adds the cross-parameter relationship the schema cannot express: offset should be set to the returned nextOffset when truncated. It also corroborates the default page size, though it leaves maxChars bounds to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read a stored document ... as Markdown') plus the preserved structure (headings, lists, tables, slides, pages). It also points at list_documents as the source of the id, which cleanly separates it from the discovery sibling and from read_workbook.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to-use routing ('see list_documents' for the id) and, crucially, tells the agent how to continue an incomplete read: 'call again with offset = nextOffset' when 'truncated is true'. It does not explicitly contrast itself with read_workbook, but the stored-document scope is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_workbookRead workbookA
Read-only
Inspect

Read inside one workbook held against a database — a report, importTemplate or setupSheet (use list_database_sheets to see what exists). Called without sheet it returns the workbook's shape: every sheet with its extent, and every defined name with its scope and target — for an Azquo workbook the az_ names ARE the model, so start here. Called WITH sheet it returns that sheet's cells, showing formulas in preference to computed values. It returns structure and text, NOT the file itself: workbooks run to megabytes, so use the admin's Download button if you want the actual file. Setup sheets and import templates are administrator/developer only; reports follow the caller's report permissions.

NameRequiredDescriptionDefault
kindYesWhich of the three kinds of workbook to read
nameYesFor a report, its report NAME or its filename; for an import template or setup sheet, the filename as returned by list_database_sheets
sheetNoOmit for the workbook's structure; give a sheet name to read its cells
fromRowNoFirst row to read, 0-based (default 0). Use with maxRows to page a large sheet.
maxColsNoColumns to return (default 40)
maxRowsNoRows to return (default 200)
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, but the description adds genuinely new behavioral context: formulas are shown in preference to computed values, it returns structure/text and never the file, and permissions differ (setup sheets/import templates are admin/developer only; reports follow caller report permissions). These are non-obvious traits the annotations do not carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core verb+resource, then the two modes, then the return/permission caveats. Dense but essentially every clause carries decision-relevant information; only minor trimming is possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the burden and does so well: it describes both return shapes (sheets + defined names with scope/target; or a sheet's cells with formulas). Combined with stated permissions and the read-only annotation, an agent has everything needed to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning beyond it: the semantics of omitting `sheet` (returns shape) vs providing it (returns cells), and the note that az_ defined names ARE the model. It clarifies routing more than the schema fields alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Read inside one workbook') and an enumerated resource ('report', 'importTemplate', 'setupSheet'), and even distinguishes the two modes (with vs without `sheet`). An agent can tell it apart from sibling readers like read_document or get_report_data without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: 'use list_database_sheets to see what exists', 'start here' for the no-sheet mode, and 'use the admin's Download button if you want the actual file' as an out-of-band alternative. When-to-use for each mode is spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_nameRestore deleted nameAInspect

Bring back a deleted name (ids from list_deleted_names or name_history). It returns as a NEW name with a new id, its attributes as they were when deleted, put back in the sets it was in and given back its children - where those still exist. Its VALUES ARE NOT RESTORED: deleting a name deletes its values. The response counts what was relinked and what could not be. The restore's provenance records the old id, so the two histories can be followed.

═══ PROVENANCE — required on every write ═══ source: why the name is being restored. agent: your AI agent name (e.g. "Claude").

NameRequiredDescriptionDefault
agentYesAI agent name (e.g. "Claude"). REQUIRED.
nameIdYesId the name had before it was deleted
sourceYesWhy it is being restored - ticket, note or document. REQUIRED.
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseYesDatabase name

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it discloses that the restored name gets a NEW id, that attributes return as they were at deletion, that set memberships and children are relinked only "where those still exist", that VALUES ARE NOT RESTORED, and that the response counts relinked vs. failed items. These are exactly the consequences an agent needs before mutating.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the restore semantics and the most important caveat (values not restored) before the provenance block. The provenance section partially duplicates the schema field descriptions and the box-drawing header is noisy, but overall it is dense rather than padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema, it describes both side effects and the shape of the response (counts of what was relinked and what could not be), plus provenance traceability back to the old id. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: nameId is the pre-deletion id and is obtainable from list_deleted_names/name_history, and source/agent are framed as mandatory provenance on every write. The business parameter's semantics remain schema-only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ("Bring back a deleted name") and immediately distinguishes itself from delete_name/edit_name_attributes by naming the sibling sources of the id. An agent can tell what this does and where the input comes from without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the prerequisite for use (ids come from list_deleted_names or name_history) and states the required provenance fields for every write. It does not spell out when *not* to restore or compare against alternative recovery paths, so it stops short of full when/when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

switch_businessSwitch businessA
Idempotent
Inspect

Switch the active business for subsequent MCP tool calls in this session. The switch is this MCP session's alone: other agents or chats on the same key stay where they are, and a new session starts in the key owner's own business - which a client may open between turns, so check current_business before writing. To run one call in another business without switching, give that call a business argument instead; every tool except this one, list_businesses and current_business takes it. Target must be one the current bearer can reach — call list_businesses first if unsure. Provide exactly one of businessName, businessId, or userId. Writes in the current business are kept when switching; persist_database confirms a batch reached disk (more in azquo_skills id 775).

NameRequiredDescriptionDefault
userIdNoPeer User id (from list_businesses).
businessIdNoBusiness id.
businessNameNoBusiness name (case-insensitive match).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the mutation/idempotency profile; the description adds substantially more: the switch is session-local and does not affect other agents on the same key, new sessions may reopen the key owner's business (so check current_business before writing), and writes in the prior business are retained. This is exactly the extra context the annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and the session-scoping caveat, then the alternative and the constraint. Dense but nearly every sentence carries operational value; the trailing reference to persist_database and 'azquo_skills id 775' is mildly tangential.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a state-mutating, no-output-schema tool, the description covers scope, side effects, prerequisites, the selection constraint, and the interaction with per-call business arguments. Nothing an agent needs to invoke it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds a genuine constraint the schema does not express: 'Provide exactly one of businessName, businessId, or userId' (the schema lists all three as optional with an empty required array). It also points at list_businesses as the source of valid values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Switch the active business') plus the precise scope of the effect ('for subsequent MCP tool calls in this session'). It implicitly separates itself from current_business (read) and list_businesses (discovery) by naming them as the other tools that don't take a business argument.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives the alternative path ('to run one call in another business without switching, give that call a business argument instead'), the prerequisite ('call list_businesses first if unsure'), and the exactly-one-of rule. An agent has everything needed to choose this tool or avoid it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

try_on_copyTry changes on a copyAInspect

Try changes on a throwaway copy of a database before making them for real. action=start makes an in-memory copy of the database. From then on EVERY call in this session on that database - reads and writes - goes to the copy, and each result begins 'TRIAL COPY of ...'. Nothing on the copy is ever saved. Check the outcome (query_aql, describe_set, get_report_data ...). Then action=discard to throw the copy away and return to the real database. To keep the changes, make the same calls again after discarding - there is no commit. action=status lists this session's trials. While any trial is on, tools whose effects would reach beyond the copy are refused: imports, create/delete database, delete report/import template, library copies, upload links, and the name history tools. Use it for a risky restructure, a bulk edit:, or a first attempt at an unfamiliar write. A copy holds the whole database in server memory - start warns when the database is large - so discard it as soon as you are done. A copy unused for 2 hours is discarded by the server; calls then fail loudly until you discard the trial here. A trial belongs to this MCP session only; another agent on the same key keeps working on the real database.

NameRequiredDescriptionDefault
actionYesstart, discard or status
businessNoOptional. The business this call is for, by name, e.g. "azquo" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.
databaseNoDatabase name - required for start and discard

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations, disclosing that all reads and writes redirect to an in-memory copy, results are prefixed 'TRIAL COPY of ...', nothing persists, copies idle 2 hours are server-discarded, and trials are session-scoped so other agents keep hitting the real database. These are exactly the behavioral facts an agent needs and none contradict the annotation flags.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core concept and organized into logical sentences, each carrying useful information. It is somewhat long for a three-action tool and has a minor typo ('bulk edit:,'), but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers memory implications (whole database in server memory, start warns on large databases), the 2-hour idle timeout, session scoping, the refusal list, and the result-format marker. With no output schema, the description still tells the agent what to expect back.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, but the description adds real meaning: it explains what each action value does (start copies, discard returns, status lists trials) and that database is required for start and discard. It does not elaborate on the business parameter, keeping this just below a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Try changes on a throwaway copy of a database') and immediately frames how it differs from the write siblings like aql_write and apply_structure by making changes provisional. An agent can tell this apart from direct-write tools without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names when to use it ('a risky restructure, a bulk edit, or a first attempt at an unfamiliar write'), describes the discard-then-reapply workflow in place of a commit, and lists the tools that are refused while a trial is active. This is a complete when/when-not/alternatives picture.

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.

  1. 1 tool update
    • Addedopen_in_browser
  2. 37 tool updates
    • Changedapply_structure1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedaql_write1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedaudit_cell1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedcopy_azquo_skills1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedcopy_from_library1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedcreate_database1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedcreate_upload_link1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changeddelete_database1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changeddelete_import_template1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changeddelete_name1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changeddelete_report1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changeddescribe_database1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changeddescribe_query1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changeddescribe_set1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changededit_name_attributes1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedget_report_data1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedhistory_settings1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedimport_file1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedimport_from_query1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedimport_from_url1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedlist_database_sheets1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedlist_databases1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedlist_deleted_names1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedlist_documents1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedlist_external_connections1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedlist_import_templates1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedlist_library1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedlist_names1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedlist_reports1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedlist_users1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedname_history1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedpersist_database1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedquery_aql1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedread_document1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedread_workbook1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedrestore_name1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
    • Changedtry_on_copy1 field changed
      • addedInput schema / properties / business
        Added value: +{
        +  "description": "Optional. The business this call is for, by name, e.g. \"azquo\" - it then runs there whatever business the session is in. Worth giving on writes when you work in more than one business: a new MCP session starts in the login's own business. list_businesses shows the names.",
        +  "type": "string"
        +}
  3. 2 tool updates
    • Changedaudit_cell2 fields changed
      • changedInput schema / properties / columnHeadings / description
        Previous value: -"Column heading expressions exactly as passed to query_aql, e.g. [[\"Jan\", \"Feb\"], [\"Sales\"]]"New value: +"Column heading expressions exactly as passed to query_aql, e.g. [[\"Sales\"], [\"Jan\", \"Feb\"]]"
      • changedInput schema / properties / rowHeadings / description
        Previous value: -"Row heading expressions exactly as passed to query_aql, e.g. [[\"children of Products\"]]"New value: +"Row heading expressions exactly as passed to query_aql, e.g. [[\"`Products` children\"]]"
    • Changedcreate_database1 field changed
      • changedInput schema / properties / databaseServerId / description
        Previous value: -"Integer id of the database server, as a string, e.g. \"0\". Only needed when more than one server exists - the error then lists the valid ids"New value: +"Optional. Integer id of the database server, as a string, e.g. \"0\". Leave out to use the default server"
  4. 9 tool updates
    • Changedaudit_cell4 fields changed
      • addedInput schema / properties / columnHeadings / description
        Added value: +"Column heading expressions exactly as passed to query_aql, e.g. [[\"Jan\", \"Feb\"], [\"Sales\"]]"
      • addedInput schema / properties / context / description
        Added value: +"Context expressions exactly as passed to query_aql - [[]] if that query had none"
      • changedInput schema / properties / database / description
        Previous value: -"Database name"New value: +"Database name, as used for the query_aql call"
      • addedInput schema / properties / rowHeadings / description
        Added value: +"Row heading expressions exactly as passed to query_aql, e.g. [[\"children of Products\"]]"
    • Changedcreate_database2 fields changed
      • changedInput schema / properties / databaseServerId / description
        Previous value: -"Database server ID — only needed if multiple servers exist"New value: +"Integer id of the database server, as a string, e.g. \"0\". Only needed when more than one server exists - the error then lists the valid ids"
      • changedInput schema / properties / name / description
        Previous value: -"Name for the new database"New value: +"Name for the new database, e.g. Sales_Forecast. Letters, digits and underscores; spaces become underscores"
    • Changeddelete_database1 field changed
      • changedInput schema / properties / name / description
        Previous value: -"The database name to delete"New value: +"Exact name of the database to delete, as shown by list_databases, e.g. Sales_Forecast"
    • Changeddelete_import_template1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Import template ID"New value: +"Numeric import template id, as returned by list_import_templates, e.g. 42"
    • Changeddelete_report1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"Report ID to delete"New value: +"Numeric report id, as returned by list_reports, e.g. 17"
    • Changedget_report_data3 fields changed
      • changedInput schema / properties / choices / description
        Previous value: -"Optional choice parameters to filter report data, e.g. { Month: 'Jan-24' }"New value: +"Optional choice parameters to filter report data, e.g. { Month: 'Jan-24' }. Saved as the user's selections; \"\" clears one"
      • changedInput schema / properties / database / description
        Previous value: -"Database name to use for this report"New value: +"Database name to run the report against - usually the database list_reports shows for it"
      • changedInput schema / properties / reportId / description
        Previous value: -"Report ID (number) or report name (string)"New value: +"Report ID (number) or exact report name (string), from list_reports, e.g. 17 or \"Monthly Sales\""
    • Changedlist_documents1 field changed
      • changedInput schema / properties / nameId / description
        Previous value: -"Optional: only documents attached to this name"New value: +"Optional: only documents attached to this name - a nameId from list_names or describe_set, e.g. 123"
    • Changedlist_names3 fields changed
      • changedInput schema / properties / cardinalityCap / description
        Previous value: -"Max names to return (default: 500)"New value: +"Max names to return (default: 500; 0 or less for no limit)"
      • changedInput schema / properties / contains / description
        Previous value: -"Match names containing this string (ignored if startsWith set)"New value: +"Match display names containing this text, ignoring case, e.g. \"forecast\" (ignored if startsWith set)"
      • changedInput schema / properties / startsWith / description
        Previous value: -"Match names starting with this string"New value: +"Match display names starting with this text, ignoring case, e.g. \"Jan\""
    • Changedquery_aql1 field changed
      • changedInput schema / properties / options / description
        Previous value: -"Engine options (rowLimit, columnLimit, sortRow/sortColumn, rowLanguage/columnLanguage, ignoreHeadingErrors, valueFormat, etc.). Omit for defaults."New value: +"Engine options, all optional - omit for defaults. rowLimit (default 1000, 0 = none), columnLimit; sortRow / sortColumn (a heading to sort by) with sortRowAsc / sortColumnAsc; hideRows / hideCols (1 drops blank rows/columns); rowLanguage / columnLanguage (attribute used to match heading text, e.g. \"language date\"); ignoreHeadingErrors (blank instead of an error for unknown headings); valueFormat \"raw\" (default) or \"formatted\". Example: {\"rowLimit\": 50, \"sortColumn\": \"Sales\", \"sortColumnAsc\": false}"
  5. 40 tool updates
    • First observedapply_structure
    • First observedaql_write
    • First observedaudit_cell
    • First observedcopy_azquo_skills
    • First observedcopy_from_library
    • First observedcreate_database
    • First observedcreate_upload_link
    • First observedcurrent_business
    • First observeddelete_database
    • First observeddelete_import_template
    • First observeddelete_name
    • First observeddelete_report
    • First observeddescribe_database
    • First observeddescribe_query
    • First observeddescribe_set
    • First observededit_name_attributes
    • First observedget_report_data
    • First observedhistory_settings
    • First observedimport_file
    • First observedimport_from_query
    • First observedimport_from_url
    • First observedlist_businesses
    • First observedlist_database_sheets
    • First observedlist_databases
    • First observedlist_deleted_names
    • First observedlist_documents
    • First observedlist_external_connections
    • First observedlist_import_templates
    • First observedlist_library
    • First observedlist_names
    • First observedlist_reports
    • First observedlist_users
    • First observedname_history
    • First observedpersist_database
    • First observedquery_aql
    • First observedread_document
    • First observedread_workbook
    • First observedrestore_name
    • First observedswitch_business
    • First observedtry_on_copy

Publisher details

Operator
Azquo Holdings Ltd · Publisher source
Vendor relationship
First-party · Publisher source
Trust center
Not available
Restrictions
An Azquo account is required. Connect by OAuth with an Azquo login, or with an API key issued in the Azquo admin site (admin.azquo.ai). Evaluation accounts are available on request through azquo.com. · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to query local CSV, Excel and database workspaces using only human-approved meanings such as column roles, relationships and business terms, returning answers with full provenance (terms, filters, links, sources) or a reasoned refusal. Plans are validated rather than raw SQL, nothing is written back to sources, and coded-value meanings can be proposed by agents but only approved by a person in the app.
    1
    AGPL 3.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Gives AI agents a shared, self-hosted memory of the people, companies and deals a business works with, letting them log interactions and read back typed fields and provenance-linked facts. Fields and objects can be extended at runtime, and everything is reachable over MCP or a REST API with no UI involved.
    14 npm
    AGPL 3.0
  • A
    license
    A
    quality
    A
    maintenance
    Persistent, consensus-validated institutional memory for AI agents. Gives LLMs real memory that survives across sessions - validated through BFT consensus, not just dumped to a file.
    38
    23 npm
    263
    Apache 2.0
  • A
    license
    A
    quality
    B
    maintenance
    Gives every AI agent you use one shared, versioned memory in a local SQLite file, so a fact saved from one app is found by all the others. Runs fully offline with no API key, records which agent wrote each change, and keeps every prior version so nothing is silently overwritten.
    7
    964 npm
    8
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources