Skip to main content
Glama

Server Details

Dashboards, trackers and docs your agents build and keep current. Your team reads them by link.

Ownership verified
Status
Healthy
Uptime
99.0% over 21 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP ยท MCP 2025-11-25
URL
Repository
streamfog/quillm-plugin
GitHub Stars
0

TDQS

A4.1/5.0

Scored across 17 tools

Disambiguation4/5

Tools are organized along two clear axes (views and datasets) with distinct verbs, and the overview/read/write tools (get_workspace, get_view, query_dataset) have clearly different scopes. The only mild overlap is check_view versus the automatic render review inside create_view/update_view, but the description justifies check_view as an explicit re-check.

Naming Consistency5/5

Every tool follows a clean snake_case verb_noun pattern (create_view, update_dataset, delete_rows, upsert_rows, get_workspace, open_page, write_notes). No mixed conventions or vague verbs.

Tool Count4/5

At 17 tools it sits just above the ideal band, but the count is justified: two resource types (views, datasets) each need full lifecycle coverage plus supporting tools (get_guide, get_workspace, check_view, open_page, share_view, write_notes). Nothing feels redundant.

Completeness5/5

Both core domains have full lifecycle support: datasets have create/query/upsert/delete_rows/update/delete and views have create/get/update/delete, supplemented by workspace overview, guide, sharing, publishing, and notes. No obvious dead ends for the stated purpose.

Available Tools

17 tools
check_viewTest-render a viewA
Read-onlyIdempotent
Inspect

Test-renders a view in a real headless browser, reviews it, and reports render errors, console errors, which datasets it loaded, and what a reader would still be missing. The review sends a screenshot and the page's text to OpenAI, unless the workspace turned checks off. Set screenshot=true to also get an image so you can judge the layout yourself. create_view and update_view already run this automatically; use this tool when you want the screenshot, after changing a dataset, or to confirm the review is clean before you tell the user it is done.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesThe view's slug.
screenshotNoAlso return a screenshot image of the rendered view.

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, it discloses a significant behavioral trait: the review sends a screenshot and page text to OpenAI unless the workspace has turned checks off. It also describes the actual return content (render errors, console errors, datasets, gaps), which is essential since there is no output schema.

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?

Three sentences, front-loaded with the core action and its outputs before moving to conditions and routing. The final sentence is long and stacks three alternatives, but every clause carries information an agent needs.

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 fully compensates by enumerating the reported artifacts, and the usage section plus the OpenAI/opt-out disclosure cover the operational context. 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, and the description goes further by explaining the intent behind screenshot=true ("so you can judge the layout yourself") rather than restating the schema's wording. The slug parameter is left entirely to the schema, which is acceptable here.

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+resource ("test-renders a view in a real headless browser") and enumerates exactly what it reports: render errors, console errors, loaded datasets, and missing content. It also explicitly distinguishes itself from create_view and update_view, which already run the check automatically.

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 names three concrete triggers for calling this tool (wanting the screenshot, after changing a dataset, confirming the review is clean before telling the user it is done) and states the default behavior of the sibling tools that already run it. When-to-use and when-it-is-redundant are both covered.

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

create_datasetCreate a datasetAInspect

Creates a named table that views read with useDataset(name). Define typed columns and a key: the column(s) that uniquely identify a row (e.g. ["month"], or ["date","campaign"]). The key makes updates idempotent: pushing a row with an existing key updates it instead of duplicating it. You can pass initial rows in the same call. Prefer tidy, raw-ish data (one row per month/day/entity with numeric columns) over pre-aggregated text; views compute totals and deltas themselves. Check get_workspace first: if a dataset with this data already exists, add to it with upsert_rows.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesColumn(s) that uniquely identify a row, e.g. ["month"] or ["date","campaign"].
nameYessnake_case, content + grain, e.g. "mrr_monthly", "ad_spend_daily". Permanent.
rowsNoInitial rows: [{"month": "2026-01", "mrr": 41200}, โ€ฆ].
columnsYesEvery column, the key columns included.
descriptionYesWhat one row represents and where the data comes from.
update_cadenceNoHow often this data is expected to be refreshed. The app flags the dataset as stale when overdue.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare this is a non-read-only, non-destructive, non-idempotent create. The description adds real context beyond that: the key makes row pushes idempotent (update-instead-of-duplicate), the name is permanent, and initial rows can be supplied in the same call. It does not cover failure modes (e.g. name collision) or any rate limits, so not a 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?

Purpose is front-loaded in the first clause, followed by key semantics, then the alternative-tool routing. Every sentence carries information, though the tidy-data advice and the key explanation slightly overlap in topic and could be tightened.

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 6-parameter, 4-required creation tool with no output schema, the description covers purpose, key semantics, optional initial rows, data modeling advice, and the alternative workflow. Missing only edge behavior such as what happens on a duplicate name (beyond 'Permanent') or error handling.

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 nevertheless adds meaning the schema does not: the rationale for `key` (idempotent updates rather than duplication), the ability to seed `rows` at creation time, and the recommended shape of those rows, which clarifies what values are actually useful.

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 ('Creates a named table that views read with useDataset(name)') and implicitly distinguishes itself from create_view/upsert_rows by scope. An agent can tell what artifact is produced and who consumes it 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?

Explicitly routes the agent: 'Check get_workspace first: if a dataset with this data already exists, add to it with upsert_rows.' It also gives data-shape guidance (prefer tidy raw-ish data over pre-aggregated text), so both the when-to-use-this and when-to-use-an-alternative conditions are stated.

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

create_viewCreate a viewAInspect

Creates a new view: a live page at a stable URL in the user's dashboard app. source is ONE file of React (JSX/TSX) that default-exports a component and reads its data with useDataset("dataset_name") from "quillm". Do not embed data in the source; create the dataset first (create_dataset), then the view. Pass the brief: the user's request in their words, and what you asked them and what they answered. If the request does not say who reads the page, what for, and which number matters most, ask the user first; when the brief is thin, the response suggests the questions to ask. Decide the questions next: what the user asked for is the scope, and a small request gets a small page. The view is compiled, test-rendered in a real browser and reviewed immediately: the response tells you whether it rendered, lists errors, and lists what a reader would still be missing, so read it and fix problems with update_view. The checks use two outside services unless the workspace turned them off: TypeSafe reads the brief, and OpenAI reads a screenshot and the page's text. Call get_guide first for the template and available libraries. Check get_workspace first: if a suitable view already exists, use update_view instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
iconNoOptional. One emoji for the page, e.g. "๐Ÿ’ฐ". The app shows a glyph for the page's kind when there is none.
kindYesWhat the page is for. "dashboard": numbers someone watches over time. "tracker": items people work through (steps, tasks, leads) with owners and status. "doc": a brief, report or analysis mostly in prose. "calculator": inputs the reader changes and an answer. Decides what the page review holds it to.
slugYesURL id, lowercase-with-dashes, e.g. "finance-overview". Permanent.
briefYesThe brief. Quillm judges whether it is enough to build a page someone will read for months; when it is not, create_view still builds the page and tells you what to ask the user.
coverNoOptional and no longer shown; kept for older clients.
titleYesShown in the app's sidebar.
sourceYesThe full single-file React source (JSX/TSX) with a default-exported component. See get_guide.
questionsYesWrite these BEFORE the source. The 1-5 questions the user has in mind when they open this page, in their words: "How many months of cash do we have?", "Who do I need to follow up with today?". What the user asked for is the scope: every block in the view answers one of these, once.
collectionYesSidebar group, e.g. "Finance", "Growth", "Projects". Reuse an existing collection when one fits. People are given access per collection, so the collection decides who can open the view; do not move a view to another collection unless asked.
change_noteNoWhy this view was created (recorded in the changelog).
descriptionYesOne sentence: what this view answers. Other agents use it to decide whether to reuse this view.
dependenciesNoOnly for npm packages outside the base runtime, with exact versions: {"d3-sankey": "0.12.3"}.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only give the generic mutating/openWorld profile; the description adds that the view is compiled, test-rendered in a real browser and reviewed immediately, what the response contains (render status, errors, missing reader context), and that two external services (TypeSafe, OpenAI) receive the brief and a screenshot unless the workspace disables them โ€” a substantive, non-obvious disclosure.

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 what the tool creates and dense with actionable content, but it is long and a few statements restate schema text (e.g. the brief's 'request plus what you asked and what they answered' is already documented in the brief schema), which slightly dilutes an otherwise well-ordered flow.

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 explaining what the response reports (render success, errors, gaps a reader would notice), plus prerequisites, the sequence of dependent tools, and the external-service/privacy consideration โ€” everything needed to invoke this complex 12-parameter 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 genuine meaning: source must be ONE file default-exporting a component, brief must quote the user rather than paraphrase into a plan, and questions define the page's scope so each block answers one question once.

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 with concrete scope: 'Creates a new view: a live page at a stable URL in the user's dashboard app.' It goes further to define the artifact (single-file React component reading useDataset) and explicitly distinguishes itself from siblings create_dataset and update_view.

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 and ordering rules: create the dataset first via create_dataset, call get_guide first for the template, check get_workspace first and use update_view if a suitable view exists. Also states when to ask the user before building rather than proceeding.

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

delete_datasetDelete a datasetA
Destructive
Inspect

Permanently deletes a dataset and all its rows. Refuses if any view still reads it, unless force=true. Only do this when the user asked for it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe dataset to delete.
forceNoDelete even though views still read it. Only when the user confirmed.
reasonYesWhy it is deleted, for the changelog.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered; the description adds the non-obvious behavior that the call is blocked by dependent views and that force overrides that block. It does not discuss permissions or whether any undo/recovery path exists, which would round it out.

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 short sentences, zero filler, with the destructive permanence front-loaded ahead of the guard condition and the user-confirmation gate. 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?

For a 3-parameter destructive tool with no output schema and full annotation coverage, the description covers the essentials: irreversibility, cascade to rows, the view-dependency guard, and the force escape hatch. Minor gap is the absence of any note on required authorization level or post-delete state.

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 the causal relationship for force (it is only meaningful when a view still reads the dataset) that the schema's per-parameter text does not spell out. The reason parameter's changelog role is left 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 ("Permanently deletes a dataset") plus the cascade scope ("and all its rows"), which cleanly separates it from delete_rows and delete_view among the siblings. An agent can identify the operation 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 Guidelines4/5

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

Gives explicit conditions: refuses when views still read the dataset unless force=true, and a clear gate ("Only do this when the user asked for it"). It stops short of naming the alternative sibling tools (e.g. delete_rows) that an agent might reach for instead, so routing is implied rather than enumerated.

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

delete_rowsDelete rowsB
Destructive
Inspect

Deletes rows from a dataset by key, e.g. keys: [{"month": "2026-01"}], or every row with all=true (use before re-loading a dataset from scratch).

ParametersJSON Schema
NameRequiredDescriptionDefault
allNoDelete every row in the dataset.
keysNoKey values of the rows to delete, e.g. [{"month": "2026-01"}].
noteNoOptional changelog note.
datasetYesThe dataset's name.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is covered. The description's contribution is clarifying that all=true is a full wipe rather than a filtered delete, but that scope is also stated in the schema description for 'all', so the added value is modest.

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?

A single compact sentence that front-loads the primary mode (keyed deletion) and appends the bulk mode with its use case. Nothing is wasted, though the embedded example duplicates the schema.

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

Completeness3/5

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

For a four-parameter destructive tool with no output schema, the description covers both deletion modes adequately. It omits what the tool returns (e.g. count of deleted rows), whether missing keys cause errors, and the changelog 'note' behavior, leaving some gaps for a mutation 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 all four parameters (dataset, keys, all, note) are already documented in the schema, including the same key example the description repeats. Baseline 3 is appropriate since the description adds no format or constraint detail beyond the schema.

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

Purpose4/5

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

States a specific verb (deletes) and resource (rows from a dataset), with two clear modes: keyed deletion and full wipe. An agent can distinguish it from delete_dataset and upsert_rows, though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

The parenthetical 'use before re-loading a dataset from scratch' gives one concrete when-to-use scenario for all=true. There is no guidance on when to prefer keyed deletion, when to use upsert_rows instead, or any exclusion such as what happens if a key does not exist.

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

delete_viewDelete a viewA
Destructive
Inspect

Permanently removes a view from the user's workspace. Only do this when the user asked for it.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesThe view's slug.
reasonYesWhy it is deleted, for the changelog.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, so the safety profile is covered. The description usefully adds that removal is permanent, but says nothing about the required reason/changelog entry or side effects such as breaking shared links.

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 short sentences with zero filler; the destructive action and its scope are front-loaded and the caution follows immediately.

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 simple two-parameter delete with full schema coverage and annotations carrying the safety profile, the description is sufficient. Only minor gaps remain, such as who can delete a view and whether shared views are affected.

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 both parameters (slug, reason) are documented in the schema, so the baseline is 3. The description adds no extra meaning about the slug format or what the reason field is used for beyond what the schema states.

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

Purpose4/5

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

States a specific verb (removes) and resource (a view) with explicit scope (the user's workspace) and permanence, which cleanly separates it from delete_dataset and delete_rows. It stops short of naming a sibling to route against, but the resource alone is unambiguous.

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?

"Only do this when the user asked for it" is a real gating condition that tells the agent not to delete speculatively. It gives clear context but names no alternative (e.g., update_view for renaming) and no exclusions beyond that one condition.

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

get_guideRead the Quillm guideA
Read-onlyIdempotent
Inspect

Returns the complete how-to for Quillm: the view code contract, a working template, the libraries you can import, styling rules, and dataset conventions. Read this once per session before you call create_view or update_view. It is short.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds genuine behavioral value beyond that by noting the one-call-per-session cadence and the low cost ('It is short'), which discourages redundant reads, though it does not discuss the return format in any detail.

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 short sentences, front-loaded with what the guide contains, then the usage rule, then a cost reassurance. Nothing is redundant and every sentence carries actionable 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 parameters and no output schema, the description carries the full burden and discharges it: it enumerates the guide's contents, states when to read it, and signals its length. An agent has everything needed to decide whether and when to call 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?

The tool takes zero parameters, so per the rubric the baseline is 4. There are no inputs whose semantics could be clarified.

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 ('Returns the complete how-to for Quillm') and enumerates the exact contents: the view code contract, a template, importable libraries, styling rules, and dataset conventions. This clearly separates it from data-access siblings like get_view or query_dataset.

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 prescribes when to call it: 'Read this once per session before you call create_view or update_view.' It names the specific downstream siblings whose correct use depends on this guide, which is exactly the routing information an agent needs.

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

get_viewRead a viewA
Read-onlyIdempotent
Inspect

Returns one view in full: metadata, agent notes, revision history, the schema of every dataset it reads, and its React source code. Always call this before update_view so your edits match the current source exactly.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesThe view's slug, as listed by get_workspace, or its page URL.
revisionNoReturn the source of an older revision instead of the newest one.
include_sourceNoDefault true. Set false to get only metadata, notes and dataset schemas.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered structurally. The description adds genuinely useful context beyond that: the payload includes revision history and full React source, and it hints at the read-before-write discipline required for safe edits. No auth or rate-limit detail, but the bar is lower with annotations present.

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, zero filler: the first front-loads the return payload, the second front-loads the actionable workflow rule. Every clause 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?

With no output schema, the description carries the burden of describing return content and does so concretely across all five payload parts, plus the read-before-update obligation. Missing only edge-case behavior (nonexistent slug, stale revision errors) to be fully complete.

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 slug, revision, and include_source are already documented at the field level. The description's 'one view in full' and 'React source code' only loosely reinforce the include_source/revision semantics without adding format or default details the schema lacks. Baseline 3 is correct.

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 and resource ('Returns one view') plus an explicit enumeration of what is returned: metadata, agent notes, revision history, dataset schemas, and React source. That enumeration distinguishes it from siblings like get_workspace (which lists views) and check_view (which presumably validates rather than returns).

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 a concrete workflow rule โ€” 'Always call this before update_view so your edits match the current source exactly' โ€” which is exactly the kind of routing guidance an agent needs. It stops short of naming when NOT to use it (e.g. when check_view would suffice), so it is clear context without full exclusions.

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

get_workspaceWorkspace overviewA
Read-onlyIdempotent
Inspect

START HERE. Returns everything that exists in the user's Quillm workspace in one compact overview: every view (slug, purpose, datasets it reads, URL, who last changed it), every dataset (columns, key, row count, freshness), workspace notes left by agents, and recent changes. Call this at the start of every task so you extend what exists instead of duplicating it.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is fully covered. The description adds value beyond that by specifying what is returned (views, datasets, notes, recent changes) and that the response is a 'compact overview', though it says nothing about response size limits or truncation.

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?

'START HERE.' is front-loaded and immediately signals priority, followed by one dense sentence enumerating the payload and one directive sentence. The middle enumeration is long but each item earns its place by telling the agent what is discoverable, so there is no 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?

There is no output schema, so the description carries the full burden of describing return contents โ€” and it does so item by item, covering every category the agent would need to plan a task. For a zero-parameter, read-only overview tool this is complete.

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 is 4; there is no parameter syntax for the description to clarify. It also does not state that no inputs are required, but with an empty schema that is already unambiguous.

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 ('Returns') and resource (the entire Quillm workspace overview), then enumerates the payload: views with slug/purpose/datasets/URL/owner, datasets with columns/key/row count/freshness, agent notes, and recent changes. This level of content detail lets an agent separate it from siblings like get_view or check_view, which cover a single view, 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 Guidelines4/5

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

'Call this at the start of every task so you extend what exists instead of duplicating it' gives an explicit trigger and the rationale behind it, which is stronger than most descriptions. It stops short of naming an alternative or a when-not condition (e.g. how it relates to get_guide or get_view for drill-down), so it is clear context without explicit exclusions.

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

open_pagePagesA
Read-onlyIdempotent
Inspect

Shows the user a page inside the chat, live, with today's data, in apps that display pages (ChatGPT); elsewhere it returns the page's link. Call it once, last, when you have finished creating or changing a page or its data (after the review is clean), and when the user asks to see, open or show a page. create_view, update_view and upsert_rows show nothing in the chat themselves. Without a slug, lists every page.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoThe page's slug, or its page URL. Omit to list every page.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive behavior, so the bar is lower; the description still adds real value by disclosing that the tool renders content live to the user in some hosts versus returning a link in others, and by specifying the call-once-last sequencing convention. It stops short of noting auth requirements or what the returned link looks like, so not a full 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 the core behavior, then sequencing and routing information, with no filler sentences. The middle sentence is clause-heavy and could be split, but every clause carries distinct 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 one-parameter, no-output-schema tool, the description covers purpose, environment-variant behavior, invocation timing, alternatives, and the no-argument listing case. An agent has everything needed to invoke it correctly without supplementary context.

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 parameter is fully documented in the schema (100% coverage), and the description's 'Without a slug, lists every page' simply restates the schema's 'Omit to list every page.' No additional format or syntax meaning is added, 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 ('Shows the user a page inside the chat') and immediately clarifies the environment-dependent outcome (live render where pages are supported, a link elsewhere). It explicitly contrasts with create_view, update_view and upsert_rows, which 'show nothing in the chat themselves', so an agent can distinguish it from the write siblings at a glance.

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 conditions: once, last, after creating or changing a page or its data (once the review is clean), and when the user asks to see/open/show a page. It also names the competing tools and explains why they are not substitutes, leaving little to inference.

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

query_datasetRead rowsA
Read-onlyIdempotent
Inspect

Reads rows from a dataset so you can inspect or analyse what is stored (e.g. to see the latest month before adding the next one). Supports simple filters, ordering and paging. The response includes the total row count.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoDefault 50.
whereNoFilter. Equality: {"campaign": "brand"}. Operators: {"month": {"gte": "2026-01", "lt": "2026-07"}}; ops are gt, gte, lt, lte, ne, contains.
offsetNoRows to skip, for paging. Default 0.
datasetYesThe dataset's name, e.g. "ad_spend_daily".
order_byNoColumn to sort by. Defaults to key order.
descendingNoSort newest or largest first.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds value beyond that by disclosing paging/filter/ordering capability and, importantly with no output schema present, that the response includes the total row count.

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 tight sentences, front-loaded with the core action, then capability, then response shape. No filler and every sentence carries information an agent can use.

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 read-only tool with full annotation coverage and 100% schema documentation, the description covers purpose, capability and the one return-value fact an agent needs (total row count). Nothing critical is missing, though a note on paging limits or result ordering guarantees would round it out.

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 every parameter (including the operator set for 'where' and defaults for limit/offset) is already documented in the schema. The description only summarizes 'simple filters, ordering and paging' at a high level, adding no syntax or format detail beyond the schema.

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

Purpose4/5

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

The description gives a specific verb (Reads) and resource (rows from a dataset) plus the intent behind reading (inspect/analyse stored data). It is unambiguous what the tool returns, though it never explicitly distinguishes itself from read-side siblings like get_view or check_view.

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

Usage Guidelines3/5

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

One concrete scenario is given ('to see the latest month before adding the next one'), which implies the read-before-write pattern and hints at when this tool is useful. There is no explicit when-not guidance or named alternative, so the agent must infer that upsert_rows/delete_rows are the mutating counterparts.

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

report_feedbackReport a Quillm limitationAInspect

Files a note for Quillm's maintainer that Quillm itself fell short, so it can be improved. The note goes to Quillm's maintainer, a person outside the user's workspace, so include nothing private from the user's data. Call it when: you could not do what the user asked because Quillm lacks a capability; you had to use a workaround (if you changed a column type, reshaped data, or dropped something the user asked for to get past an error, that is a workaround); an error message or the guide was confusing or wrong; or a library/feature you needed is missing. One call per distinct problem, filed as soon as you recognise it (before asking the user a follow-up question, not at the end: the conversation may never get there). Still finish the task as well as you can and tell the user about the limitation. Do NOT use it for problems with the user's data or request, for your own coding mistakes that the render check caught, or for praise.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalYesWhat the user asked for / what you were trying to achieve.
kindYesmissing_capability: Quillm cannot do it. bug: Quillm misbehaved. confusing: docs or an error misled you. workaround: possible, but awkward. idea: improvement suggestion.
detailsYesWhat happened: the tool call, the exact error or limitation, what you expected instead.
relatedNoView slug or dataset name involved, if any.
summaryYesOne line, specific. E.g. "Views cannot persist user input between visits".
workaroundNoWhat you did instead, if anything.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations declare openWorldHint=true and non-readonly, but the description adds crucial context the annotations cannot: the note reaches a person outside the user's workspace, so no private data should be included. It also clarifies timing relative to user interaction and that filing does not excuse completing the task.

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 conditions, then exclusions, then timing. Slightly repetitive ('goes to Quillm's maintainer' restates the opening sentence), but the density is high and every clause carries operative guidance.

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 write-outward tool with no output schema, the definition covers purpose, privacy constraint, trigger conditions, exclusions, cadence and post-call behavior. Nothing an agent needs 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.

Parameters3/5

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

Schema description coverage is 100% and the enum values are fully documented, so the schema carries the parameter burden. The description's when-to-call examples loosely map to the 'kind' enum (workaround, missing capability) but add no syntax or format guidance beyond 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 ('Files a note for Quillm's maintainer that Quillm itself fell short') and immediately constrains the scope to Quillm's own limitations, distinguishing it from sibling write_notes which presumably targets user content.

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-call list (missing capability, workaround, confusing error/guide, missing library) and an explicit when-not-to-call list (user data problems, own coding mistakes caught by render check, praise). Also specifies cadence (one call per distinct problem, filed as soon as recognised) and the requirement to still finish the task.

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

share_viewShare a pageA
Destructive
Inspect

Changes who can open a page: "collection" (people with access to its collection, the default), "workspace" (everyone in the workspace) or "link" (anyone with the link, no account needed, read-only; embeddable in Notion or a wiki). Use it when the user asks you to share a page or to give them a link to send. Returns the link. Only when the user asked: a link makes the page and the data it shows readable by whoever has it.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesThe view's slug.
levelYes"collection": only people with access to its collection (the default). "workspace": everyone in the workspace. "link": anyone with the link, no account needed, read-only.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, openWorldHint=true, and non-idempotent. The description adds real context beyond them: it states the return value ("Returns the link"), that link-level access is read-only and embeddable, and warns that a link exposes the page and its data to anyone holding it. It does not discuss reversibility after switching back, a minor gap.

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?

Content is front-loaded with the level definitions first, then usage, then the safety caveat. It is moderately dense and repeats the schema's enum text somewhat, but nearly every clause carries information an agent needs, and there is no filler.

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 value ("Returns the link"). For a two-parameter, low-complexity tool it covers purpose, triggers, the destructive/exposure implications, and the return, leaving only fine details like post-change reversibility unstated.

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 level enum is fully documented in the schema itself. The description largely restates those same level definitions, adding only "the default" for collection, so it neither compensates for a gap nor adds much beyond the structured fields. 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?

The description opens with a specific verb+resource ("Changes who can open a page") and enumerates the three visibility levels with their exact meanings. This purpose (visibility/permission sharing) is clearly distinct from siblings like get_view, update_view, and open_page, so an agent can route correctly 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 Guidelines4/5

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

It gives explicit when-to-use ("when the user asks you to share a page or to give them a link to send") and a when-not guard ("Only when the user asked"). It does not name an alternative sibling tool, but the positive and negative triggers are unambiguous.

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

update_datasetChange a dataset's schemaA
Destructive
Inspect

Changes a dataset's schema or metadata: add columns, remove columns, fix a column's description or type (update_columns), change the description or update cadence. Keep descriptions true: when you start storing a new category or scenario, update the column description that lists them. Existing rows keep their values; new columns are null until you upsert values. The key cannot be changed; create a new dataset for that.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe dataset to change.
noteNoOptional changelog note.
add_columnsNoColumns to add. Existing rows get null.
descriptionNoNew description of what one row represents.
remove_columnsNoNames of columns to remove, with their values.
update_cadenceNoHow often the data is refreshed. "none" clears it (refreshed only when someone asks).
update_columnsNoChange an existing column's description and/or type, e.g. [{"name": "segment", "description": "close_network | slack | waitlist"}]. A type change is checked against every existing row first.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations declare destructiveHint=true and idempotentHint=false, and the description substantiates exactly what is destroyed and how: removed columns lose 'their values,' existing rows keep their values, new columns are null until upserted, and a type change 'is checked against every existing row first.' That is rich mutation-effect context well beyond the annotation flags, and it is consistent with them.

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 sentences, front-loaded with the core action and operation list, followed by constraint details. Every sentence carries behavioral information; only mild overlap with the title's 'Change a dataset's schema.'

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 destructive mutation tool with no output schema, the description covers operation scope, data-preservation behavior, and the key-immutability constraint. It does not mention permissions/authorization or what a successful change returns, but the core calling context is present.

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 all seven parameters (baseline 3). The description adds real semantic value on top: it names update_columns as the mechanism for fixing descriptions/types, explains that add_columns yields nulls for existing rows, and notes the pre-check on type changes.

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 (changes) and resource (dataset schema/metadata) and enumerates the concrete operations: add columns, remove columns, fix a column's description or type, change description or cadence. An agent can distinguish it from update_view, upsert_rows, and create_dataset 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 Guidelines4/5

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

Gives a concrete usage trigger ('when you start storing a new category or scenario, update the column description that lists them') and an explicit alternative for an excluded case ('The key cannot be changed; create a new dataset for that'). It also implicitly routes value-filling to upsert_rows ('new columns are null until you upsert values'), though it never states when to prefer update_view or when not to use this tool.

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

update_viewUpdate a viewA
Destructive
Inspect

Changes an existing view's code or metadata. Pass expected_revision (the revision get_view showed you) so you never overwrite a change another agent made in the meantime. Prefer edits (exact string replacements, like a find-and-replace; each old_string must match the current source exactly and be unique) for targeted changes such as adding a chart. Use source only for a full rewrite, or restore_revision to roll back. Every call creates a new revision, is test-rendered and reviewed; a revision that fails its render check is NOT published (readers keep the last working one) and your next edits apply to it. The review sends a screenshot and the page's text to OpenAI, unless the workspace turned checks off. When a follow-up request replaces an earlier approach (a better burn figure, a new default), replace the old blocks instead of keeping both: revisions make removal safe. Call get_view first to get the current source. To change only the numbers a view shows, do NOT use this tool: use upsert_rows on the dataset.

ParametersJSON Schema
NameRequiredDescriptionDefault
iconNoNew emoji for the page, e.g. "๐Ÿ’ฐ".
kindNoWhat the page is for. "dashboard": numbers someone watches over time. "tracker": items people work through (steps, tasks, leads) with owners and status. "doc": a brief, report or analysis mostly in prose. "calculator": inputs the reader changes and an answer. Decides what the page review holds it to.
slugYesThe view to change: its slug, or its page URL.
coverNoNo longer shown; kept for older clients.
editsNoTargeted replacements, applied in order. Preferred for most changes.
titleNoNew title. Omit to keep the current one.
sourceNoFull replacement source. Only for rewrites; do not combine with edits.
questionsNoReplaces the view's questions. Pass it when the user's follow-up changes what the page is for.
collectionNoMoves the view to another collection, which changes who can open it. Only when the user asked.
change_noteYesWhat changed and why, for the revision history.
descriptionNoNew one-sentence description of what the view answers.
dependenciesNoReplaces the full set of extra dependencies.
restore_revisionNoRoll the source back to this revision number.
expected_revisionNoThe revision you read with get_view. If someone saved a newer one since, nothing is saved and you are told who; read it again and redo your change on top.

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 (destructive, non-idempotent, openWorld) by disclosing that every call creates a revision, is test-rendered and reviewed, that failed renders are not published and readers keep the last working version, and that review data is sent to OpenAI unless checks are disabled. The privacy/permission disclosure is exactly the kind of context 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?

Dense but front-loaded: purpose, concurrency safety, edit preference, side effects, then the exclusion. Nearly every sentence carries actionable information, though the block on follow-up requests replacing earlier blocks is somewhat tangential and lengthens an already long 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 14-parameter, non-idempotent mutation tool with no output schema, the description covers the required precondition (get_view), the edit-vs-rewrite decision, concurrency protection, and the render/review pipeline that determines whether changes actually land. Nothing essential 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: `expected_revision` is tied to the concurrency guard ('the revision get_view showed you'), and `edits` is explained as find-and-replace with exactly-matching, unique old_strings. It does not specify the source format or `dependencies` shape, but that is minor given 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?

Opens with a specific verb+resource ('Changes an existing view's code or metadata') and immediately contrasts itself with the sibling upsert_rows for the numeric-only case. It is clearly distinguishable from create_view, get_view, and update_dataset.

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 states the preferred path ('Prefer `edits` ... for targeted changes'), the fallback ('Use `source` only for a full rewrite'), the rollback path (`restore_revision`), and a hard exclusion ('To change only the numbers a view shows, do NOT use this tool: use upsert_rows'). It also mandates calling get_view first.

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

upsert_rowsAdd or update rowsA
DestructiveIdempotent
Inspect

Adds or updates rows in a dataset. This is how you "add new data" or "correct a number": every view reading the dataset shows the change immediately, with no view edit needed. Rows are matched on the dataset's key columns: a new key inserts, an existing key is merged (only the columns you send are overwritten). Safe to re-run. Values must match the column types (number columns take JSON numbers, not strings like "$1,200"; date columns take ISO strings like "2026-03-01" or "2026-03"). Unknown or not applicable is null, never "" or 0. It writes only to this Quillm workspace and calls no other service.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoOptional changelog note, e.g. "October close" or "corrected refunds".
rowsYesRow objects keyed by column name. Must include the key column(s).
datasetYesThe dataset's name, e.g. "ad_spend_daily".

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already flag idempotentHint and destructiveHint, and the description adds real context beyond them: views reflect the change immediately with no view edit, merge only overwrites columns you send, safe to re-run, value-type requirements, null conventions, and the fact that it writes only to this workspace and calls no other service. This is unusually rich behavioral disclosure for a mutation tool.

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, then layered with semantics and constraints in roughly six tight sentences; the quoted trigger phrases aid routing. It is slightly dense and could trim a clause or two, 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?

For a three-parameter mutation tool with no output schema but full annotation coverage, the description supplies everything needed to call it correctly: matching behavior, merge semantics, idempotency, type rules, null handling, and side-effect scope.

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 already 100%, so the baseline is 3, but the description adds genuine meaning not in the schema: rows are matched on key columns, only sent columns are overwritten, and values must match column types (JSON numbers not '$1,200', ISO dates). It does not describe the note parameter or the 5000-row limit, so it is strong rather than complete.

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 (adds or updates rows in a dataset) and immediately clarifies the upsert semantics. It is clearly distinguishable from siblings like delete_rows, query_dataset, and update_dataset 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 Guidelines4/5

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

Gives concrete trigger phrasing โ€” this is how you 'add new data' or 'correct a number' โ€” and explains the key-matching rule that decides insert vs merge. It does not name sibling alternatives or state when-not to use it, so it stops short of the top score.

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

write_notesLeave notes for future agentsA
DestructiveIdempotent
Inspect

Saves durable notes for future agents (including yourself in a later session, with no memory of this one). Use it to record what is NOT obvious from the code: where the data comes from and how to refresh it (queries, API calls, file paths), definitions ("MRR excludes one-off invoices"), and user preferences ("Kev wants EUR, weekly granularity"). Notes attach to a view, a dataset, or the whole workspace, and are shown in get_workspace / get_view. Replaces the previous notes for that target, so include what should be kept.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesYesMarkdown. Replaces existing notes for this target.
targetNoView slug or dataset name. Omit for workspace notes.
target_typeYesWhat the notes attach to.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations flag destructiveHint=true and idempotentHint=true, and the description earns its keep by explaining the actual destruction semantics: notes REPLACE the previous notes for that target, so existing content must be re-included. It also discloses where notes surface (get_workspace / get_view), which annotations cannot convey.

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?

Four tightly packed sentences, front-loaded with the action and the recording criteria, followed by scope and the destructive-replace caveat. The parenthetical about a later session with no memory justifies itself by explaining why notes matter at all.

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 small 3-parameter surface, the description covers everything needed: what to write, where it attaches, where it is read back, and the overwrite hazard. An agent can call this correctly without further context.

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 baseline is 3, but the description adds real semantic value: it tells the agent what content belongs in `notes`, and it maps the three targets (view, dataset, workspace) to the concept of note attachment. The replace-behavior of `notes` is reinforced beyond the schema's one-line mention.

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 ('Saves durable notes for future agents') and immediately scopes the content ('what is NOT obvious from the code'). No sibling tool does anything similar, so the agent can distinguish it from update_view/get_view 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 concrete, actionable guidance on what to record: data provenance and refresh mechanics, definitional conventions, and user preferences, each with an example. It lacks an explicit 'when not to use this' exclusion, but the 'NOT obvious from the code' framing implicitly bounds usage.

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
    • Changedcreate_view1 field changed
      • changedInput schema / properties / brief / description
        Previous value: -"The brief. Quillm judges whether it is enough to build a page someone will read for months; when it is not, create_view refuses once and tells you what to ask the user."New value: +"The brief. Quillm judges whether it is enough to build a page someone will read for months; when it is not, create_view still builds the page and tells you what to ask the user."
  2. 17 tool updates
    • First observedcheck_view
    • First observedcreate_dataset
    • First observedcreate_view
    • First observeddelete_dataset
    • First observeddelete_rows
    • First observeddelete_view
    • First observedget_guide
    • First observedget_view
    • First observedget_workspace
    • First observedopen_page
    • First observedquery_dataset
    • First observedreport_feedback
    • First observedshare_view
    • First observedupdate_dataset
    • First observedupdate_view
    • First observedupsert_rows
    • First observedwrite_notes

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Self-hosted task tracker and MCP server for AI coding agents. Append-only case files preserve decisions, failed attempts, questions, and check results across sessions. A live web board lets people track progress and answer agents. Runs locally in Docker and connects to Claude Code, Codex, Cursor, and other Streamable HTTP MCP clients. MIT licensed.
    30
    6
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Self-hostable, markdown-native team wiki with a built-in MCP server: agents search, read, and write your wiki pages (ranked Postgres full-text + semantic search, backlink traversal). Plus Atlas, which auto-generates a cited, coverage-checked wiki from your git repos and Jira.
    50
    85
    AGPL 3.0
  • A
    license
    B
    quality
    D
    maintenance
    Transform your non-existent or unreadable docs into an intelligent, searchable knowledge base that actually answers those 'basic questions' before they're asked.
    11
    35
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.