ProductNow
Server Details
Connect AI agents to ProductNow's context engine to search, create, review, and act.
- Status
- Healthy
- Uptime
- 11.6% over 75 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- ProductNowAI/productnow-mcp
- GitHub Stars
- 0
- Server Listing
- ProductNow MCP Server
TDQS
Scored across 19 tools
The set clearly separates document CRUD, folders, search, comments, versions, lifecycle status, actions, and media, with descriptions that explicitly cross-reference when not to use a tool. Minor overlap remains around persisting knowledge (remember vs. create_document/edit_document) and document creation (create_document vs. create_help_document), but the boundaries are mostly workable.
Most tools use predictable snake_case action-oriented names such as create_document, edit_document, fetch_folder, list_actions, and update_document_status. A few single-word verbs (archive, move, rename, fetch, search, remember) are minor deviations but remain readable and clear.
The 19-tool surface covers a broad domain with many distinct operations, but it sits in the borderline-heavy range where the set starts to feel large for an agent to navigate. Each tool has a plausible role, yet some consolidation or clearer grouping could reduce the surface.
The surface covers core document and folder lifecycle operations, search, fetching, versioning, comments, status changes, actions, and media upload. Minor gaps remain around delete/restore, sharing/permissions, and explicit comment-thread management beyond replying, but agents can work around them for the main workflows.
Available Tools
19 toolsarchiveADestructiveIdempotentInspect
Put documents or folders away, including several at once. Pass ids, a mix of document ids and folder ids. Archiving a folder also archives the contents that user can manage. Archived items leave listings and search; nothing is deleted. Not move, and not a content edit — use edit_document to change content. Ids that are not a document or folder here come back in unresolvedIds. Ids the user cannot archive come back in permissionDeniedIds; the rest are still archived.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Document ids and folder ids to archive, mixed together. Use fetch for a document and fetch_folder for a folder. |
Output Schema
| Name | Required | Description |
|---|---|---|
| unresolvedIds | Yes | |
| archivedFolderIds | Yes | |
| archivedDocumentIds | Yes | |
| permissionDeniedIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations declaring destructiveHint=true and idempotentHint=true, the description goes well beyond them: it discloses the effect ('leave listings and search; nothing is deleted'), the cascade rule ('archiving a folder also archives the contents that user can manage'), and partial-failure semantics via unresolvedIds and permissionDeniedIds with 'the rest are still archived.' This is exactly the extra behavioral context structured fields 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, each earning its place, with the core action and scope front-loaded before the exclusions and error behavior. No filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be detailed, yet the description still covers the ambiguous outcomes (unresolvedIds, permissionDeniedIds, partial success) and the cascade behavior. Everything an agent needs to call this safely on a batch of mixed ids is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single `ids` parameter, so the baseline is 3. The description still adds meaning: ids may be a mix of document and folder ids, non-document/folder ids surface in unresolvedIds, and unauthorized ids surface in permissionDeniedIds without blocking the rest. That is useful semantics beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Put documents or folders away') with batch scope ('including several at once'), and explicitly names the siblings it is not: 'Not move, and not a content edit — use edit_document to change content.' An agent can distinguish this from move, rename, and edit_document 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-not guidance ('Not move, and not a content edit') plus the correct alternative for content changes ('use edit_document'). The schema and description also point to fetch/fetch_folder for obtaining ids, so routing between siblings is fully covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comment_on_documentAInspect
Leave feedback on a document that is in review. Not an edit — use edit_document to change the document, and reply_to_thread to answer an existing comment. Pass documentId; this comments on the current review version and says so when there is none. Posted as the user's personal agent.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | Yes | The comment text to post on the document | |
| documentId | Yes | The document to comment on. The server uses its current review version. | |
| quotedText | No | Optional document text or exact custom-node HTML to anchor the comment to. Use one target, not both text and custom-node HTML. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| threadId | Yes | |
| documentVersionId | Yes | The review version the comment was posted on |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the description's added value is the identity/attribution detail ("Posted as the user's personal agent") and the disclosed failure mode when the document has no current review version. That is meaningful context beyond the annotations, though return shape and permission requirements are left to the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action, then exclusions, then invocation detail. No filler and nothing repeated from the schema verbatim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. The description covers purpose, sibling alternatives, the required identifier, the review-version targeting rule, the empty-state behavior, and the posting identity — 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented, including documentId's server-side resolution to the current review version. The description restates documentId behavior but adds nothing about quotedText anchoring semantics. Baseline 3 applies 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Leave feedback on a document") plus the scope qualifier "that is in review". It then names two siblings it is not — edit_document and reply_to_thread — so an agent can distinguish it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly sets the boundary: not an edit (route to edit_document) and not a reply (route to reply_to_thread). It also states the invocation prerequisite ("Pass documentId") and the conditional behavior when no review version exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_documentAInspect
Create a NEW ProductNow document and generate its content with AI. Use this to persist knowledge the user wants remembered or shared across sessions and teammates — decisions, specs, RFCs, plans, meeting outcomes. Search with search first so you don't duplicate an existing document; to change an existing document use edit_document instead. File the document in an existing folder. Search results include each document's folderId; pass the folderId of the closest related document. If search does not show a fit, fetch_folder the root and walk folders until you have a folderId. Leave folderId off only when the user explicitly asked for the warehouse root. If no folder fits, call create_folder under the closest existing folder and pass that new folderId. Content is generated from prompt (the full outline: numbered sections, their titles, and what each should say) and context (verbatim source material the user supplied or explicitly authorized for this ProductNow document). Generation paraphrases: if exact wording must survive, put it in context and say so in prompt. Pass templateId only when you already have one. Returns the documentId and URL; generation continues after the call returns.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Document title (e.g., 'RFC: API Key Generation') | |
| prompt | Yes | Generation instruction for the document, including a full document outline (with numbered sections, each with a title and content) | |
| context | No | Supporting material supplied by the user or explicitly authorized for this document. ProductNow attaches it as a .txt file for generation. | |
| folderId | No | Folder to file the document in. Find it with search and fetch_folder before this call. Omit only when the user explicitly asked to create the document at the warehouse root. | |
| templateId | No | Template ID — pass when applying a specific template |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| documentId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations declaring readOnlyHint=false, idempotentHint=false, and destructiveHint=false, the description adds substantial behavioral context beyond the structured data. It explains that generation paraphrases content and that exact wording should be placed in `context` with an instruction in `prompt`; it also notes that the call returns a documentId and URL while generation continues asynchronously. This goes well beyond what annotations provide and helps the agent understand side effects and lifecycle.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then structured logically: when to use, folder filing workflow, content generation mechanics, and return behavior. Every sentence contributes actionable information, but the overall length is substantial and slightly dense for a tool description, which prevents a perfect score despite the absence of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of an AI-generated document tool with five parameters, folder-discovery prerequisites, and an output schema, the description is complete. It covers the full workflow from searching for duplicates to filing the document, explains how generation uses `prompt` and `context`, and notes the asynchronous nature of the result. Nothing an agent needs to call the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds meaningful semantics: it explains that `prompt` is 'the full outline: numbered sections, their titles, and what each should say' and that `context` is 'verbatim source material' used for generation, including the paraphrasing behavior. It also clarifies when to pass `templateId` ('only when you already have one') and provides a detailed procedure for obtaining `folderId`. These additions go beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create a NEW ProductNow document and generate its content with AI.' It then explicitly distinguishes this tool from siblings by telling the agent to use `search` first to avoid duplicates and `edit_document` to change an existing document. An agent can immediately tell what this tool does and how it differs from related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance ('persist knowledge the user wants remembered or shared across sessions and teammates — decisions, specs, RFCs, plans, meeting outcomes'), when-not-to-use alternatives (`search` for discovery, `edit_document` for changes), and a detailed prerequisite workflow for finding a `folderId` via `search`, `fetch_folder`, or `create_folder`. It leaves no ambiguity about the recommended sequence of operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_folderAInspect
Create a NEW folder only when no existing folder fits. Search with search and resultType folders first so you don't duplicate a folder; if that is not enough, fetch_folder the root and walk until you find the closest related folder. Nest under that folder by passing its id as parentFolderId. Omit parentFolderId only when the user explicitly asked for a root-level folder. Returns the new folder's id and name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The display name of the new folder | |
| parentFolderId | No | Folder to nest under. Search with resultType folders, or walk with fetch_folder, and pass the closest related folder's id. Omit only when the user explicitly asked for a root-level folder. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| folderId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false; the description reinforces non-idempotent behavior by emphasizing 'NEW' and duplicate-avoidance workflow. It adds nesting semantics and the root-level condition, though it does not mention permissions or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, all purposeful and ordered from decision logic to parameter guidance to return value. Slightly verbose in re-explaining the parentFolderId workflow that the schema also covers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be detailed, and the description still names them briefly. Decision workflow, nesting, and the root-level edge case are all covered for a two-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented with descriptions that closely mirror the tool text. The description adds little beyond restating the parentFolderId workflow, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Create') and resource ('folder') with an explicit condition ('only when no existing folder fits') that distinguishes it from search and fetch_folder. An agent can immediately tell what this does and when it applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: search with resultType folders first, fall back to fetch_folder and walk from root if needed, and reserve create for when no folder fits. Also gives the root-level exception for omitting parentFolderId. Covers when-to-use, alternatives, and exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_help_documentAInspect
Create a new blank ProductNow help document. Only available to ProductNow users. Returns the document ID, help page publication ID, and a URL to the document editor where content can be added.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Help page category — one of: GETTING_STARTED, CONTENT_CREATION, COLLABORATION, ADMINISTRATION, OTHER. Defaults to OTHER if omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| documentId | Yes | |
| helpPagePublicationId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, which are sparse; they don't indicate mutation or destructive behavior clearly. The description adds substantial behavioral context: it states it creates a new blank document, is only for ProductNow users, and returns specific identifiers (document ID, help page publication ID, and editor URL). This goes beyond annotations and helps the agent understand the side effects and output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured paragraph that front-loads the purpose ('Create a new blank ProductNow help document'), followed by audience restriction, and then the return value. Every sentence adds value; there is no fluff. It is concise and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the action, audience, and return values. It lacks explicit instructions on prerequisites beyond 'ProductNow users' (e.g., authentication or specific permissions), and it doesn't specify what 'blank' means for the help document (e.g., does it have any default content?). However, the output schema (which is not shown but indicated) likely details the return structure, so the description is sufficient for basic invocation. It is complete enough for an agent to understand the essential steps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the 'category' parameter with an enum and default, and the description's coverage is 100%. However, the description adds no additional semantic meaning for the parameter itself . But since the schema is exhaustive and the parameter is optional with a clear default, the description doesn't need to add much. The score is high because the schema covers it fully, and the baseline for high coverage is 3, but the description's mention of 'new blank' hints that category might influence the document type, adding slight value. I'll give 4 for the alignment.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Create'), the resource ('new blank ProductNow help document'), and the audience restriction ('Only available to ProductNow users'). It distinguishes this from siblings like 'create_document' by specifying 'help document' and the editor URL, which implies it's a special kind of document. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions availability to ProductNow users, which is a prerequisite, but it does not explicitly state when to use this versus siblings like 'create_document' or 'import_prototype'. It doesn't provide exclusions or alternatives. The agent must infer the use case from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_documentADestructiveInspect
Edit an existing ProductNow document. This is the only tool that changes a document's content. It does not apply your edit directly: it hands message to the document's own editing agent, which reads the document and makes the change. Write message as instructions to that agent, not as the new document text. Name the section, say exactly what to add, replace, or remove, and quote text verbatim when the wording must be preserved. Include everything the agent needs, since it cannot see this conversation and will not ask follow-up questions. Returns before the edit finishes; poll get_status until status is idle (it stays running while any edit you sent is queued or in progress), then read the document to confirm the result. Do not use create_document — that creates a new document. Do not use rename — that only changes a name. Do not use reply_to_thread — that only adds discussion and never changes content.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Instructions for the document's editing agent. Name the section and the change, and include any context the agent needs (e.g., 'In Executive Summary, replace the second paragraph with: …'). | |
| documentId | Yes | The ID of the document to edit. Resolve it with search or fetch first. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only flag destructive/not-readOnly; the description goes far beyond by disclosing the async delegation model (hands `message` to the document's own editing agent), that it returns before the edit finishes, that get_status stays 'running' while edits are queued, and that the agent cannot see the conversation or ask follow-ups.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but dense with no filler: identity, mechanism, message-authoring rules, async/polling contract, and sibling exclusions are all front-loaded in logical order. Each sentence carries unique operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite an output schema existing, the description supplies the async lifecycle and confirmation procedure an agent critically needs, plus the boundary against three write-capable siblings. Nothing needed to 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.
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 real semantic value: `message` must be written as instructions to the editing agent, not as replacement document text, with guidance to name sections and quote verbatim. This reframes how the parameter must be authored rather than restating the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Edit an existing ProductNow document') and immediately establishes unique positioning: 'the only tool that changes a document's content.' An agent can distinguish it from all siblings on that basis alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use (content changes) plus three named exclusions with reasons: create_document creates new, rename changes only a name, reply_to_thread never changes content. It also prescribes the post-call workflow (poll get_status until idle, then re-read).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchARead-onlyIdempotentInspect
Read one document you already have an id for. Pass documentId. The result includes the document's id, title, url, and full text, plus its sections, comment threads, and each comment's id. When the document is filed in a folder, the result includes that folder's folderId and folderName. Omit documentVersionId to read the latest draft; pass one to read that version and its comments. Version ids come from list_document_versions. Not a search — use search for a question or a topic. Not a folder listing — use fetch_folder to list a folder or the warehouse root.
| Name | Required | Description | Default |
|---|---|---|---|
| documentId | Yes | The document to read. Use search to find document ids. | |
| documentVersionId | No | Reads that version and its comments. Omit to read the latest draft. Use list_document_versions to find version ids. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Document ID. Same as documentId. |
| url | Yes | Canonical URL of the document, for citations |
| name | Yes | The document name. |
| text | Yes | Full document text: every section joined in order. |
| title | Yes | Document name. Same as name. |
| status | Yes | |
| threads | Yes | |
| folderId | No | The folder this document is filed in. Omitted when the document is at the warehouse root. |
| sections | Yes | |
| documentId | Yes | |
| folderName | No | The name of the folder this document is filed in. Omitted when the document is at the warehouse root. |
| folderPath | No | |
| resultType | Yes | |
| versionNumber | Yes | |
| documentVersionId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description correctly focuses on behavior: what the read returns (full text, sections, comment threads, folderId/folderName) and the version semantics (omit versionId = latest draft, pass one = that version plus its comments). It stops short of pagination/size limits, which would matter for full-text reads.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then return shape, then version rules, then exclusions. Every sentence carries information, though the return-shape sentence partially duplicates the output schema and the version guidance echoes the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read with an output schema present, the description is complete enough: purpose, routing, version behavior, and result contents are all covered. Only operational details (pagination, truncation of full text) are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters, and the description's version guidance largely restates the documentVersionId schema text. The one added nuance is the emphasis that omitting the version reads the latest draft versus a pinned version, but that is also already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource and a precondition ('Read one document you already have an id for'), which immediately separates it from search. It further distinguishes itself from search and fetch_folder by name in the closing sentences.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('you already have an id'), explicit when-not ('Not a search — use search for a question or a topic. Not a folder listing — use fetch_folder'), and it names the tool to obtain version ids (list_document_versions). Routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_folderARead-onlyIdempotentInspect
List a folder you already have an id for, or the warehouse root. Pass folderId to list that folder's name, an optional parentFolderId to fetch and go up, and its direct contents. Each child folder and document includes its id, name, updatedAt, createdBy, and isPrivate. Each folder also includes contentCount, its direct documents plus subfolders, and subfolderCount, its direct child folders. Each document also includes its status: DRAFT, REVIEW, or PUBLISHED. A child folder also includes parentFolderId when it is nested, including a shared folder that shows up in the root listing but lives somewhere else; parentFolderId is omitted for a true top-level folder. Pass deep true with a folderId to return that folder and every nested folder as a tree, up to 15 levels, with each folder's documents inside it. deep is rejected for the warehouse root. Omit folderId to list the root one level: the top-level folders plus shared folders this user can see, not the whole warehouse and not other people's private folders. Not a search — use search to find a folder by name. Not a document read — use fetch to read a document.
| Name | Required | Description | Default |
|---|---|---|---|
| deep | No | With folderId, return that folder and every nested folder as a tree of names and ids, up to 15 levels. Omit or pass false to list only direct children. Rejected when listing the warehouse root. | |
| folderId | No | The folder to list. Pass deep true to return this folder and every nested folder. Omit deep to list only direct children. Omit to list the warehouse root one level. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | The folder name. Omitted when listing the root. |
| folders | Yes | Child folders. Without deep, each entry is identity plus updatedAt, createdBy, isPrivate, and parentFolderId when nested. With deep, each entry also nests its own documents and folders. |
| folderId | No | The folder you fetched. Omitted when listing the root. |
| documents | Yes | |
| resultType | Yes | |
| parentFolderId | No | The parent folder. Fetch it to go up. Omitted at the root and for a top-level folder. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description is free to add operational context instead of repeating it. It does: the 15-level depth cap, that deep is rejected for the root, and that parentFolderId is omitted for true top-level folders while appearing for nested/shared ones. This is genuine behavioral disclosure beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The listing semantics are front-loaded, then the return-field inventory, then the exclusions. It is long, and the enumeration of child fields (id, name, updatedAt, createdBy, isPrivate, contentCount, status, etc.) partly duplicates the output schema, but each sentence still carries usable scoping information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be re-explained, yet the description still clarifies field semantics (contentCount = direct docs + subfolders, status enum values, parentFolderId nesting behavior). Root vs folder vs deep modes are all covered, and sibling routing is handled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are already documented in the schema, so the baseline is 3. The description restates the folderId/deep interaction ('Pass deep true with a folderId', 'deep is rejected for the warehouse root') which is largely duplicative of the schema descriptions rather than adding new syntax or edge-case detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('List a folder') and immediately scopes it ('you already have an id for, or the warehouse root'). It also explicitly distinguishes itself from two siblings ('Not a search — use search', 'Not a document read — use fetch'), so an agent can route correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use is given for each mode: pass folderId to list a folder, omit it to list the root, add deep=true for a recursive tree. Explicit when-not-to-use is stated via the search and fetch exclusions, plus the constraint that deep is rejected for the warehouse root.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statusARead-onlyIdempotentInspect
After edit_document or create_document, check whether the document is still being edited or the edits have finished. Pass documentId. Returns running or idle, and a short note of what the draft agent last did. Use it to poll: after sending one or more edits to the same document, call get_status until status is idle, then fetch the document to confirm the result. Edits queue behind each other, so idle means every edit sent so far has finished, not just the latest one. running means at least one edit is still queued or in progress. Not the chat transcript, and not a way to edit — use edit_document to change the document.
| Name | Required | Description | Default |
|---|---|---|---|
| documentId | Yes | The document whose draft edit to check. Use the documentId returned by edit_document or create_document. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | A short note of what the draft agent last did. |
| status | Yes | running while any edit is queued or in progress. idle once every edit sent so far has finished, so it is safe to fetch the document. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered; the description adds genuinely new behavioral context: the queueing semantics that 'idle' means every prior edit drained, not just the latest, and that a short note of the draft agent's last action is returned. That is non-obvious operational behavior beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical polling instruction is front-loaded and the negative scoping lands last, which is well ordered. It is slightly longer than needed because 'running means at least one edit is still queued or in progress' largely restates the idle definition from the opposite direction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be re-explained, and the description covers the missing semantic layer (running vs idle meaning, queueing). Nothing an agent needs to poll correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is fully described there as the documentId returned by edit_document or create_document. The description only restates 'Pass documentId' without adding format, sourcing, or edge-case detail, so the baseline 3 applies 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (check whether a document is still being edited) and explicitly scopes it to the post-edit/create lifecycle. It distinguishes itself from siblings by stating what it is not ('not the chat transcript, and not a way to edit'). An agent can identify this as a status/polling tool 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the exact triggering conditions (after edit_document or create_document), the polling loop (call until status is idle, then fetch), and the alternative to use for mutation (edit_document). This is explicit when-to-use, when-to-stop, and what-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_actionsARead-onlyIdempotentInspect
List the installed ProductNow actions this user can view. Call this before starting an action, so you know each action's id and whether it needs runtime input. Webhook actions include runtimeInputSchema, the JSON Schema of the object to supply. Schedule and event actions set runtimeInputSchema to null and take no runtime input. A paused action is still listed. This does not start a run.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| actions | Yes | Accessible actions, in the same order listActions returns them. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior. The description adds useful context beyond annotations: webhook actions expose runtimeInputSchema, schedule/event actions set it to null, paused actions remain listed, and it does not start a run. Permissions are implied by 'this user can view', though auth/rate-limit details are not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence front-loads the resource and scope, and each subsequent sentence adds actionable behavior: pre-run use, runtimeInputSchema rules, paused-action edge case, and the fact that it does not start a run. There is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not detail return values, and annotations cover safety traits. It supplies the pre-call workflow, runtime-input distinctions, and paused caveat, which is complete enough for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero input parameters and an empty schema, so the baseline is 4. The description explains runtimeInputSchema as an output field for action configuration, but there are no input parameters needing clarification.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('installed ProductNow actions this user can view'), including the user-viewable scope. The final sentence distinguishes it from run_action by clarifying that it does not start a run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call this before starting an action so the agent knows each action's id and runtime-input needs, which ties it to run_action. It lacks a direct 'do not use if...' exclusion or named alternative, but the usage 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_document_versionsARead-onlyIdempotentInspect
List every version of a document when the user asks what changed, or you need an older version before calling fetch. Pass documentId. Returns each version's id, version number, status, and when it was created, newest first. Pass a returned documentVersionId to fetch with the documentId to read that version and its comments. Omit it and fetch reads the latest draft.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter by version status: DRAFT, REVIEW, PUBLISHED, SNAPSHOT, OUTDATED, or ARCHIVED. Omit to return every version. These are statuses, not the snapshot, review, and publish action verbs accepted by update_document_status. | |
| documentId | Yes | The ID of the document whose versions to list |
Output Schema
| Name | Required | Description |
|---|---|---|
| versions | Yes |
TDQS
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. The description adds genuine context beyond them: the ordering of results (newest first), the fields returned per version, and the follow-up fetch contract. A minor gap is that filtering by status is only surfaced in the schema, not the prose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then return shape, then the fetch workflow, with no filler sentences. It runs slightly long for a two-parameter list tool, but the fetch chaining information justifies the extra length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and return values would not need restating, yet the description still supplies ordering and the downstream fetch contract. Combined with the schema's status enum documentation, an agent has everything needed to call it and use its results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both documentId and the status enum are fully documented in the schema itself. The description only repeats "Pass documentId" and adds no syntax or semantic detail beyond it, which is the baseline case 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List every version of a document") and implicitly separates itself from siblings like fetch and update_document_status. An agent can identify this as the version-listing tool 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit triggers ("when the user asks what changed, or you need an older version before calling fetch") and names the complementary tool fetch, including the exact contract (pass returned documentVersionId to fetch, omit it for the latest draft). Both when-to-use and how it chains to alternatives are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moveADestructiveInspect
Move documents or folders into another folder, including several at once. Pass ids, a mix of document ids and folder ids, plus one parentFolderId. Omit parentFolderId to file everything at the root. Does not change document content — use edit_document for that. Moves every id it can. Ids the user cannot move come back in permissionDeniedIds. A folder moved into itself or into one of its descendants comes back in refusedIds and stays where it is. Ids that are not a document or folder here come back in unresolvedIds. The rest are still moved.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Document ids and folder ids to move, mixed together. Use fetch for a document and fetch_folder for a folder. | |
| parentFolderId | No | The folder to move every id into. Omit to move them all to the root. |
Output Schema
| Name | Required | Description |
|---|---|---|
| refusedIds | Yes | Folder ids left in place because the destination is the folder itself or one of its descendants. |
| unresolvedIds | Yes | |
| movedFolderIds | Yes | |
| movedDocumentIds | Yes | |
| permissionDeniedIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive/mutating behavior, and the description goes well beyond them by disclosing partial-failure semantics: it moves every id it can, and reports permissionDeniedIds, refusedIds (self/descendant folder loops), and unresolvedIds while still moving the rest. This is exactly the failure-mode context an agent needs for a destructive batch operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and its key constraint are front-loaded, and every following sentence carries non-redundant information about partial success and per-id failure buckets. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, yet the description still helpfully names the failure result fields; annotations cover the safety profile. For a two-parameter destructive batch tool, nothing needed 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are already documented in the schema, including the root-filing behavior of omitting parentFolderId. The description restates the same semantics ('a mix of document ids and folder ids', 'Omit parentFolderId to file everything at the root') without adding syntax or format detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resources ('Move documents or folders into another folder'), plus explicit scope detail (multiple ids, mixed document/folder ids). It distinguishes itself from the sibling edit_document by stating it does not change content, so an agent can route correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Covers when to use (moving one or many items), how to target the root (omit parentFolderId), and when to use an alternative tool ('Does not change document content — use edit_document for that'). The only unstated alternative is archive, which is a minor omission.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rememberADestructiveInspect
Store one piece of information in ProductNow when the user says 'remember this', 'save this', or 'note that…' about their company, product, customers, or team. Pass the fact as content; ProductNow decides where it belongs — it searches the warehouse, edits the existing document that covers the topic, or creates a new one in the right folder. ProductNow handles search, folder selection, and document choice within the background job, so separate search, fetch, or placement is not needed. Returns success immediately; a success response means the job was queued and processing continues in the background. Polling is not supported. Use edit_document or create_document instead only when the user already named the exact document or outlined a whole new document.
| Name | Required | Description | Default |
|---|---|---|---|
| hint | No | Optional placement hint: a document or folder name, or a topic the user named. Omit it rather than passing a blank string. | |
| content | Yes | The information to remember, verbatim. Include the context needed to understand it on its own (who, what, when). Cannot be blank. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the async contract: an immediate success response only means the job was queued, and polling is not supported. It also explains the internal placement behavior (search warehouse, edit existing doc, or create new) that justifies destructiveHint=true, and confirms no extra search/fetch steps are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the trigger phrases and the core action, then layers async semantics and alternatives. Four sentences with minimal waste, though the alternative-tool sentence is slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists and annotations cover the safety profile, the description fills the remaining gaps: async/background semantics, lack of polling, and routing to edit_document/create_document. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: content is 'the fact' to store and the hint is unnecessary when ProductNow chooses placement itself. It does not, however, elaborate on the verbatim/context requirements already captured in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (store one piece of information in ProductNow) plus the triggering user phrases. It distinguishes itself from edit_document, create_document, and search by explicitly declining their roles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use triggers ('remember this', 'save this', 'note that…'), what not to do (no separate search/fetch/placement needed), and names the alternatives (edit_document, create_document) with the precise 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.
renameADestructiveIdempotentInspect
Change a document or folder's name. Pass one id — a document id or a folder id — and name. Changes the name only. Does not change document content; that is edit_document. One item per call, because each item gets its own name.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The document id or folder id to rename. Use fetch for a document and fetch_folder for a folder. | |
| name | Yes | The new name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| kind | Yes | document or folder |
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so safety/idempotency are covered. The description adds meaningful scope context beyond them: only the name changes, content is untouched, and each call touches exactly one item. It does not describe permission requirements or failure behavior, keeping it short of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and scope; each sentence carries distinct information (what changes, what doesn't, the sibling for content edits, the one-item constraint). No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with an output schema and full schema coverage, the description supplies the remaining essentials: scope of the change, the batching constraint, and the boundary against edit_document. Nothing an agent needs 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.
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 in the schema, including the id/folder-id distinction and the fetch pointers. The description's 'Pass one id' adds only marginal emphasis, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Change a document or folder's name') and immediately scopes it against the nearest sibling by ruling out content changes ('that is edit_document'). An agent can distinguish rename from edit_document, move, and archive 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative for content changes and states the batching constraint ('One item per call'). It stops short of clarifying when to prefer rename over move or archive for reorganizing items, so it is clear context rather than full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_threadAInspect
Reply to an existing comment thread on a document, posted as the user's personal agent. Not an edit — use edit_document to change the document's content. Pass threadId from a document fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | The reply message to post in the thread | |
| threadId | Yes | The ID of the comment thread to reply to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false. The description adds genuinely new context: the reply is posted as the user's personal agent, which tells the agent the authorship identity and implies a visible write side effect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler, with the core action stated first, the exclusion second, and the parameter hint last.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and the two required params are covered. Everything needed to select and call the tool correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so the baseline is 3, but the description adds provenance for threadId ("from a document fetch"), which the schema itself does not explain — a real, useful addition to a required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (reply) and resource (existing comment thread on a document) plus the acting identity. It is immediately distinguishable from document-mutating siblings like edit_document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly excludes the wrong tool ("Not an edit — use edit_document") and tells the agent where the threadId comes from. It does not, however, clarify when to reply to an existing thread versus starting one with comment_on_document.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_actionADestructiveInspect
Start an installed ProductNow action and return immediately. Call list_actions first and pass its actionId. When runtimeInputSchema is null, pass runtimeInput as null. When it is an object, pass runtimeInput that matches that schema. An empty object is valid when the schema has no required fields. A paused action can still be started. The run continues after this returns.
| Name | Required | Description | Default |
|---|---|---|---|
| actionId | Yes | Installed action to start. Use an actionId from list_actions. | |
| runtimeInput | Yes | Runtime input for an action. Pass null when runtimeInputSchema is null. An empty object is valid when the schema has no required fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | Workspace URL that opens this run. |
| actionRunId | Yes | The run that was queued. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavior beyond the annotations by disclosing the asynchronous contract ("return immediately", "the run continues after this returns") and the non-obvious rule that a paused action can still be started. It stops short of warning that the annotations mark this as destructive and open-world, so the agent gets no signal about side effects outside ProductNow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Six short sentences, front-loaded with the verb and the async behavior, then prerequisites, then parameter edge cases. Nothing is padded and each sentence carries a distinct instruction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the async and paused-action semantics fill the main behavioral gap. Slightly incomplete because it never mentions failure modes, retry behavior, or the destructive side effects flagged in annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains actionId provenance and the null/empty-object rules for runtimeInput. The description restates those same null-versus-object rules with no added syntax, format, or example, so this is baseline territory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Start an installed ProductNow action and return immediately" names a specific verb and resource, and the immediate-return qualifier instantly separates it from siblings like list_actions or get_status. An agent can tell what the tool does 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly requires calling list_actions first to obtain the actionId, which is the key prerequisite. It does not, however, state when an agent should avoid this tool or what the alternatives are for monitoring or retrying a run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchARead-onlyIdempotentInspect
Search the company's shared context — its intranet of documents, decisions, meeting notes, and synced systems — and return excerpts relevant to the user's question, with citations. Every source carries the document's id, title, and url; pass the id to fetch for the full text. Use this when the user's request depends on current information about their company, product, customers, team, or enterprise intranet. Covers ProductNow documents (PRDs, specs, RFCs, decisions) plus content synced from whichever sources the workspace has connected, e.g. GitHub, Jira, Linear, Salesforce, ServiceNow, Zendesk, Slack, Teams, Confluence, Notion, Google Drive, and meeting notes. Not for reading a known document in full (fetch) or listing a folder (fetch_folder). To find a folder by name, pass resultType folders. Pass query whenever the user names a topic, including when filters are also present. If the user asks only which documents match creator/date filters and names no topic, omit query to list documents by latest content edit; listing sources contain metadata but no excerpts. creatorNames matches document creators, not editors or contributors; its entries combine with OR, while creator and date filters combine with AND. Search workspace documents by default; use product_help only for questions about how ProductNow works. Pass folderId to limit workspace search to that folder and every folder nested under it; no results come from outside it. Omit folderId to search the whole workspace. Resolve the id with fetch_folder first. Ignored when searchScope is product_help. Pass resultType folders to search folder names instead of documents. Omit resultType to search documents. Folder results are name matches and include each folder's id, name, updatedAt, createdBy, isPrivate, parentFolderId when nested, and folderPath (the parent path) when it has a parent. They have no excerpts. A query is required. creatorNames and date filters apply to documents only. product_help cannot search folders. Topic-search results are relevance-filtered; all result sets are capped. Each source includes the document's folderId and folderPath when it is filed in a folder, and omits both when the document is at the warehouse root. Answer from the excerpts when possible, cite the documents you use, read a source document with fetch only when its excerpts are genuinely insufficient, and state uncertainty when evidence is weak or conflicting.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | The question or topic to research in ProductNow knowledge. Omit (or pass an empty string) if the user didn't name one — see the tool description for what happens then. | |
| folderId | No | Limit workspace search to this folder and its subfolders. Omit to search the whole workspace. Resolve the id with fetch_folder first. Applies to documents and, when resultType is folders, to folders. Ignored when searchScope is product_help. | |
| resultType | No | Set to folders to search folder names instead of documents. Omit to search documents. Folder search requires a query, ignores creatorNames and date filters, and does not apply when searchScope is product_help. | |
| searchScope | No | Search workspace documents by default, or use product_help to exclusively search ProductNow help documentation | |
| creatorNames | No | Restrict results to documents created by one of these workspace users. Each entry is a name/email substring and may match several users; use a full email for precision. Entries combine with OR. Pass "me" for the calling user. If no entry resolves, the search returns no results. An empty list is treated the same as omitting this field. | |
| updatedAfter | No | Restrict results to documents whose latest active content edit is on or after this date (YYYY-MM-DD), interpreted as UTC. Compute this yourself for relative ranges like "the past 2 weeks". Omit for no lower bound. | |
| updatedBefore | No | Restrict results to documents whose latest active content edit is on or before this date (YYYY-MM-DD), inclusive of the entire day (UTC). Must be on or after updatedAfter. Omit for no upper bound. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | Normalized query; empty means the tool used listing mode |
| folders | No | Folders whose names match the query, best match first. Present only when resultType is folders. Capped. |
| sources | Yes | Relevant documents, capped by the tool's source limit |
| failedSources | Yes | Matches whose fallback read failed; they remain in sources with evidenceSource unavailable. Empty when resultType is folders. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds genuinely new behavior: result sets are relevance-filtered and capped, listing sources carry metadata but no excerpts, folder results carry a specific field set, and folderId limits to nested subfolders. It also gives grounding instructions (answer from excerpts, cite, state uncertainty), 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is bloated and repetitive — 'Resolve the id with fetch_folder first. Ignored when searchScope is product_help.' appears near-verbatim twice, and folder/filter behavior is restated. It is also poorly front-loaded: the core routing guidance is buried under long enumeration of synced sources. Substantial trimming is warranted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter search tool with an output schema present, the description covers scope, result types, filter semantics, return shapes per result type, and how to consume results. An agent has everything needed to invoke and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter and the baseline is 3. The description goes beyond it by stating cross-parameter rules the schema does not: creatorNames entries combine with OR while creator and date filters combine with AND, and folder search ignores creatorNames and date filters. That added interaction logic justifies a step above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search the company's shared context ... return excerpts relevant to the user's question, with citations') and explicitly distinguishes itself from fetch and fetch_folder. An agent can tell it apart from every sibling 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('user's request depends on current information about their company...'), when-not ('Not for reading a known document in full (fetch) or listing a folder (fetch_folder)'), and routes to the product_help alternative. The decision rules for query, folderId, and resultType are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_document_statusADestructiveInspect
Change a document's lifecycle when the user wants a snapshot, a review, or to publish. Pass documentId and status as an action verb — snapshot, review, or publish — not a version status. snapshot saves a read-only copy of the current draft, review opens that draft for comments, and publish makes it the published version. Each one leaves a fresh draft for later edits. Returns previousStatus and status as version statuses such as DRAFT, SNAPSHOT, REVIEW, or PUBLISHED, the same values list_document_versions filters on. Not move, which files documents and folders into a folder, and not a way to check whether an edit is still running.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | Action verb, not a version status. snapshot saves a read-only copy of the current draft. review opens that draft for comments. publish makes it the published version. Do not pass DRAFT, REVIEW, PUBLISHED, or SNAPSHOT — those are the statuses list_document_versions returns and filters on. | |
| documentId | Yes | The document whose current draft should change status. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | Version status after the change, such as SNAPSHOT, REVIEW, or PUBLISHED. Not an action verb. |
| documentId | Yes | |
| previousStatus | Yes | Version status before the change, such as DRAFT. Not an action verb. |
| documentVersionId | Yes | |
| newDraftDocumentVersionId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=true, and non-idempotent, so the safety profile is covered. The description adds genuine behavioral context beyond that: the side effect that each action leaves a fresh draft for later edits, and the return contract (previousStatus/status). It does not discuss reversibility or permissions, but with annotations carrying the destructive signal this is a solid contribution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then verb semantics, then return values, then exclusions, so the agent can stop reading early. Slightly redundant because the verb-to-effect mapping is repeated verbatim in the schema, but the description remains dense and purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with an output schema and full annotation coverage, the description supplies everything needed: when to call it, what each enum does, what it returns, and what it is not. No material gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes further by framing 'status' as an action verb, warning against passing version statuses, and mapping each enum value to its effect and its resulting return values, which helps the agent avoid a common invocation error.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource (change a document's lifecycle) and enumerates the exact operations (snapshot, review, publish) with what each does. It actively differentiates from siblings by naming 'move' as the wrong tool and distinguishing the action verbs from version statuses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit triggering condition is given ('when the user wants a snapshot, a review, or to publish'), alternatives are ruled out ('Not move, which files documents and folders into a folder'), and a mistaken usage is precluded ('not a way to check whether an edit is still running').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_mediaAInspect
Upload a media file (image or video) to ProductNow storage. Returns a signed backend uploadUrl valid for 5 minutes for transfer of the user-selected file. Also returns a url and htmlText you can embed in documents immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| fileName | Yes | Original file name including extension (e.g. 'screenshot.png', 'recording.mp4') | |
| mimeType | Yes | MIME type of the file. Allowed: image/png, image/jpeg, image/gif, image/webp, video/mp4, video/webm, video/quicktime |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| htmlText | Yes | |
| uploadUrl | Yes | |
| storageObjectId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/openWorld/non-idempotent profile, and the description adds real value on top: a two-step flow where the returned signed `uploadUrl` is valid only 5 minutes and the actual transfer happens afterwards. That timeout and flow detail is not derivable from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero filler, and the core action is front-loaded before the return-value details. Every sentence carries a distinct fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, but the description usefully clarifies the two-step upload semantics and the 5-minute expiry. It stops short of stating auth requirements or what happens if the signed URL expires mid-transfer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both parameters documented including allowed MIME types, so the baseline is 3. The description adds no parameter-level detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Upload a media file (image or video) to ProductNow storage.' The parenthetical even scopes the accepted file categories, so 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the agent can infer this is the tool for getting a file into storage, but there is no explicit when-to-use, no prerequisites (e.g. auth/workspace requirement), and no mention of alternatives. No sibling upload tool exists to route against, which softens the gap.
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.
2 tool updates
- Added
list_actions - Added
run_action
1 tool update
- Changed
create_document1 field changed- changed
Input schema / properties / context / descriptionPrevious value: -"Supporting context or notes to attach as a .txt file — read from a referenced file if the user names one"New value: +"Supporting material supplied by the user or explicitly authorized for this document. ProductNow attaches it as a .txt file for generation."
29 tool updates
- Added
archive - Added
comment_on_document - Changed
create_document1 field changed- changed
Input schema / properties / folderId / descriptionPrevious value: -"Folder ID to place the document in — use list_folders to find the target folder"New value: +"Folder to file the document in. Find it with search and fetch_folder before this call. Omit only when the user explicitly asked to create the document at the warehouse root."
- Removed
create_document_comment - Changed
create_folder1 field changed- changed
Input schema / properties / parentFolderId / descriptionPrevious value: -"The ID of the parent folder to nest the new folder inside. Omit to create a root-level folder."New value: +"Folder to nest under. Search with resultType folders, or walk with fetch_folder, and pass the closest related folder's id. Omit only when the user explicitly asked for a root-level folder."
- Added
edit_document - Added
fetch - Added
fetch_folder - Removed
get_document - Removed
get_document_chat - Removed
get_document_feedback - Removed
get_document_threads - Added
get_status - Removed
get_thread_messages - Removed
import_prototype - Changed
list_document_versions1 field changed- changed
Input schema / properties / status / descriptionPrevious value: -"Filter versions by status. Omit to return all versions regardless of status."New value: +"Filter by version status: DRAFT, REVIEW, PUBLISHED, SNAPSHOT, OUTDATED, or ARCHIVED. Omit to return every version. These are statuses, not the snapshot, review, and publish action verbs accepted by update_document_status."
- Removed
list_folders - Removed
list_help_documents - Added
move - Removed
move_document_to_review - Removed
post_document_chat_message - Added
remember - Added
rename - Changed
reply_to_thread1 field changed- changed
Input schema / properties / threadId / descriptionPrevious value: -"The ID of the comment thread to reply to. Use get_document_threads to find thread IDs."New value: +"The ID of the comment thread to reply to."
- Added
search - Removed
search_folders - Removed
search_knowledge_warehouse - Removed
switch_document_chat_edit_mode - Added
update_document_status
1 tool update
- Changed
create_document2 fields changed- added
Input schema / properties / templateIdAdded value: +{ + "description": "Template ID — pass when applying a specific template", + "type": "string" +} - removed
Input schema / properties / templateVersionIdRemoved value: -{ - "description": "Template version ID — pass when applying a specific template", - "type": "string" -}
1 tool update
- Changed
post_document_chat_message2 fields changed- removed
Input schema / properties / documentVersionIdRemoved value: -{ - "description": "The ID of the document version to post a chat message to", - "type": "string" -} - changed
Input schema / requiredPrevious value: -[ - "documentId", - "documentVersionId", - "message" -]New value: +[ + "documentId", + "message" +]
20 tool updates
- First observed
create_document - First observed
create_document_comment - First observed
create_folder - First observed
create_help_document - First observed
get_document - First observed
get_document_chat - First observed
get_document_feedback - First observed
get_document_threads - First observed
get_thread_messages - First observed
import_prototype - First observed
list_document_versions - First observed
list_folders - First observed
list_help_documents - First observed
move_document_to_review - First observed
post_document_chat_message - First observed
reply_to_thread - First observed
search_folders - First observed
search_knowledge_warehouse - First observed
switch_document_chat_edit_mode - First observed
upload_media
Publisher details
- Operator
- ProductNow
- Operator website
- https://productnow.ai/
- Vendor relationship
- First-party
- Documentation
- https://github.com/ProductNowAI/productnow-mcp
- Trust center
- https://productnow.ai/support
- Restrictions
- Not applicable
Related MCP Connectors
- Connext MCPOAuthcom.rti
Integrate Connext AI into agentic workflows, enabling Connext product-aware assistance.
Connect AI agents to shared product marketing intelligence in Calven.
Connect AI agents to 1000+ apps with managed authentication and tool-calling.
Connect AI agents to Prosyo to query pipeline metrics, search B2B prospects, and manage multichannel LinkedIn and cold email outreach.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables coding agents to access structured product context (decisions, goals, evidence) from meetings and tools, ensuring they build from actual product decisions.01MIT

Atono MCP Serverofficial
AlicenseNot gradedqualityCmaintenanceConnects AI coding tools to an Atono workspace, offering 41 tools to read and write stories, bugs, epics, subtasks, acceptance criteria, timeboxes, glossary, and AI context so agents work with real product knowledge.Apache 2.0
Airframe MCP Clientofficial
AlicenseNot gradedqualityBmaintenanceConnects AI agents to Airframe's product intelligence and expert network, enabling product search, comparison, expert discovery, and market research queries.28 npmMIT- AlicenseNot gradedqualityDmaintenanceEnables AI coding agents to access persistent, structured product context (personas, journeys, specs, decisions, domain rules) on demand, eliminating the need to re-explain product knowledge each session.9 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.