listDocuments
List AND grep documents in a project, workspace, or folder. query does a full-content search across each document's body (not just the title) and returns the matching lines — like grep across your docs. Each returned document includes contentMatches: [{line, text, context?}] and matchCount; the t...
This record as markdown: /tools/io-stablebaseline-sb/listdocuments.md
What listDocuments does on Stable Baseline
AI agents call listDocuments to retrieve information from Stable Baseline without modifying anything. It is typically the context-gathering step in research, monitoring, and reporting workflows, before the agent takes action elsewhere.
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | number | — | |
query | string | — | Search text. Matched against title, friendlyId AND full document content. Returns the matching lines per document (grep). Case-insensitive unless caseSensitive: |
fields | array | — | Field projection for the document metadata. Valid fields: id, title, friendlyId, friendlyIdNumber, projectId, folderId, createdAt, updatedAt, href. (contentMatc |
offset | number | — | Pagination offset over the MATCHES. When searching, use scanOffset (not this) to reach documents the scan has not covered. |
toDate | string | — | ISO 8601 date filter (to). |
isRegex | boolean | — | Treat `query` as a JavaScript regular expression (grep -E). Default false (literal substring). Regex search requires a project/workspace/folder scope and scans |
folderId | string | — | |
fromDate | string | — | ISO 8601 date filter (from). |
timeZone | string | — | The IANA time zone the window and its times are in, such as Australia/Sydney. Default: the person's own (the zone their browser last saved), else UTC. |
dateField | string | — | Date field to filter. Default: updated_at. |
projectId | string | — | |
scanOffset | number | — | Search-only. Where to start the document scan within the scope. One call examines a bounded window; when the response reports truncated:true it also returns nex |
Parameters from the server's own tool schema.
Why listDocuments is rated Low
Even though listDocuments only reads data, uncontrolled read access leaks sensitive information and racks up API costs: an agent caught in a retry loop can make thousands of calls a minute without anyone noticing.
Risk signalsHigh parameter count (18 properties)
Attacks that exploit this kind of access
The rule that runs listDocuments safely
PolicyLayer is an MCP gateway: it sits between your AI agents and Stable Baseline, and checks every tool call against a rule you set before the call runs. Nothing changes on the server itself. For listDocuments, this is the rule to start with:
listDocuments is read-only, so it stays allowed. Everything else on the server is denied unless you say otherwise.
The button opens the PolicyLayer dashboard: create your workspace, connect Stable Baseline, apply this rule, and every listDocuments call is checked against it from then on.
Questions about listDocuments
List AND grep documents in a project, workspace, or folder. query does a full-content search across each document's body (not just the title) and returns the matching lines — like grep across your docs. Each returned document includes contentMatches: [{line, text, context?}] and matchCount; the text is anchor-ready (paste it straight into editDocument's oldText). Use isRegex:true for regular-expression search (e.g. "TODO\(.*\)", "ACME-\d+"), caseSensitive for exact case, and contextLines for surrounding lines (grep -C). versionTimestamp is returned per document so you can edit straight from the results without a getDocument round-trip. Also supports date filtering. SCOPE HONESTY — read this before concluding something is absent: only documents that actually matched are returned (a document is never listed with matchCount 0 just because it was in scope), and the grep block reports scannedDocuments against totalDocumentsInScope. When truncated is true the search covered only part of the scope, so an absence is NOT proof; repeat with scanOffset set to the returned nextScanOffset until that field is gone, and union the results. A document too large to read is returned with contentSearchSkipped: true and NO matchCount, because its body was never searched. WHAT CHANGED: give changedSince (a period such as this_week, or a date) to list only the documents added or edited in that time, newest change first, each with change: added or edited, when (in words, in the person's time zone), by whom (a person's name, and the agent's key when one did it) and the versions saved meanwhile. With no projectId, workspaceId or folderId it covers your whole organisation. Only documents the caller may open are listed. For how one changed, call listDocumentVersions with the same changedSince and compare:true. Not with query. It is categorised as a Read tool in the Stable Baseline MCP Server, which means it retrieves data without modifying state.
listDocuments accepts 12 parameters: limit, query, fields, offset, toDate, isRegex, folderId, fromDate, timeZone, dateField, projectId, scanOffset. The full parameter table on this page comes from the server's own tool schema.
Register the Stable Baseline MCP server in PolicyLayer and add a rule for listDocuments: allow, deny, rate-limit, or require approval. Point your MCP client at the PolicyLayer proxy URL and the rule is enforced on every call, before it reaches Stable Baseline. Nothing to install.
listDocuments is a Read tool with low risk. Read-only tools are generally safe to allow by default.
Yes. Add a rate_limit block to the listDocuments rule in your PolicyLayer policy. For example, setting max: 10 and window: 60 limits the tool to 10 calls per minute. Rate limits are tracked per agent session and reset automatically.
Set action: deny in the PolicyLayer policy for listDocuments. The AI agent will receive a policy violation error and cannot call the tool. You can also include a reason field to explain why the tool is blocked.
listDocuments is provided by the Stable Baseline MCP server (https://api.stablebaseline.io/functions/v1/cloud-serve/mcp). PolicyLayer sits as a proxy in front of this server to enforce policies before tool calls reach the server.
More on Stable Baseline, and thousands of servers like it.
This server
Across the catalogue