docmost-mcp-remote
Use it as a team-shared remote MCP server for Docmost: each member signs in as themselves, and their AI client can read, search, edit, organize, export, and administer wiki content within granted scopes.
Read & discover: spaces, page trees, pages/sections/outlines, recent pages, full-text search, suggestions, comments, page history, snapshots, diffs, backlinks, labels, attachments, and trash.
Write & organize: create/update pages, replace sections or ProseMirror JSON, rename/move/duplicate pages, add/update comments, add/remove labels, restore page versions/snapshots, and trash/restore pages.
Files & export: create browser upload links, upload base64 attachments, list/download attachments, and export pages or spaces as Markdown/HTML/zip.
Admin: create/update spaces, manage space members/roles, manage groups, invite/resend/revoke invitations, change workspace roles, and activate/deactivate members.
Auth & safety: OAuth 2.1 or personal tokens, per-client read/write/delete/admin scopes, snapshots before changes, read-back checks, confirmation prompts, busy-page protection, untrusted-content labeling, audit log, and rate limits.
MCP extras: resources for spaces/pages and prompts for summarizing, answering from the wiki, what changed, drafting, and tidying pages.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@docmost-mcp-remotesearch the wiki for our onboarding docs and summarize the setup steps"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
docmost-mcp-remote
Let your team's AI assistants read and edit your Docmost wiki, each member as themselves.
A self-hosted remote MCP server for Docmost Community Edition.
English · Русский
Highlights · Comparison · Quick start · Connect a client · Tools · Security · Configuration · Feedback
Run it next to your Docmost, put it behind your domain, and connect Claude, Claude Code, Cursor, VS Code or any other MCP client. Every member signs in with their own Docmost account, so the assistant sees exactly what they can see and every change in Docmost carries their name.
Independent community project, not affiliated with or endorsed by Docmost, Inc. Docmost is a trademark of Docmost, Inc.; the name is used only to say which software this server works with.
✨ Highlights
👥 One server for the whole team. Each member signs in once in the browser with their own Docmost account. Everything their AI client does is done as them, with their Docmost rights.
🔐 Real authorization. OAuth 2.1 for remote connectors (Claude.ai, Claude Desktop, Claude Code, Cursor, VS Code) and personal tokens for scripts. There is no unauthenticated mode.
🛡️ Safe by default. Only
readis granted without asking;write,deleteandadminare opt-in per client. Nothing is deleted permanently, risky changes ask you first, and an encrypted snapshot of a page is saved before every change.🧰 62 tools. Read, search, write by section, comment with @-mentions, move, label, export, restore old versions, check a space's health and run the workspace: spaces, groups, invitations and roles.
📎 Files without burning tokens. The assistant gives you an upload link: drop files in the browser, put them in order, and they land in the right place of the page.
🐳 Easy to host. One container plus Postgres with a ready
compose.yaml, orpip install. Tested in CI against Docmost 0.80.1 to 0.97.
⭐ If this server is useful to you, please star the repository. It helps other Docmost users find it and tells us the work is worth continuing.
Related MCP server: MediaWiki MCP Server
🆚 How it compares
There are several open-source MCP servers for Docmost Community Edition. Most of them run on one person's machine with one shared Docmost account. This one is built to be shared by a team.
Feature | This server | Other Docmost CE MCP servers |
Remote server for many people, with OAuth 2.1 sign-in | ✅ | ❌ |
Each member acts with their own Docmost account and rights | ✅ | ❌ |
Per-client scopes, read-only by default | ✅ | ⚠️ a global read-only switch at most |
Nothing is deleted permanently | ✅ | ❌ |
Encrypted snapshot before every change, with restore | ✅ | ❌ |
Write is read back and checked | ✅ | ⚠️ rare |
Risky changes ask you first in the client (MCP elicitation) | ✅ | ⚠️ rare |
Rewrites refused while someone else is editing the page | ✅ | ⚠️ rare |
Edit one section, refused if it changed since it was read | ✅ | ⚠️ rare |
Upload files through a browser link, no tokens spent | ✅ | ❌ |
Restore a page version with all formatting | ✅ | ⚠️ rare |
Page content marked as untrusted for the model | ✅ | ⚠️ rare |
Audit log and per-member rate limits | ✅ | ❌ |
Space health check: stale, empty and duplicate pages, broken links | ✅ | ⚠️ rare |
Workspace admin: invitations, roles, groups | ✅ | ⚠️ rare |
Resources and prompts as well as tools | ✅ | ⚠️ rare |
Releases on PyPI, ghcr.io and the MCP Registry, CI on several Docmost versions | ✅ | ⚠️ rare |
Based on the public Docmost CE MCP servers we could find in October 2026. They are good choices for a single person working locally over stdio, and some offer things this server does not, such as permanent deletion.
🧭 How it works
The first time a client connects, the member signs in with their Docmost email and password and picks what the client may do. They can see and revoke every connected app and token on their account page.
🚀 Quick start
You need Docker with Compose, a Docmost reachable from the server, and a host
name with https for the server itself, for example mcp.example.com.
Download the compose file and the settings template:
mkdir docmost-mcp && cd docmost-mcp curl -fsSLO https://raw.githubusercontent.com/bbik52/docmost-mcp-remote/master/compose.yaml curl -fsSL -o .env https://raw.githubusercontent.com/bbik52/docmost-mcp-remote/master/.env.exampleEdit
.env: setPUBLIC_URL(the https URL of this server),DOCMOST_URL, a long randomPOSTGRES_PASSWORDandSECRET_KEY(openssl rand -hex 32gives a good value for both). ConsiderALLOWED_EMAILSto limit who can sign in.Start it and check that it is up:
docker compose up -d curl http://127.0.0.1:8000/healthzPut a reverse proxy with https in front of
127.0.0.1:8000(see Reverse proxy) and openPUBLIC_URL/loginin a browser to check that you can sign in with your Docmost account.Connect a client (see Connecting a client).
The server applies its database migrations at startup. Back up the Postgres
volume like you back up Docmost: it holds the encrypted sessions, the
snapshots and the audit log. Losing SECRET_KEY signs every member out and
makes the snapshots unreadable.
# docmost-mcp-remote: the server and its Postgres.
# Copy .env.example to .env and fill in the required values first, then put a
# reverse proxy with https in front of port 8000.
services:
server:
# "1" follows 1.x releases; set IMAGE_TAG to a full version such as 1.1.0 to pin one.
image: ghcr.io/bbik52/docmost-mcp-remote:${IMAGE_TAG:-1}
restart: unless-stopped
environment:
PUBLIC_URL: ${PUBLIC_URL:?set PUBLIC_URL to the public https URL of this server}
DOCMOST_URL: ${DOCMOST_URL:?set DOCMOST_URL to the base URL of your Docmost}
DOCMOST_ALLOW_INSECURE_HTTP: ${DOCMOST_ALLOW_INSECURE_HTTP:-false}
DATABASE_URL: postgresql://docmost_mcp:${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD}@postgres:5432/docmost_mcp
SECRET_KEY: ${SECRET_KEY:?set SECRET_KEY to a random value of at least 32 characters}
SECRET_KEY_PREVIOUS: ${SECRET_KEY_PREVIOUS:-}
ALLOWED_EMAILS: ${ALLOWED_EMAILS:-}
ALLOWED_SPACES: ${ALLOWED_SPACES:-}
RELOGIN_MODE: ${RELOGIN_MODE:-ask}
SNAPSHOT_RETENTION_DAYS: ${SNAPSHOT_RETENTION_DAYS:-30}
AUDIT_RETENTION_DAYS: ${AUDIT_RETENTION_DAYS:-90}
UPLOAD_RETENTION_MINUTES: ${UPLOAD_RETENTION_MINUTES:-60}
UPLOAD_MAX_MB: ${UPLOAD_MAX_MB:-50}
TOOL_CALLS_PER_MINUTE: ${TOOL_CALLS_PER_MINUTE:-60}
MAX_PAGE_CHARS: ${MAX_PAGE_CHARS:-60000}
# Proxies on loopback or a private network; the client address is the last
# untrusted one in X-Forwarded-For, so a header sent by the client is ignored.
FORWARDED_ALLOW_IPS: ${FORWARDED_ALLOW_IPS:-127.0.0.1,::1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,fc00::/7}
LOG_LEVEL: ${LOG_LEVEL:-info}
ports:
- "127.0.0.1:8000:8000"
depends_on:
postgres:
condition: service_healthy
read_only: true
tmpfs:
- /tmp
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
postgres:
image: postgres:17-alpine
restart: unless-stopped
environment:
POSTGRES_USER: docmost_mcp
POSTGRES_DB: docmost_mcp
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U docmost_mcp -d docmost_mcp"]
interval: 10s
timeout: 5s
retries: 5
volumes:
postgres-data:The server is also on PyPI (pip install docmost-mcp-remote or
uvx docmost-mcp-remote) for setups without containers; it needs Postgres
and the same settings as environment variables.
Reverse proxy
The server listens on plain http and expects a reverse proxy that terminates https. Serve it at the root of its own host name; a sub-path is not supported. The proxy must not buffer responses, because MCP streams them.
Caddy (gets certificates by itself):
mcp.example.com {
reverse_proxy 127.0.0.1:8000
}server {
listen 443 ssl;
server_name mcp.example.com;
ssl_certificate /etc/letsencrypt/live/mcp.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mcp.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_read_timeout 1h;
}
}The server uses X-Forwarded-For for its per-IP rate limits. The proxy must
set the header to the address it sees, not pass on what the client sent: the
nginx example above does that with $remote_addr, and Caddy and Traefik do it
by default. The compose file trusts proxies on loopback and private networks
(FORWARDED_ALLOW_IPS); if your proxy reaches the server from a public
address, set it to that address.
🔌 Connecting a client
The MCP endpoint is PUBLIC_URL/mcp, for example
https://mcp.example.com/mcp. Clients that support MCP authorization open a
browser window: sign in with your Docmost email and password and choose what
the client may do. read is always granted; tick write, delete or
admin only for clients you trust.
Give clients the full endpoint, ending in /mcp. The server's base URL alone
is refused with invalid_target. After "Allow" a page sends you back to the
app; if the browser asks whether to open a desktop app such as Cursor, allow
it, or use the link on the page.
Settings, Connectors, Add custom connector, then enter the endpoint URL. The server must be reachable from the internet over https for Claude.ai.
claude mcp add --transport http docmost https://mcp.example.com/mcpThen run /mcp in Claude Code to sign in.
~/.cursor/mcp.json:
{
"mcpServers": {
"docmost": { "url": "https://mcp.example.com/mcp" }
}
}.vscode/mcp.json:
{
"servers": {
"docmost": { "type": "http", "url": "https://mcp.example.com/mcp" }
}
}Open
PUBLIC_URL/loginand sign in with your Docmost email and password.On the account page, create a personal token with the scopes you need. It expires after 90 days unless you pick another lifetime (7 days to a year, or never).
Configure the client with the endpoint and the header
Authorization: Bearer <token>:claude mcp add --transport http docmost https://mcp.example.com/mcp \ --header "Authorization: Bearer dmr_..."
Connected apps and tokens are listed and revoked on the account page,
PUBLIC_URL/account.
🧰 Tools
62 tools in groups. The scope is what a client needs to be granted to see the
tool: read is always granted, the others are opt-in.
Account and spaces
# | Tool | Scope | What it does |
1 |
| read | The Docmost account, scopes and Docmost version of this connection, and the link to the account page |
2 |
| read | Spaces you can access, with your role |
3 |
| read | One space: description, visibility, member count, your role |
4 |
| read | Stale, empty and untitled pages, duplicate titles, broken links and top editors of a space |
Browsing and reading pages
# | Tool | Scope | What it does |
5 |
| read | Page tree of a space, one level at a time |
6 |
| read | Several levels of the page tree in one call, within depth and size limits |
7 |
| read | Recently updated pages |
8 |
| read | One page as Markdown, or as ProseMirror JSON with all formatting, by id, slug id or Docmost URL |
9 |
| read | The headings of a page, to find a section without reading the whole body |
10 |
| read | One section of a page, with a hash for |
Search
# | Tool | Scope | What it does |
11 |
| read | Quick lookup of pages, people and groups by name |
12 |
| read | Full-text search with snippets; filters by title only, labels or your own pages |
Writing pages
# | Tool | Scope | What it does |
13 |
| write | New page with a Markdown body, optionally under a parent |
14 |
| write | Append, prepend or replace a page body with Markdown; |
15 |
| write | Replace one section of a page, refused if it changed since it was read |
16 |
| write | Replace a page body with ProseMirror JSON, checked against the editor schema first; |
17 |
| write | Change a page title |
18 |
| write | Move a page within its space, to the start, the end or after a sibling |
19 |
| write | Move a page with its children to another space |
20 |
| write | Copy a page with its children, in the same space or into another one |
Comments
# | Tool | Scope | What it does |
21 |
| read | Comments and replies on a page |
22 |
| write | Comment on a page or reply to a comment, optionally @-mentioning people, whom Docmost notifies |
23 |
| write | Change the text of one of your own comments |
History, snapshots and restore
# | Tool | Scope | What it does |
24 |
| read | Versions of a page saved by Docmost, with who changed it |
25 |
| read | One saved version of a page as Markdown |
26 |
| read | Snapshots this server saved before your changes to a page |
27 |
| read | Unified diff between the current body, a saved version or a snapshot |
28 |
| write | Put a page body back to a version from its history, formatting included |
29 |
| write | Put a page body back to a snapshot |
Labels and links
# | Tool | Scope | What it does |
30 |
| read | Pages that link to a page, or that a page links to (Docmost 0.90+) |
31 |
| read | Labels of the workspace or of one page (Docmost 0.90+) |
32 |
| read | Pages with a label in a space (Docmost 0.90+) |
33 |
| write | Add labels to a page (Docmost 0.90+) |
34 |
| write | Remove a label from a page (Docmost 0.90+) |
Files and export
# | Tool | Scope | What it does |
35 |
| read | A page as Markdown or HTML; with children or files, a download link to a zip |
36 |
| read | A download link to a zip of a whole space (space admins) |
37 |
| read | Files uploaded to a page (Docmost 0.96+) |
38 |
| read | Details of a file with a download link; small text files inline |
39 |
| write | A link where the person drops files into a page in the browser, or the assistant sends them with |
40 |
| read | Files sent to an upload link and whether they are in the page yet |
41 |
| write | Upload a file as base64 (up to 10 MB, about a million tokens per MB) and add it to the page |
Trash
# | Tool | Scope | What it does |
42 |
| read | Pages in the Trash of a space |
43 |
| delete | Move a page to the Trash |
44 |
| delete | Restore a page from the Trash |
People and groups
# | Tool | Scope | What it does |
45 |
| read | Users and groups with a role in a space |
46 |
| read | People in the workspace, with their role |
47 |
| read | Groups of the workspace |
48 |
| read | People in a group |
49 |
| read | Pending invitations to the workspace |
Space administration
# | Tool | Scope | What it does |
50 |
| admin | Create a space |
51 |
| admin | Change a space's name, slug or description |
52 |
| admin | Give users (by email) and groups (by name) a role in a space |
53 |
| admin | Change the role of a user or group in a space |
Workspace administration
# | Tool | Scope | What it does |
54 |
| admin | Create a group, optionally with members |
55 |
| admin | Rename a group or change its description |
56 |
| admin | Add people to a group |
57 |
| admin | Invite people by email, with a workspace role and groups; existing members and pending invitations are skipped |
58 |
| admin | Send an invitation again |
59 |
| admin | Cancel an invitation |
60 |
| admin | Make someone a member, admin or owner of the workspace |
61 |
| admin | Stop someone from signing in, keeping their account |
62 |
| admin | Let a deactivated member sign in again |
People cannot be removed from the workspace or from groups, and groups cannot be deleted. Docmost has no way to create an account or edit someone else's profile: people join through an invitation and set their own password.
🛡️ Safety nets
Snapshots. Before every body change the server saves the current body as a snapshot in its own database, encrypted, for
SNAPSHOT_RETENTION_DAYS; if the snapshot cannot be saved, nothing is written. Snapshots can hold content of pages that were later deleted in Docmost until they expire.Read-back. After a change the server reads the page back and reports an error if Docmost did not apply it (this happens when Docmost runs with
COLLAB_DISABLE_REDIS).Confirmation. Risky changes ask you first, in your client, where the client supports it (MCP elicitation): moving a page to the Trash, moving or copying a page to another space, giving people or groups a role in a space, inviting people, changing a workspace role and deactivating someone. The question goes to you, not to the model, so text in a page cannot answer it. If the client says it can ask but the question fails, nothing changes. Clients that cannot ask make these changes without the question, within the scopes you granted.
Busy pages. A change that rewrites the whole body (a replace, a section, a JSON write, a restore) is refused while someone else is editing the page, that is when another person saved it in the last minute, because their typing would be lost. Appending and prepending merge with their edits and are not refused.
Untrusted content. Page bodies, comments and snippets are returned inside a
<docmost-untrusted-content>envelope so the model treats them as data.
📎 Adding files
Passing a file to the model costs tokens: as base64, about a million per
megabyte. So create_upload_link gives a one-time link to a page instead.
The person opens it, drops in one or more files (or picks them), puts them in
order and presses Done; the files appear in the page at the end, at the end
of a section (after_heading) or after a paragraph (after_text). An
assistant that can run commands sends files it has with curl to the same
link. Until Done the files are kept on this server, encrypted; the link works
for UPLOAD_RETENTION_MINUTES and whatever was not added by then is deleted.
upload_attachment takes the same place parameters.
💬 Resources and prompts
Besides tools, which the model picks itself, the server offers resources and prompts that you pick in your client, where the client supports them (Claude Desktop and Claude Code do; many clients only support tools).
Resource | What it holds |
| The spaces you can access, with your role |
| One page as Markdown, with its place and link. While you type a title, the client is offered matching pages |
Prompt | Scope | What it asks for |
| read | A summary of a page: purpose, key points, what looks outdated |
| read | An overview of a space: what it covers, how it is organised, its gaps |
| read | An answer only from wiki pages, with links to them |
| read | What changed in the wiki or in a space in the last days, page by page |
| write | A draft page on a topic, after checking for existing ones; created once you agree |
| write | Better structure and wording of a page without changing its facts; written once you agree |
A prompt only writes the request; the model does the work with the tools the
connection is allowed to use. Resource reads count against
TOOL_CALLS_PER_MINUTE and go to the audit log as read_resource.
📦 Supported Docmost versions
Docmost Community Edition 0.80.1 or newer. Older versions are refused at
sign-in and on every tool call: they have published security advisories that
the endpoints this server calls expose (CVE-2026-34212, fixed in 0.71.0, and
CVE-2026-48073, fixed in 0.80.1). CI runs the integration tests against
Docmost 0.80.1, 0.96.0 and 0.97.0; newer releases work in most cases and log a warning until they are
added to the tested range. Docmost users who sign in with SSO only (an
Enterprise feature) cannot use this server: it signs in with email and
password. Labels and backlinks need Docmost 0.90 or newer, and the
title_only and labels search filters and list_attachments need 0.96 or
newer; on older versions these tools answer that Docmost needs an upgrade.
🔐 Security model
Members sign in with their own Docmost account; everything a client does is
done as that member, with their Docmost rights. The server keeps the Docmost
session token encrypted with a key derived from SECRET_KEY and does not
store passwords unless RELOGIN_MODE=stored_password. Personal tokens are
stored as hashes, shown once and expire after 90 days by default. The
sign-in page has CSRF protection and per-IP and per-email rate limits, and
"Sign out everywhere" on the account page ends its sessions in every
browser.
The server is its own OAuth 2.1 authorization server, following the MCP
authorization spec: dynamic client registration (limited per IP, redirect
URIs must be https, loopback http or a native app scheme), authorization
code with PKCE (S256 only), exact redirect URI match, tokens bound to this
server's /mcp resource, one-hour access tokens and 30-day refresh tokens
that rotate on every use. A reused refresh token or a replayed code revokes
the whole grant. OAuth grants and personal tokens are listed and revoked on
the same account page.
Page content is treated as untrusted data and labelled as such for the model;
titles and names, which are returned as plain fields, lose hidden and control
characters and are cut at 300 characters.
Prompt injection in a page can still make a client act within the scopes the
member granted, so grant write, delete and admin only to clients you trust.
Tool calls and resource reads are limited per member and recorded in an
audit log.
Exports of several pages and file downloads are handed out as links to this server that are valid for ten minutes. A link carries, encrypted, who asked and what to download, so anyone holding it can download the file until it expires; the server streams the file from Docmost with that member's session and stores nothing. Links are kept out of the access log.
See the threat model, SECURITY.md for how to report a vulnerability and the design.
🛠️ Administration
The admin command runs where the server runs, with the same environment:
docker compose exec server docmost-mcp-remote admin members
docker compose exec server docmost-mcp-remote admin migrate
docker compose exec server docmost-mcp-remote admin grants anna@example.com
docker compose exec server docmost-mcp-remote admin revoke-grant <grant id>
docker compose exec server docmost-mcp-remote admin revoke-member anna@example.com
docker compose exec server docmost-mcp-remote admin disable-member anna@example.com
docker compose exec server docmost-mcp-remote admin audit --email anna@example.comrevoke-member revokes every grant of the member and drops their stored
Docmost session; disable-member blocks them until enable-member. Every
tool call and resource read is recorded in the audit log with the tool, the page or space id
and the outcome, never with content or arguments.
To rotate SECRET_KEY: set the old value as SECRET_KEY_PREVIOUS and a new
SECRET_KEY, restart, run admin rotate-key, then remove
SECRET_KEY_PREVIOUS and restart again.
⬆️ Upgrading
Read the changelog for "Upgrade notes".
Back up the database:
docker compose exec -T postgres pg_dump -U docmost_mcp -Fc docmost_mcp > docmost-mcp-$(date +%F).dumpPull the new image and restart:
docker compose pull && docker compose up -d
The server upgrades its database schema at startup, in one transaction and
one process at a time, so a failed upgrade leaves the old schema in place.
docker compose exec server docmost-mcp-remote admin migrate shows the
schema revision.
The image tag 1 follows 1.x releases; set IMAGE_TAG in .env to pin a
version. Going back to an older version after its schema was upgraded is not
supported: an older server refuses to start on a newer schema. To roll back,
restore the backup with the old image:
docker compose stop server
docker compose exec -T postgres pg_restore -U docmost_mcp -d docmost_mcp --clean --if-exists < docmost-mcp-2026-01-31.dump
IMAGE_TAG=1.1.0 docker compose up -d⚙️ Configuration
Variable | Required | Default | Meaning |
| yes | Public https URL of this server | |
| yes | Base URL of your Docmost | |
| no |
| Allow an |
| yes | Postgres URL ( | |
| yes | At least 32 characters; encrypts stored Docmost sessions and signs cookies | |
| no | The old key during a rotation | |
| no | empty | Comma-separated emails allowed to sign in; empty allows every Docmost user |
| no | empty | Comma-separated space slugs or ids members may use through this server; empty allows all |
| no |
| Longest page body returned; longer bodies are truncated |
| no |
| Days a snapshot of a page body is kept |
| no |
| Days an audit log entry is kept |
| no |
| Minutes an upload link works; files not added to the page by then are deleted |
| no |
| Largest total size of the files sent to one upload link |
| no |
| Tool calls and resource reads one member may make per minute, over all their clients |
| no |
| Hours a sign-in to the account page lasts |
| no |
|
|
| no |
| Timeout for one request to Docmost |
| no |
| Largest Docmost response the server reads |
| no |
| Proxies trusted for |
| no |
| Listen address |
| no |
|
|
| no |
| Image tag used by |
🧑💻 Development
uv sync
uv run ruff check . && uv run ruff format --check .
uv run mypy
DATABASE_TEST_URL=postgresql://test:test@localhost:5433/test uv run pytestTests that need Postgres are skipped without DATABASE_TEST_URL; for example
docker run -d -p 5433:5432 -e POSTGRES_USER=test -e POSTGRES_PASSWORD=test postgres:17-alpine.
Integration tests run against a real Docmost:
DOCMOST_VERSION=0.97.0 docker compose -f tests/integration/compose.yaml up -d
DOCMOST_TEST_URL=http://localhost:3000 uv run pytest tests/integrationTo run the compose stack with a local build:
docker build -t ghcr.io/bbik52/docmost-mcp-remote:dev .
IMAGE_TAG=dev docker compose up -ddocmost-mcp-remote --tool-catalog serves the tools, resources and prompts
over stdio without Docmost, a database or any configuration, and refuses
every call. MCP directories use it to list what the server offers, for
example docker run -i --rm ghcr.io/bbik52/docmost-mcp-remote --tool-catalog.
See CONTRIBUTING.md and the roadmap.
🙌 Feedback and support
⭐ Like it? Star the repository. Stars help other Docmost teams find the server and keep the project going.
Issues are not only for bugs. Ask for a new tool or feature, tell us what is awkward in your workflow, or ask a question: every request is read. For a security problem, follow SECURITY.md instead of opening an issue.
📄 License
Apache License 2.0. The license does not cover the project name: forks are welcome under another name. This project is an independent implementation and is not affiliated with Docmost. It was inspired by docmost-mcp-oss.
Available Tools
62 toolsactivate_memberActivate MemberA
Let a person deactivated with deactivate_member sign in again, with their roles as before. Needs a workspace admin or owner.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | The person's email or user id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a non-read-only, non-destructive mutation, and the description adds two facts annotations cannot convey: the required role (workspace admin or owner) and that existing roles are preserved on reactivation. It stops short of noting idempotency or behavior when the user is already active.
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?
One core sentence plus a short permission clause, with the effect front-loaded and zero filler. Every phrase carries 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?
With an output schema present and a fully documented single parameter, the description supplies what structured fields cannot: the permission requirement and the role-preservation guarantee. Only edge-case behavior (already-active user, failure modes) is left out, which is a minor gap for a one-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% and the single 'user' parameter is fully documented in the schema as email or user id. The description adds no additional parameter guidance, which is the expected baseline when the schema does the work.
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+resource: re-enable sign-in for a previously deactivated person, and it names the counterpart tool (deactivate_member) so the pair is unambiguous against 50+ siblings. The added detail that roles are restored 'as before' further pins down the effect.
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 scopes the tool to people deactivated via deactivate_member and states the permission prerequisite (workspace admin or owner). It does not say what to do for never-activated users or non-deactivated targets, so a minor inference remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_commentAdd CommentA
Add a comment to a page as plain text, or a reply to a comment with reply_to_comment_id. Comments are visible to everyone who can see the page. People in mention (emails, names or user ids) are @-mentioned at the start of the comment, and Docmost notifies them; mention someone only when they need to act on it.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| text | Yes | Comment text, plain text. | |
| mention | No | People to @-mention: email, name or id. | |
| reply_to_comment_id | No | Id of the comment to reply to. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, and the description adds real side-effect context the annotations cannot: comments are visible to everyone who can see the page, and mentioned users are notified by Docmost. It does not state permission requirements for commenting or what happens on an invalid page id, leaving a small gap.
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?
Two sentences, front-loaded with the core action and reply variant, then visibility and mention etiquette. The mention guidance is slightly longer than strictly necessary but every clause carries actionable information, so nothing is wasted.
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 full schema coverage, an output schema, and annotations present, the description supplies the missing behavioral layer (visibility, notifications, mention placement). Complete enough to call correctly; only authorization/prerequisite context 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%, so baseline is 3, and the description genuinely adds meaning: it specifies that mentions are placed at the start of the comment and trigger notifications, and that reply_to_comment_id turns the call into a threaded reply. It does not explain the accepted formats for `page` (id/slug/URL) beyond what the schema already says, but that is already covered.
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 ("Add a comment to a page") and immediately covers the second mode (reply via reply_to_comment_id), so an agent knows both shapes of the operation. It never names update_comment or list_comments, so the differentiation from sibling tools is left implicit.
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?
"mention someone only when they need to act on it" gives explicit conditional guidance for the optional mention parameter, and the reply_to_comment_id clause tells the agent how to switch into reply mode. There is no stated exclusion (e.g., when to prefer update_comment instead of adding a new one), so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_group_membersAdd Group MembersA
Add people (emails or user ids) to a group. They get the group's roles in spaces at once. Needs a workspace admin or owner.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group name or id from list_groups. | |
| users | Yes | Emails or user ids. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-destructive, non-open-world mutation, so the bar is lower. The description still adds real value by disclosing that members inherit the group's space roles immediately and that admin/owner privileges are required, though it doesn't mention reversibility or partial-failure behavior.
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, zero filler, with the action and identifier forms front-loaded and the precondition last. Every sentence carries distinct 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 needn't be explained, and the auth requirement plus role-propagation effect cover the main behavioral questions for a bulk mutation. What's missing is failure semantics when some of the up-to-50 users are invalid or already members.
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 emails-or-user-ids forms. The description repeats that without adding syntax, format, or edge-case detail, 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 and resource ('Add people ... to a group') with the accepted identifier forms, so the agent can tell it apart from add_space_members and list_group_members. It doesn't explicitly name those siblings, which keeps it from a 5.
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?
'Needs a workspace admin or owner' gives a concrete precondition for calling the tool, which is more than most definitions offer. It stops short of stating when to prefer this over add_space_members or invite_people, so no explicit alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_labelsAdd LabelsA
Add labels to a page; labels that do not exist yet are created. The page body is not changed. Needs Docmost 0.90 or newer.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| labels | Yes | Label names to add. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnlyHint=false and destructiveHint=false, the description adds real value: it discloses that nonexistent labels get created (an implicit mutation beyond the page) and that 'the page body is not changed', scoping the blast radius. It stops short of noting permission requirements or the 25-label cap behavior.
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 clauses with zero waste: action, side effect, scope guarantee, and prerequisite. Front-loaded with the action and side effect before the version note.
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 with an output schema and annotations, the description covers action, side effect, and scope. Only minor gaps remain (permission needs, duplicate-label handling), so it is nearly complete but not exhaustive.
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 page and labels are fully documented in the schema, including format and lowercase storage. The description adds only the label-creation semantic, not parameter syntax, 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 and resource ('Add labels to a page') plus a notable side effect (missing labels are created). It is clearly distinct from siblings like remove_label and list_labels, though it never names them.
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 version prerequisite ('Needs Docmost 0.90 or newer') is genuine usage context, but there is no explicit when-to-use / when-not guidance or reference to the alternative label tools (remove_label, list_labels, find_pages_by_label). Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_space_membersAdd Space MembersA
Give users and groups a role in a space. Users are given by email or id, groups by name or id. People who already have a role keep it; use change_space_member_role for them. Needs admin rights in the space.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | admin, writer or reader. | |
| users | No | Users: emails or user ids. | |
| groups | No | Groups: names or group ids. | |
| space_id | Yes | Space id from list_spaces. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false; the description adds genuinely new context by stating the operation is additive-only (existing roles are preserved) and requires space admin rights. It does not explain behavior on invalid emails/ids or partial batch failures, which would be the remaining gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, zero filler, with the core action first, the identity-format note second, and the disambiguation plus prerequisite last. Every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 no explanation, and auth requirements, idempotency semantics and the sibling alternative are all covered. Only batch-size behavior and failure handling are unaddressed, which keeps it just below fully complete.
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 four parameters are already documented upstream. The description restates the user/group identifier formats (email or id, name or id) that the schema already carries, adding no syntax or constraint detail beyond it — 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+effect: 'Give users and groups a role in a space.' It also names the sibling it must not be confused with (change_space_member_role), so an agent can discriminate it from the adjacent role-mutation tool without reading 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 a clear when-not ('People who already have a role keep it') plus the explicit alternative ('use change_space_member_role for them') and the prerequisite ('Needs admin rights in the space'). It stops short of covering edge conditions such as what happens on partial failure or the 25-item batch limit, so it is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
change_space_member_roleChange Space Member RoleA
Change the role of one user (email or id) or one group (name or id) in a space. Docmost keeps at least one admin per space. Needs admin rights in the space.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | admin, writer or reader. | |
| user | No | The user's email or id; give user or group. | |
| group | No | The group's name or id; give user or group. | |
| space_id | Yes | Space id from list_spaces. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive, closed-world mutation. The description adds real behavioral context beyond them: the admin-rights requirement and the invariant that Docmost keeps at least one admin per space, which tells the agent a demotion can fail.
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: what it does, the invariant, the permission requirement — in that order.
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, so return values need not be described. The description covers scope, prerequisites, and a failure-relevant constraint; only an explicit note on which sibling adds members versus which reassigns roles 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 baseline is 3; the description adds the important semantic that user and group are alternatives ('one user ... or one group'), clarifying the anyOf parameters that the schema documents only individually.
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 (change) and resource (role of a member in a space) and scopes it to one user or one group. The phrase 'in a space' implicitly separates it from change_workspace_role, and 'role' separates it from add_space_members.
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 the key precondition ('Needs admin rights in the space') and the targeting rule (one user or one group, not both). It does not explicitly point to change_workspace_role or add_space_members as alternatives, but the guidance is actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
change_workspace_roleChange Workspace RoleADestructive
Change a person's workspace role: member, admin or owner. Admins manage people and spaces; owners also manage the workspace and other owners. Only an owner can make or change owners, and Docmost keeps at least one owner. Needs a workspace admin or owner.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | member, admin or owner. | |
| user | Yes | The person's email or user id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint/readOnlyHint annotations it discloses the authorization model ('Only an owner can make or change owners') and a real system invariant ('Docmost keeps at least one owner') that an agent must know before attempting a demotion. It does not mention notification side effects or whether a failed demotion produces an error versus a silent no-op.
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, front-loaded with the action and roles, then permissions, then the invariant. Every sentence carries information; only the role semantics 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?
An output schema exists so return values need no explanation, and the description covers authorization, the role hierarchy, and the one-owner invariant. The main omission is any contrast with the similarly named space-level sibling, which is the most likely source of a mis-call.
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% and the enum already lists the three roles, so the schema carries the parameter documentation. The description adds light semantics (admin manages people and spaces; owners also manage the workspace and other owners), but the 'user' parameter is never discussed beyond what the schema says.
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 ('Change a person's workspace role') and enumerates the exact values. It does not explicitly distinguish itself from the sibling change_space_member_role, so an agent must infer that 'workspace' scope differs from 'space' scope from the tool name 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?
It gives a precondition ('Needs a workspace admin or owner'), which implies when the call will succeed, but never says when to prefer it over change_space_member_role or invite_people, nor any explicit exclusion. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_space_healthCheck Space HealthARead-only
A health check of one space: pages not updated for stale_days, empty and untitled pages, pages sharing a title, links and @-mentions to pages that are gone or in Trash, and who updated most pages. It reads every page, up to max_pages, so it takes a while on large spaces. Lists hold at most 50 entries; the summary counts all.
| Name | Required | Description | Default |
|---|---|---|---|
| space_id | Yes | Space id from list_spaces. | |
| max_pages | No | Check at most this many pages, newest first. | |
| stale_days | No | Pages older than this count as stale. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint, it discloses performance cost ('takes a while on large spaces') and an important truncation rule: lists cap at 50 entries while the summary counts all. Those are non-obvious behaviors an agent needs to interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two dense sentences: the first enumerates what is checked, the second discloses cost and truncation semantics. There is no filler and the important scoping/cost information is not buried.
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 that an output schema exists, the description does not need to explain return shapes. It covers the check inventory, read cost, and result truncation, which is enough for an agent to decide when and how to call 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 coverage is 100%, so space_id, max_pages, and stale_days are already documented in the schema. The description reinforces that max_pages bounds full-space reading and stale_days defines staleness, but adds little 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?
It states a specific verb and resource ('health check of one space') and enumerates exactly what is checked: stale pages, empty/untitled pages, duplicate titles, broken links/mentions, and top updaters. That set of checks is distinct from siblings like get_space or list_pages.
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 makes the use case clear (auditing a space's content health) and warns that it reads every page up to max_pages and is slow on large spaces. It does not explicitly name alternatives or exclusions, but there is no sibling that performs a comparable audit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_groupCreate GroupA
Create a group, optionally with its first members (emails or user ids). Groups can then be given a role in spaces with add_space_members. Needs a Docmost workspace admin or owner.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Group name. | |
| users | No | First members: emails or user ids. | |
| description | No | Short description. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-destructive, non-open-world write behavior, and the description adds the meaningful precondition of workspace admin/owner rights plus the note that groups gain roles later. It omits failure behavior for unrecognized emails/user ids, which for a bulk-membership creation call would be useful.
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, front-loaded with the action and its optional scope, then permissions. Nothing is redundant or padded.
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, and auth plus follow-up path are covered. Only edge-case behavior (invalid member identifiers, partial creation) is unaddressed.
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% and all three parameters are documented inline, so the baseline is 3. The description's 'emails or user ids' phrasing duplicates the schema's own wording for `users` rather than adding new semantics.
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 ('Create a group') and adds the scope detail that the first members can be supplied at creation, which is exactly what distinguishes it from create-then-add_group_members flows.
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 the required authorization level ('Docmost workspace admin or owner') and forward-references add_space_members for the follow-up role step, so the agent knows the sequencing. It does not explicitly contrast with add_group_members or update_group, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_pageCreate PageA
Create a page in a space, optionally under a parent page and with a Markdown body. Returns the new page's id and link. Each call creates a new page, so do not repeat it to retry; to change an existing page use update_page.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Page title. | |
| content | No | Markdown text. | |
| space_id | Yes | Space id from list_spaces. | |
| parent_page_id | No | Create the page under this page. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false and destructive=false, so the description correctly doesn't restate safety. It does add the crucial non-obvious trait that every call produces a new page (retries duplicate), plus what comes back (id and link). It omits permission/auth requirements, which keeps it from 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?
Three short sentences, front-loaded with what is created, followed by the return value and then the retry warning. Nothing is redundant and every sentence carries distinct 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 no elaboration, annotations cover the safety profile, and all four parameters are documented. For a 4-param create tool, the description supplies the only thing structured fields can't: the non-idempotency warning and the routing to update_page.
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 each parameter is already documented, including content as Markdown and parent_page_id for nesting. The description's "optionally under a parent page and with a Markdown body" merely paraphrases the schema, adding no format or constraint detail beyond it, 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 and resource ("Create a page in a space") plus the optional nesting and body format. It also names update_page as the sibling for the adjacent operation, so an agent can separate create from modify without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not-to-use rule ("do not repeat it to retry") and names the correct alternative for editing an existing page (update_page). That is the exact failure mode an agent hits with non-idempotent create tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_spaceCreate SpaceA
Create a space; you become its admin. Needs a Docmost workspace admin or owner.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Space name. | |
| slug | Yes | Short name used in URLs: letters and digits only. | |
| description | No | Short description. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state this is a non-read-only, non-destructive, closed-world operation. The description adds two things annotations cannot: the privilege requirement and the resulting admin membership. Nothing contradicts 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?
Two compact clauses with zero filler; the effect and the precondition are both front-loaded. Every word earns its place.
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 a full output schema, complete parameter docs, and clear safety annotations, the description covers the remaining gaps: authorization and the caller's resulting role. Only minor detail like uniqueness of slug is left to inference.
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?
All three parameters are fully documented in the schema, including slug format constraints and defaults. The description adds no parameter detail, which is acceptable given 100% schema coverage but earns only the 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?
Specific verb 'Create' plus resource 'space', and it discloses the immediate side effect that the caller becomes admin. It does not explicitly contrast with update_space or list_spaces, but the create-vs-update distinction 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?
Gives the concrete precondition that the caller must be a Docmost workspace admin or owner, which is the main gate on use. It does not spell out when to prefer other tools, but no real alternative exists for creating a space.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_upload_linkCreate Upload LinkA
Make a link for adding files to a page, and the best way to upload: it costs no tokens. Give the link to the person: they open it in a browser, drop in one or more files, put them in order and press Done, and the files appear in the page. If you can run commands with network access, send files you have yourself with the curl command in the result instead of upload_attachment. The link works for 60 minutes and takes files of up to 50 MB in total; files not added by then are deleted. Anyone with the link can add files to the page until then. Check the outcome with get_upload_status.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| after_text | No | Put the files right after the paragraph or block containing this text. | |
| after_heading | No | Put the files at the end of the section under this heading (its text). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses the 60-minute link lifetime, 50 MB total upload limit, deletion of files not added in time, public access for anyone with the link, and the need to verify via get_upload_status. These are important behavioral traits that materially affect safe use.
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 purpose and key constraints are front-loaded, and most sentences carry useful information. The workflow sentence is somewhat long and could be tightened, but the description remains appropriately scoped for a tool with security, expiry, and size constraints.
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 in detail. The description still covers the essential call context: intended recipient workflow, token-free upload path, link expiry, size cap, access model, alternative curl path, and status-check follow-up.
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 page, after_text, and after_heading are already documented in the input schema. The description adds workflow context but does not add parameter-specific syntax or placement semantics beyond what the schema 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?
The description states a specific verb and resource: making a link for adding files to a page. It also explicitly contrasts this with upload_attachment and get_upload_status, so an agent can distinguish it from siblings without inspecting schemas.
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 explains when to use this tool: to let another person upload files via a browser link, and notes that this avoids token costs. It also names the alternative path (curl with network access instead of upload_attachment) and says to check results with get_upload_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deactivate_memberDeactivate MemberADestructive
Deactivate a person: they are signed out everywhere and cannot sign in, but their account, pages and roles stay, and activate_member lets them back in. Use it when someone leaves. You cannot deactivate yourself. Needs a workspace admin or owner.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | The person's email or user id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, but the description goes further by disclosing the exact blast radius (sessions revoked, sign-in blocked) and — crucially — what is *not* destroyed (account, pages, roles persist). It also surfaces a self-targeting restriction and an authorization requirement that no annotation conveys.
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?
Two sentences, front-loaded with the state change and its scope, then the gating conditions. No filler, no restating of the title.
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. For a destructive, permission-gated, reversible-by-sibling mutation with one well-documented parameter, the description covers consequences, reversibility, audience, and auth — nothing an agent needs 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% and the single 'user' property already documents 'email or user id'. The description only says 'a person' and adds no format, resolution, or ambiguity guidance beyond the schema, so the baseline of 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 ('Deactivate a person') and immediately defines the resulting state: signed out everywhere, cannot sign in. It also names the sibling inverse (activate_member), so an agent can distinguish deactivate from activate or change_workspace_role 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 trigger ('Use it when someone leaves'), an explicit constraint ('You cannot deactivate yourself'), and an explicit prerequisite ('Needs a workspace admin or owner'), plus the escape hatch via activate_member. This is when-to-use, when-not, and how-to-reverse in two sentences.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_pageDiff PageARead-only
Show what changed in a page between two points as a unified diff: 'current', a version from list_page_history, or a snapshot from list_snapshots. By default from_version is compared with the current body.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| to_version | No | 'current', a version id from list_page_history, or a snapshot id from list_snapshots. | current |
| from_version | Yes | 'current', a version id from list_page_history, or a snapshot id from list_snapshots. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds useful behavioral detail beyond the schema: it returns a unified diff and defaults to comparing from_version with the current body. It omits edge cases (e.g., missing versions, large diffs) but is solid given the annotation coverage.
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?
Two sentences, zero waste, with the core purpose front-loaded and the default behavior appended. Every sentence earns its place.
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-value explanation is unnecessary, and readOnly/openWorld annotations cover the safety profile. The description supplies the endpoint semantics and default behavior needed for correct invocation.
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 all three parameters with identical wording. The only addition is the default-behavior note ('by default from_version is compared with the current body'), which is minor. Baseline 3 is appropriate when the schema carries the parameter semantics.
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 gives a specific verb and resource: it shows what changed in a page between two points as a unified diff, which is clearly distinct from siblings like get_page_version or list_page_history. It does not explicitly state which sibling it replaces, but the 'unified diff' framing alone distinguishes it.
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 explains the accepted inputs for both endpoints ('current', a version from list_page_history, or a snapshot from list_snapshots) and states the default comparison behavior. It doesn't give explicit when-not-to-use guidance or name alternative tools for related tasks, but the context is clear enough to select it confidently.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_pageDuplicate PageA
Copy a page with its child pages, attachments and labels. Without target_space_id the copy lands next to the original and is titled 'Copy of ...'; with it, the copy goes to the top level of that space under the same title, and clients that can ask the person first do so. Comments and history are not copied.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| target_space_id | No | Copy into this space instead of the same one. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses exactly what is copied (children, attachments, labels), what is not (comments, history), the resulting title ('Copy of ...' vs. unchanged), and placement semantics. It also notes that clients may prompt the user first, which is valuable non-obvious behavior for a write tool with destructiveHint=false.
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?
Two tight sentences, front-loaded with the core action and its contents, followed by conditional behavior. Dense but every clause carries information; only the client-prompt aside is arguably secondary.
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 and annotations covering the safety profile, the description fills the remaining gaps: copy scope, exclusions, naming and destination behavior. An agent has everything needed to call this 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 the schema already documents both parameters. The description still adds real meaning: target_space_id changes both the destination (top level of that space) and the title convention, which the terse schema text ('Copy into this space instead of the same one') does not convey.
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 precise verb and resource ('Copy a page') and immediately scopes what is included: child pages, attachments and labels. This clearly separates it from siblings such as create_page, move_page or export_page.
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 gives a clear decision rule: omit target_space_id to copy beside the original, supply it to place the copy at the top level of another space. It does not name competing siblings (e.g. move_page_to_space, create_page) or say when duplication is preferable to those, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_pageExport PageARead-only
Export a page as Docmost does, as Markdown or HTML. A single page is returned in the result; with its child pages or its files, or when it is too long, the result is a download link to a zip that works for 10 minutes. To read a page, use get_page; export when the person wants a file.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| format | No | markdown or html. | markdown |
| include_children | No | Include child pages (zip). | |
| include_attachments | No | Include the files of the pages (zip). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnlyHint/openWorldHint annotations: it explains the two possible result shapes (inline single page vs. a zip download link), the conditions that trigger the zip (children, attachments, page too long), and the 10-minute link expiry. That expiry and the auto-fallback are exactly the behavioral facts an agent cannot get from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what the tool does before the result-shape caveat and the sibling routing. 'As Docmost does' is a slightly odd aside but it usefully signals native-format parity, so nothing is wasted.
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 adds the crucial distinction between inline return and a time-limited zip link, plus the decision rule versus get_page. For a read-only, 4-parameter export tool with full schema coverage, nothing an agent needs 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; the description earns an extra point by explaining the consequence of include_children/include_attachments (the result becomes a zip link) and of format (Markdown or HTML), which the terse schema descriptions do not convey. It stops short of giving the page-id format details, but the schema already covers that.
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 ('Export a page') plus the output formats (Markdown or HTML), and explicitly contrasts itself with get_page. An agent can distinguish it from the read-oriented siblings 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 an explicit when-not ('To read a page, use get_page') and an explicit when ('export when the person wants a file'), naming the alternative tool and the intent that selects it. Only gap is that export_space is not mentioned, but the page/space split is obvious from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_spaceExport SpaceARead-only
Export a whole space as a zip of Markdown or HTML files, optionally with its files. Needs admin rights in the space. The result is a download link that works for 10 minutes; Docmost builds the zip when the link is opened.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | markdown or html. | markdown |
| space_id | Yes | Space id from list_spaces. | |
| include_attachments | No | Include the files of the pages. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses the admin-rights requirement, that the return value is a download link expiring in 10 minutes, and the non-obvious lazy-build semantics (Docmost generates the zip only when the link is opened). That lazy-build detail is exactly the kind of hidden behavior an agent would otherwise misjudge as an immediate file.
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 with the action first, then the permission gate, then the return-value caveat. Nothing is repeated and nothing is padding.
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 needn't be spelled out; the description still supplies the critical operational details — auth requirement, link lifetime, and deferred build. For a 3-parameter export tool this is fully sufficient.
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% and every parameter is already documented, so the schema does the heavy lifting. The description corroborates format enumeration and the attachments flag ('optionally with its files') but adds no format defaults, size limits, or interaction details beyond 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 ('Export a whole space'), plus the output artifact (zip of Markdown or HTML) and optional attachment inclusion. The scope word 'whole space' implicitly separates it from the sibling export_page, which handles a single page.
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 a concrete precondition — 'Needs admin rights in the space' — which tells the agent when the call will fail. It stops short of explicitly naming export_page as the alternative for single-page exports, so routing between the two is still partly inferential.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_pages_by_labelFind Pages By LabelARead-only
List the pages that carry a label, in all spaces or in one. Needs Docmost 0.90 or newer.
| Name | Required | Description | Default |
|---|---|---|---|
| label | Yes | Label name: letters, digits, '-', '_' and '~'. Docmost stores it lowercase. | |
| limit | No | Maximum number of items to return. | |
| cursor | No | Value of next_cursor from a previous call, to get more items. | |
| space_id | No | Only pages in this space. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds a version-gating requirement (Docmost 0.90+) that is not in any structured field, which is genuine extra context; it stops short of describing result ordering or pagination behavior.
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?
Two short sentences, the core listing behavior front-loaded and the version prerequisite trailing where it belongs. 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?
With an output schema present, full parameter documentation, and read-only annotations, the description covers what the agent needs to call it. The version prerequisite is a useful addition; only minor gaps around result scoping remain.
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 label, limit, cursor, and space_id are all fully documented upstream, making 3 the baseline. The description's 'in all spaces or in one' loosely reinforces space_id semantics but adds no syntax or formatting detail beyond 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: 'List the pages that carry a label,' with the scope qualifier 'in all spaces or in one.' An agent can distinguish this from list_pages and list_labels, though the description never names those siblings explicitly to sharpen the boundary.
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?
'Needs Docmost 0.90 or newer' gives a real prerequisite, and 'in all spaces or in one' implies the space_id filtering choice. However, it never says when to prefer this over list_pages, search, or list_labels, so alternative selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attachmentGet AttachmentARead-only
Details of a file uploaded to a page, with a download link that works for 10 minutes. A small text file (up to 256 KB) is also returned in the result.
| Name | Required | Description | Default |
|---|---|---|---|
| attachment_id | Yes | Attachment id, from list_attachments or a page body. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish read-only and closed-world behavior, and the description adds important operational details: the download link expires after 10 minutes and a small text file up to 256 KB is included. These are useful behavioral facts beyond the annotations, though authentication or failure behavior is not covered.
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 two short sentences, front-loads the returned details, and immediately follows with the time-limited download link. There is no wasted text.
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 simple single-parameter read tool with a fully documented schema, annotations, and an output schema, the description supplies the key runtime behavior an agent needs: the temporary download link and small text file return. Nothing essential 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% and the sole parameter is documented in the schema as an attachment id sourced from list_attachments or a page body. The description adds no additional parameter semantics, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource as an attachment uploaded to a page and states that it returns details plus a download link. It does not explicitly distinguish this tool from siblings such as list_attachments or create_upload_link, so it stops short of a 5.
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 mention of a download link and returned text file implies the tool is used when an agent needs attachment details or temporary download access. However, it gives no explicit when-to-use guidance, exclusions, or comparison to alternatives like list_attachments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pageGet PageARead-only
Read one page: its title, location and body as Markdown. Accepts a page id, the short slug id, or a Docmost page URL. Very long bodies are truncated; truncated tells when that happened. format='json' returns the body as Docmost's ProseMirror JSON instead, with all formatting, for replace_page_json; it is never truncated, so a page too large for it is refused.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| format | No | Body as Markdown or as JSON. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read (readOnlyHint=true, openWorldHint=false), and the description adds real behavioral context beyond them: markdown bodies may be truncated with a `truncated` signal, JSON bodies are never truncated, and oversized pages are refused in JSON mode. These are exactly the non-obvious failure modes an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what the tool returns, then the format branch and its truncation caveat. No filler; every clause carries information an agent would otherwise have to discover by calling.
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, so return-value documentation is not required, yet the description still flags the meaningful field (`truncated`) and the JSON refusal case. For a 2-parameter read tool, nothing needed for correct invocation 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; the description earns more by explaining the consequence of `format`: ProseMirror JSON with full formatting and no truncation, intended for replace_page_json. It adds the why, not just the what, though the `page` identifier forms are largely restated from 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 plus scope: 'Read one page: its title, location and body as Markdown.' An agent knows exactly what comes back. It does not explicitly distinguish itself from close siblings like get_section, get_page_outline or get_page_version, which keeps it at 4 rather than 5.
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 a clear conditional routing rule: use format='json' when the body will be fed to replace_page_json, otherwise markdown. It does not say when to prefer this over get_section/get_page_outline for partial reads, so no explicit alternatives/exclusions for the tool itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_page_outlineGet Page OutlineARead-only
The headings of a page with their level and size, without the body. Use it to find a section of a long page, then get_section to read it and replace_section to change it. Section 0 is the text before the first heading.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the description only needs to add cost/behavior context, which it does by emphasizing 'without the body' (cheap scan) and explaining that section 0 is the pre-heading text. It does not say whether the outline is truncated or paginated for very long pages, which is the remaining behavioral gap.
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, front-loaded with what is returned, followed by the decision guidance and one indexing caveat. No filler or redundant restatement of the title.
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, and the description still supplies the key indexing hint about section 0. Only the pagination/truncation behavior for very large outlines is unaddressed.
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?
There is only one parameter and its schema description already covers all accepted forms (page id, slug id, Docmost URL) at 100% coverage. The description adds nothing about the page argument beyond what the schema states, 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 and resource ('headings of a page') plus what is excluded ('without the body') and the per-heading fields (level and size). It is clearly separable from get_section, which returns body content, and from get_page, which returns the whole page.
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 workflow: use this to locate a section of a long page, then get_section to read it and replace_section to change it. Both the trigger condition ('long page') and the follow-on alternatives are given, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_page_treeGet Page TreeARead-only
The page tree of a space, or of one page, several levels deep in one call. The walk stops at max_depth levels or max_pages pages; pages whose children were not read are listed in not_expanded, and get_page_tree with that page as root_page_id continues there.
| Name | Required | Description | Default |
|---|---|---|---|
| space_id | Yes | Space id from list_spaces. | |
| max_depth | No | Levels to walk down. | |
| max_pages | No | Stop after listing this many pages. | |
| root_page_id | No | Start below this page instead of the space's top. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint, closed-world), so the description's real contribution is truncation behavior: the walk stops at max_depth/max_pages, unread children are reported in not_expanded, and re-calling with that page as root_page_id resumes. That is exactly the non-obvious behavior an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no waste, and the scope statement is front-loaded ahead of the truncation/resume mechanics. Every clause carries actionable 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?
With an output schema present, the description needn't enumerate return fields, and pointing at not_expanded ties the traversal semantics to the response. It stops short of noting ordering or what the root-level entries represent, but nothing required 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 coverage is 100% so the baseline is 3, but the description adds semantics the schema lacks: which parameter pair causes truncation and how root_page_id acts as a continuation cursor into the not_expanded set rather than just 'start here'.
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: 'The page tree of a space, or of one page, several levels deep in one call.' That distinguishes it from flat listing siblings like list_pages and from single-page readers like get_page, though it doesn't name a sibling explicitly.
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 by the description (use it when you need a multi-level subtree in one call, or to continue from a truncated page), but no alternative is named and no when-not-to-use guidance is given relative to list_pages or get_page_outline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_page_versionGet Page VersionARead-only
Read one saved version of a page from list_page_history, as Markdown converted by this server.
| Name | Required | Description | Default |
|---|---|---|---|
| version_id | Yes | Version id from list_page_history. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuinely new behavioral context: content is Markdown converted by this server, telling the agent not to expect raw storage fidelity. It stops short of saying whether conversion is lossy, which keeps it from 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?
One sentence, front-loaded with the action and resource, with the source and output format packed into the same clause. No filler or repetition.
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?
A read-only, single-parameter tool with an output schema, so return values need no explanation; annotations cover the safety profile. The description supplies the two non-obvious facts (version_id source, Markdown conversion), making it complete enough to invoke 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% and the single parameter already documents 'Version id from list_page_history', which the description largely restates. No additional syntax, format, or edge-case meaning is added, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read'), a specific resource ('one saved version of a page'), its provenance ('from list_page_history'), and the return format ('as Markdown'). An agent can distinguish it from list_page_history, diff_page, and restore_page_version 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?
Implicitly tells the agent that the required version_id comes from list_page_history, which is a strong usage pointer, and the Markdown note signals it is a content-reading tool rather than a diff or restore. It does not explicitly rule out alternatives like get_page, but the version-scoped framing makes selection clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sectionGet SectionARead-only
Read one section of a page as Markdown: its heading and everything up to the next heading of the same or a higher level, subsections included. Returns section_hash for replace_section.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| index | Yes | Section index from get_page_outline. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description adds the return format (Markdown) and the downstream handoff (section_hash for replace_section), which is genuinely useful chain context beyond structured fields. It doesn't cover failure modes such as an out-of-range index.
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?
Two sentences, zero padding. The core operation and its boundary semantics come first, with the return-format and replace_section handoff second.
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, the description needn't enumerate return fields, yet it names the one value that matters downstream (section_hash) and the serialization (Markdown). Only edge-case behavior (invalid index, empty sections) is unaddressed.
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 baseline is 3; the description earns extra credit by defining what a 'section' is at the heading level, which explains how the index parameter should be interpreted. The page parameter's accepted id/URL forms are left to 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 (read) and resource (one section of a page) plus the exact boundary rule — heading plus everything until the next same-or-higher heading, subsections included. This clearly distinguishes it from siblings like get_page (whole page) and get_page_outline (structure only).
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 links to the workflow: it returns section_hash for replace_section, and the schema ties index to get_page_outline. It doesn't state when to prefer get_page over this tool, but the context is clear enough to select correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spaceGet SpaceARead-only
Details of one space: name, description, visibility, number of members and your role in it.
| Name | Required | Description | Default |
|---|---|---|---|
| space_id | Yes | Space id from list_spaces. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safe-read profile is covered. The description adds which fields are returned, but that information is also available from the output schema, so it contributes limited additional behavioral context (no error behavior, no permission notes).
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?
A single compact sentence that front-loads the resource and lists the returned fields with zero filler. Nothing could be trimmed without losing 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?
For a one-parameter read tool with full schema coverage, an output schema, and safety annotations, the description is essentially sufficient. Only minor details, such as behavior for an invalid or inaccessible space id, 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?
There is a single parameter with 100% schema description coverage ('Space id from list_spaces'), so the schema already carries the semantics. The description adds nothing about the id's format or source, making the baseline 3 appropriate.
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 resource and scope ('Details of one space') and enumerates the fields it returns, which separates it from list_spaces and update_space by implication. It doesn't explicitly name a sibling, so it falls short of a 5.
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 only implied: fetch a single space's details. There's no explicit when-to-use, no mention of when to prefer list_spaces or list_space_members instead, and no stated prerequisites. The only routing cue ('Space id from list_spaces') lives in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_upload_statusGet Upload StatusARead-only
What happened to an upload link: the files sent to it so far and, once Done was pressed, whether they were added to the page.
| Name | Required | Description | Default |
|---|---|---|---|
| upload_id | Yes | upload_id from create_upload_link. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds lifecycle context about files sent and post-Done page inclusion, but does not discuss error behavior, expired upload links, or other operational details.
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 definition is a single, front-loaded sentence with no redundant or filler content. It communicates the core result immediately.
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, the description does not need to enumerate return fields, and the read-only annotation covers the safety profile. It is nearly complete for a simple status tool, though it could clarify when in the upload lifecycle it should be called.
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 upload_id is documented as coming from create_upload_link. The description adds no further parameter meaning, so the baseline 3 is appropriate when the schema already carries the parameter semantics.
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 identifies the resource as an upload link and states that it reports files sent so far and whether they were added after Done was pressed. It is specific enough to distinguish this status lookup from create_upload_link and upload_attachment, though it does not explicitly name those alternatives.
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 phrase 'once Done was pressed' implies this is used after an upload flow has progressed, giving some contextual usage signal. However, there is no explicit guidance on when to call it versus create_upload_link or upload_attachment, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invite_peopleInvite PeopleA
Invite people to the workspace by email. Docmost emails each one a link to join and set a password; they get the workspace role (member or admin) and join the groups given (names or ids). Emails of people already in the workspace or already invited are skipped and listed. Check the addresses with the person you work for before inviting. Needs a workspace admin or owner.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | member or admin. | member |
| emails | Yes | Email addresses to invite. | |
| groups | No | Groups to join on sign-up: names or group ids. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: Docmost emails each invitee a join link and password setup, assigns the workspace role and groups, skips emails already in the workspace or already invited, and lists those skipped. It also discloses the admin/owner requirement, which is important context for a non-readOnly, openWorld invitation tool.
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 action and then layers in useful behavioral details without excessive length. Each sentence mostly earns its place, though the caution sentence is slightly advisory rather than strictly necessary.
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 an invitation tool with annotations covering safety traits and a full output schema, the description is complete: it covers the email mechanism, role/group assignment, duplicate skipping, prerequisites, and a practical caution. An agent has enough context 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?
Schema description coverage is 100%, so the schema already documents emails, role, and groups. The description restates that role is member or admin and groups accept names or ids, adding little meaning beyond the structured parameter definitions.
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: inviting people to the workspace by email. The action is clear, but it does not explicitly differentiate itself from sibling invitation tools such as resend_invitation or revoke_invitation, leaving an agent to infer the boundary.
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?
Provides clear context for use, including the prerequisite that the caller needs workspace admin or owner permissions, and advises checking addresses first. It does not name alternatives or explicitly state when not to use this tool, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_attachmentsList AttachmentsARead-only
List the files uploaded to a page (Docmost 0.96 or newer).
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| limit | No | Maximum number of items to return. | |
| cursor | No | Value of next_cursor from a previous call, to get more items. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds the version requirement, which is genuine behavioral context (the tool may fail on older servers), but says nothing about result ordering, pagination behavior, or empty results.
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?
A single, front-loaded sentence with zero waste; the resource and scope come first and the version caveat is appended compactly. For a simple paginated list tool this is the right size.
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 and full parameter documentation, the description needn't explain return values. It is still thin on how to iterate pages and how this relates to get_attachment/upload_attachment, leaving an agent to infer the listing workflow.
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% – page accepts id/slug/URL, limit is bounded 1-100 with default 50, and cursor is explained as next_cursor from a prior call. The description adds nothing beyond this, so it sits at the baseline rather than exceeding it.
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 the files uploaded to a page"), which cleanly separates it from get_attachment (single-file fetch) and upload_attachment. It doesn't explicitly name any sibling, so it falls short of full sibling differentiation.
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 parenthetical "(Docmost 0.96 or newer)" is a useful prerequisite/version gate, implying when the tool is available. However, it gives no explicit guidance on when to use this versus get_attachment, or on how to page through results with limit/cursor beyond what the schema states.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_backlinksList BacklinksARead-only
Pages that link to this page (incoming), or that this page links to (outgoing). Use it before moving, renaming or trashing a page. Needs Docmost 0.90 or newer.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| limit | No | Maximum number of items to return. | |
| cursor | No | Value of next_cursor from a previous call, to get more items. | |
| direction | No | incoming: pages linking here; outgoing: pages linked from here. | incoming |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint true, openWorldHint false), so the description is only required to add operational context beyond that. It does so with the version prerequisite 'Needs Docmost 0.90 or newer', which the agent cannot infer from annotations or schema. It says nothing about pagination or result shape, but an output schema covers that.
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, front-loaded with the core resource definition. The first clause restates the direction enum, a slight duplication, but nothing else is wasted.
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 annotations covering safety, a full schema, and an output schema present, the description only needs purpose, trigger, and prerequisites, all of which it supplies. Missing only minor detail such as pagination expectations, which the cursor parameter already implies.
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 page, limit, cursor, and direction, including the enum meanings. The description only restates the direction semantics, adding no extra format or usage detail beyond 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?
The description states the exact resource and both directional modes ('Pages that link to this page (incoming), or that this page links to (outgoing)'), so an agent immediately knows what is returned. It does not explicitly name or differentiate itself from any sibling, because no sibling overlaps this function.
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?
'Use it before moving, renaming or trashing a page' gives a concrete trigger tied to specific sibling tools (move_page, rename_page, trash_page). It gives clear positive guidance but names no exclusions or alternative tools for other backlink-adjacent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_commentsList CommentsARead-only
List the comments on a page, oldest first. Replies carry parent_comment_id.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of items to return. | |
| cursor | No | Value of next_cursor from a previous call, to get more items. | |
| page_id | Yes | Page id or slug id. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral detail beyond the readOnlyHint annotation: comments are returned oldest first, and replies are represented with parent_comment_id. It does not mention pagination behavior despite limit and cursor parameters.
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 two short sentences with no wasted text. The core purpose and ordering behavior are front-loaded.
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 read-only annotations, full schema descriptions, and an output schema, the definition is largely complete. The only notable omission is explicit pagination context for limit and cursor.
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 page_id, limit, and cursor. The description adds only the phrase 'on a page' and does not enrich parameter meaning beyond that 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?
The description states a specific verb and resource: listing comments on a page. It is clearly different in practice from add_comment and update_comment, but it does not explicitly name or contrast those siblings.
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 by 'List the comments on a page,' but the description gives no explicit when-to-use guidance, exclusions, or alternatives. It is adequate but leaves routing to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_group_membersList Group MembersCRead-only
List the people in a group.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group name or id from list_groups. | |
| limit | No | Maximum number of items to return. | |
| cursor | No | Value of next_cursor from a previous call, to get more items. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that: it never mentions that results are paginated via limit/cursor, nor how members are ordered or what identity fields come back.
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?
A single front-loaded sentence with zero waste. It is arguably under-specified rather than verbose, but structurally sound.
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, and annotations cover safety. However, for a paginated list tool, the description should at least hint that results are paged and that group ids come from list_groups, leaving the definition barely adequate.
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%, with limit, cursor, and the group reference (pointing at list_groups) all documented in the schema. The description adds no additional meaning, which is the baseline 3 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 gives a specific verb (list) and resource (people in a group), so its intent is unambiguous. It fails to differentiate from close siblings such as list_space_members, list_workspace_members, or list_groups, which is the only thing keeping it off a 5.
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?
There is no guidance on when to use this tool versus its many membership-listing siblings, and no prerequisites are stated. The agent must infer from the name alone that this lists group members rather than space or workspace members.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_groupsList GroupsARead-only
List the workspace's groups, optionally filtered by a part of their name.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of items to return. | |
| query | No | Part of a name or email to filter by. | |
| cursor | No | Value of next_cursor from a previous call, to get more items. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=false, so the safety profile is already covered. The description adds the scoping constraint ('workspace's groups') and optional filtering, but it does not describe pagination behavior or result shape beyond what the schema already provides.
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?
A single, front-loaded sentence with no wasted words. The core action and optional filter are immediately clear.
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 simple read-only listing tool with a complete input schema and an output schema, the definition is nearly sufficient. It could mention pagination or result ordering, but the cursor parameter and output schema cover much of that need.
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 in the input schema. The description adds little beyond the schema and slightly narrows the query filter to 'name' even though the schema specifies 'name or email,' so baseline 3 is appropriate.
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 ('List the workspace's groups') plus an optional filter. It is clear and distinguishes the tool from group membership and group mutation siblings by naming 'groups' as the resource, though it does not explicitly name a sibling alternative.
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 phrase 'optionally filtered by a part of their name' implies when the query parameter is useful, but there is no explicit guidance on when to use this tool versus list_group_members, list_workspace_members, or other listing tools. Usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_invitationsList InvitationsARead-only
List pending invitations to the workspace, optionally filtered by a part of the email.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of items to return. | |
| query | No | Part of an email to filter by. | |
| cursor | No | Value of next_cursor from a previous call, to get more items. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds the useful constraint that only pending invitations are returned (not accepted, revoked, or expired), but says nothing about ordering or result limits. Some added value, not rich context.
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?
A single front-loaded sentence with no wasted words; the resource scope comes before the optional filter clause.
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 and every parameter documented, the description supplies what an agent needs to call the tool correctly. Minor gaps remain around pagination behavior and default ordering, but nothing essential 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 limit, query, and cursor are all documented in the schema, including cursor's next_cursor semantics. The description's mention of the email filter duplicates the schema and adds no format or matching detail beyond it. 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 ('List') and resource ('pending invitations to the workspace') with a clear scope qualifier. This distinguishes it from the other list_* siblings such as list_workspace_members and list_space_members, which cover accepted members rather than invitations. It is clear, though it does not name a sibling explicitly.
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 'optionally filtered by a part of the email' phrase implies when to pass query, but there is no statement of when to use this tool versus resend_invitation/revoke_invitation or the member lists. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_labelsList LabelsARead-only
List labels: those of one page, or without page all labels used in the workspace. Needs Docmost 0.90 or newer.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Only the labels of this page. | |
| limit | No | Maximum number of items to return. | |
| cursor | No | Value of next_cursor from a previous call, to get more items. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is a read-only, non-open-world operation. The description adds a useful compatibility prerequisite ('Needs Docmost 0.90 or newer'), but does not explain authorization needs, pagination behavior, or other operational details.
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 two short sentences, front-loads the scope distinction, and includes the version prerequisite without unnecessary filler. Every sentence contributes useful 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?
For a simple read-only list tool with full schema coverage and an output schema, the description is nearly complete: it explains the page-vs-workspace behavior and compatibility requirement. Minor operational details such as pagination and permissions are left to structured fields.
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 meaningful semantics for the optional page parameter: omitting it lists all labels used in the workspace. It does not add details for limit or cursor, which remain covered by 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?
The description states a specific verb and resource ('List labels') and clarifies both scopes: labels for one page, or all workspace labels when no page is specified. This distinguishes it from label-mutation siblings and from find_pages_by_label, which performs the reverse lookup.
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 explains the two operating modes through the optional page parameter, but does not explicitly say when to use this tool rather than alternatives such as find_pages_by_label. The usage is implied clearly enough, but there are no stated exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_page_historyList Page HistoryARead-only
List the versions of a page that Docmost saved, newest first, with who changed it. Docmost saves a version a few minutes after edits stop. Read one with get_page_version or compare with diff_page.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| limit | No | Maximum number of items to return. | |
| cursor | No | Value of next_cursor from a previous call, to get more items. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuinely new behavioral context: result ordering is newest-first and Docmost persists a version a few minutes after edits stop, which tells the agent a just-made edit may not yet appear. It does not discuss pagination limits, but the schema does.
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, each earning its place: what it returns, the write-latency caveat, and the hand-off to sibling tools. Ordering and author information are front-loaded.
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, the description needn't explain return shape, and it covers scope, ordering, latency semantics, and alternatives. Only the pagination story (cursor) is left entirely to the schema, a minor omission.
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 page id/slug/URL, limit, and cursor semantics. The description adds no parameter-level syntax or format detail beyond that, making the baseline 3 correct.
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 the versions of a page') plus the ordering ('newest first') and the payload detail ('with who changed it'). This clearly separates it from get_page_version, list_snapshots, and the other page-related siblings.
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 onward: 'Read one with get_page_version or compare with diff_page,' which distinguishes enumeration from retrieval and diffing. It lacks any explicit 'when not to use' (e.g., list_snapshots vs. version history), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pagesList PagesARead-only
List pages of a space as a tree, one level at a time: without parent_page_id the top-level pages, with it the children of that page. has_children tells whether a page has children to list next. To see several levels in one call, use get_page_tree; to find a page by name, use suggest or search.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of items to return. | |
| cursor | No | Value of next_cursor from a previous call, to get more items. | |
| space_id | Yes | Space id from list_spaces. | |
| parent_page_id | No | List the children of this page. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds traversal semantics that annotations cannot convey: one-level-at-a-time pagination and the meaning of has_children as a signal for the next call. It doesn't restate cursor/limit behavior, but the schema already documents those.
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, front-loaded with the core behavior, then the branching rule, then alternative routing. No redundant restatement of names or schema fields.
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 so return values need not be explained, yet the description still clarifies the one output field an agent must act on (has_children). Combined with mode semantics and sibling routing, an agent has everything needed to call this 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 baseline is 3. The description still adds value by defining what the ABSENCE of parent_page_id means (top-level pages), a default-behavior detail the schema's per-parameter text does not state.
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 pages of a space as a tree, one level at a time) and immediately defines the two operating modes via parent_page_id. This clearly separates it from flat-listing or tree-fetching siblings.
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 says when to use this versus alternatives: get_page_tree for multiple levels in one call, suggest or search for finding a page by name. Both the exclusion and the routing target are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_snapshotsList SnapshotsARead-only
List the snapshots of a page body that this server saved before your own changes to it, newest first. Snapshots are kept 30 days.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| limit | No | Most snapshots to return. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely non-derivable behavior: newest-first ordering, the fact that only snapshots created by this server prior to the agent's own edits are listed, and a 30-day retention window that tells the agent results may be incomplete for older content.
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?
Two short sentences, with the core verb+resource+ordering front-loaded and the retention caveat placed last. No filler or restatement of the title.
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, and the description covers ordering, retention, and scope. The one remaining gap for a snapshot/versioning surface is routing relative to list_page_history, get_page_version, diff_page, and restore_snapshot.
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% — the 'page' parameter already documents accepted forms (id, slug id, URL) and 'limit' documents its default and bounds. The description adds no parameter-level detail beyond what the schema carries, so the baseline of 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 and resource ('List the snapshots of a page body') plus scope ('that this server saved before your own changes to it') and ordering ('newest first'). An agent can identify what it returns, though the description never distinguishes it from close siblings like list_page_history or get_page_version.
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 only implied: the 'saved before your own changes' framing hints at pre-edit recovery scenarios, and a sibling named restore_snapshot suggests the workflow. There is no explicit 'use this when X, use list_page_history when Y' guidance or statement of prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_space_membersList Space MembersARead-only
List the users and groups that have a role in a space.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of items to return. | |
| cursor | No | Value of next_cursor from a previous call, to get more items. | |
| space_id | Yes | Space id from list_spaces. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds one genuinely useful behavioral fact—results include both users and groups with roles—but says nothing about pagination behavior, whether inherited/effective roles are included, or what role information is returned.
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?
A single front-loaded sentence with zero waste. It is efficient, though the terseness comes at the cost of the missing usage and behavioral detail noted above.
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 simple read-only list tool, the key elements are covered elsewhere: annotations give the safety profile, the schema fully documents all three parameters, and an output schema exists to explain return values. Only the user-vs-group/role semantics and pagination expectation are left thin.
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 space_id, limit, and cursor are all documented in the schema (space_id even points to list_spaces). The description adds no additional parameter meaning, 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?
Specific verb ('List') plus resource ('users and groups that have a role in a space') and the 'in a space' scoping implicitly separates it from list_workspace_members. It does not explicitly name or contrast with any sibling, so it stops short of a 5.
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 only implied: an agent can infer this is the per-space membership listing as opposed to the workspace-level one, but no when-to-use, prerequisites, or named alternative (list_workspace_members, list_group_members) is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_spacesList SpacesARead-only
List the Docmost spaces you can access, with your role in each. Start here to get the space ids other tools need.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of items to return. | |
| cursor | No | Value of next_cursor from a previous call, to get more items. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds two genuinely useful facts beyond them – results are limited to spaces the caller can access, and each entry carries the caller's role – but says nothing about ordering, clustering, or handling empty results, so it is incremental rather than rich.
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?
Two short sentences, zero filler, with the resource and scope front-loaded and the workflow cue second. Nothing repeated from schema or annotations.
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 and annotations cover safety, so the description only needs to orient the agent – which it does by naming the access scope and the returned role field. A note on ordering or on what an empty list implies would close the remaining gap.
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% and both parameters (limit, cursor) are fully documented in the schema with defaults and bounds. The description adds no syntax or format detail about them, 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 (List) and resource (Docmost spaces) plus a scope qualifier ('you can access') and the extra payload ('with your role in each'). That distinguishes it from get_space (single space) and create_space without naming them explicitly; only the absence of explicit sibling naming keeps it from a 5.
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?
'Start here to get the space ids other tools need' gives a concrete sequencing cue that tells an agent to call this before tools requiring a space id. It doesn't state exclusions (e.g., when to prefer whoami or get_space instead), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_trashList TrashARead-only
List the pages in the Trash of a space, most recently deleted first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of items to return. | |
| cursor | No | Value of next_cursor from a previous call, to get more items. | |
| space_id | Yes | Space id from list_spaces. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description does add one genuine behavioral fact — results are ordered most recently deleted first — which is not in the schema or annotations. It says nothing about pagination depth or whether the space must be accessible, so the addition is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence with the resource and the ordering front-loaded. Nothing is wasted and nothing needs to be scanned for.
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 and full parameter documentation, the remaining burden on the description is small; it supplies the one thing structured data lacked, the sort order. Only the relationship to restore_page / list_pages is unstated.
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% and all three parameters (space_id, limit, cursor) are documented inline, including the list_spaces cross-reference. The description adds no parameter meaning beyond that, which is the baseline expectation.
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 (pages in the Trash of a space), plus a scope qualifier (a space) that separates it from workspace-wide listing. It is implicitly distinct from list_pages, but that separation is never made explicit by naming the sibling.
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 only implied: an agent infers this is the lookup to run before restore_page or trash_page. No when-to-use/when-not guidance and no named alternative (e.g., list_pages for live pages) is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workspace_membersList Workspace MembersARead-only
List the people in the Docmost workspace with their workspace role, optionally filtered by a part of their name or email.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of items to return. | |
| query | No | Part of a name or email to filter by. | |
| cursor | No | Value of next_cursor from a previous call, to get more items. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds that each entry carries a workspace role and that filtering matches partial names/emails — useful context — but says nothing about pagination behavior or whether deactivated members are included, both of which matter for this tool.
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?
One sentence, front-loaded with the verb and resource, with the optional filter clause deferred to the end. Nothing is wasted or repeated.
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 and full parameter documentation, the description needn't explain return values or pagination mechanics. The main remaining gap is the lack of disambiguation from list_space_members and list_group_members, which is a real risk given eight sibling membership tools.
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 limit, query, and cursor each documented (including next_cursor semantics), so the schema carries the parameter burden. The description only restates the query filter as a substring match, adding marginal clarification over the schema's 'Part of a name or email to filter by.'
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?
Clear verb+resource: lists people in the Docmost workspace, states that workspace role is returned, and that filtering is optional and substring-based. It does not, however, distinguish itself from the nearby sibling list_space_members (per-space members) or list_group_members, which an agent could easily confuse it with.
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 by 'workspace' and the optional filter, so an agent can infer this is the workspace-wide roster rather than a space roster. But there is no explicit 'use this when...' statement and no exclusion naming list_space_members as the alternative for space-scoped membership.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_pageMove PageA
Move a page to another place in the same space: under parent_page_id, or to the top level when it is empty. The page goes to the end of that level, to the start with first=true, or right after after_page_id. Child pages move with it.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| first | No | Place at the start of the level. | |
| after_page_id | No | Place right after this page at the new level. | |
| parent_page_id | No | New parent page; empty for the top level. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses an important side effect: 'Child pages move with it.' It also explains ordering behavior (end by default, start with first=true, or after after_page_id). It does not cover permissions or failure conditions such as attempting to move a page under its own descendant.
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 two tightly written sentences with no filler. It front-loads the scope and destination behavior before adding the child-page side effect.
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 same-space move operation with full schema coverage, annotations, and an output schema, the description covers the key calling context: destination modes, ordering, and child-page movement. Remaining gaps are around error conditions and explicit sibling routing, but no essential invocation detail 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?
The schema already documents all four parameters at 100% coverage, but the description adds relational meaning: an empty parent_page_id means top level, first=true places the page at the start, after_page_id places it right after a specific page, and the default destination is the end of the level. It does not explicitly state whether first and after_page_id are mutually exclusive.
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: 'Move a page to another place in the same space.' It immediately clarifies the destination options (parent_page_id or top level) and implicitly distinguishes this from the cross-space sibling move_page_to_space by emphasizing 'same space.'
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 gives clear context for when to use this tool: moving within the same space, either under a parent or to top level. It also explains how to choose placement using first=true or after_page_id, but it does not explicitly name move_page_to_space as the alternative for cross-space moves.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_page_to_spaceMove Page To SpaceA
Move a page with its child pages to the top level of another space. Everyone in the target space gains access to them and members of the old space may lose it. Child pages you cannot access stay behind as top-level pages of the old space. Clients that can ask the person first do so.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| space_id | Yes | Target space id from list_spaces. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that target-space members gain access, old-space members may lose it, and inaccessible child pages stay behind as top-level pages in the source space. That is exactly the kind of consequence an agent needs before a mutation. It stops short of stating whether access changes are fully reversible or what permissions the caller needs, and it does not contradict the destructiveHint=false annotation.
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 destination, then consequences, then edge case, then client behavior. No filler and no repetition of schema or annotation content.
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 no explanation, the two parameters are fully documented in the schema, and the description covers the non-obvious effects (access changes, orphaned child pages, confirmation). Nothing material is missing for an agent to call this 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 the baseline is 3, and the description adds real meaning by clarifying that the `page` parameter acts recursively on the whole child tree and that `space_id` denotes a different space than the page's current one. It adds nothing about accepted id formats, but the schema already covers those.
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 (move) and resource (page with its child pages) plus the exact destination semantics ('top level of another space'), which distinguishes it from the sibling move_page without needing to open either 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?
The cross-space, top-level-only scope implies when this tool applies, and the confirmation hint ('Clients that can ask the person first do so') signals a human-in-the-loop workflow. However, it never names move_page as the alternative for within-space moves or states prerequisites such as required permissions, so selection guidance remains inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recent_pagesRecent PagesARead-only
List recently updated pages, newest first, in one space or in all spaces, to see what changed lately. For the changes of one page, use list_page_history.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of items to return. | |
| cursor | No | Value of next_cursor from a previous call, to get more items. | |
| space_id | No | Only pages in this space. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description still adds behavioral detail the annotations don't carry: result ordering is newest-first and the scope can be a single space or the whole workspace. It stops short of defining the recency window or whether inaccessible pages are filtered.
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?
Two tight sentences. The core behavior and ordering are front-loaded, and the second sentence is a single high-value routing pointer with 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?
With an output schema present, the description needn't explain return values, and all three parameters are schema-documented, so an agent can call it correctly. The remaining gap is the undefined meaning of 'recently' (time window and whether edits or creations count), which matters for interpreting the result.
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 limit, cursor, and space_id are already fully documented. The description only reinforces that space_id is optional ('one space or in all spaces') and adds no format or constraint detail beyond the schema, so the baseline of 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 and resource ('List recently updated pages') plus ordering ('newest first') and scope ('one space or in all spaces'). It explicitly distinguishes itself from the closest sibling, list_page_history, so an agent can choose without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit purpose ('to see what changed lately') and names the alternative for the per-page case ('For the changes of one page, use list_page_history'), which is a clear routing rule. It does not contrast with list_pages (all pages, not time-ordered), so the space of alternatives is only partially covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_labelRemove LabelA
Remove a label from a page. A label no page uses any more disappears from the workspace. Needs Docmost 0.90 or newer.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| label | Yes | Label name: letters, digits, '-', '_' and '~'. Docmost stores it lowercase. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses a real side effect the agent could not otherwise know: a label no longer used by any page vanishes from the workspace entirely. It also adds a version prerequisite. It stops short of covering idempotency or what happens when the label is not attached to the page.
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, front-loaded with the action, then the side effect, then the version gate. Nothing is redundant.
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 no explanation, and the description covers the action, its cascade effect and a version requirement. Only edge behavior (label not present, repeat calls) is left implicit, which is minor 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 'page' (id/slug/URL) and the 'label' naming pattern are already fully documented. The description adds no format or resolution semantics beyond that 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?
The first sentence pairs a specific verb (Remove) with a specific resource (a label from a page), which cleanly separates it from add_labels and list_labels. It does not name any sibling explicitly, so it falls short of the top mark.
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?
There is no explicit when-to-use/when-not guidance; the agent must infer that this is the counterpart to add_labels. The Docmost 0.90+ prerequisite is a useful precondition but is not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_pageRename PageA
Change the title of a page; its body and place in the tree stay as they are.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| title | Yes | Page title. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only but non-destructive operation. The description adds useful non-effect context: only the title changes, while the body and tree placement remain intact. It does not cover permissions, title conflicts, or other mutation details, so it adds some but not rich behavioral context.
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?
A single, front-loaded sentence with no wasted words. The purpose and key non-effect are both stated efficiently.
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 tool is simple, annotations cover the safety profile, and an output schema exists. The description gives enough context for correct invocation, though it could more explicitly route the agent away from update_page when only a title change is needed.
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. The description adds no parameter-level detail beyond the schema baseline, which is appropriate.
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: 'Change the title of a page.' The clause 'its body and place in the tree stay as they are' distinguishes it from broader updates or moves, though it does not explicitly name a sibling tool.
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 implies this is the tool for title-only changes, since body and tree position are unaffected. However, it does not explicitly say when to use this instead of update_page or move_page, so the agent must infer the boundary from the scope statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_page_jsonReplace Page JsonADestructive
Replace a whole page body with a ProseMirror JSON document, as get_page with format='json' returns it. Unlike Markdown this keeps everything Docmost can show: colors, merged table cells, columns, diagrams, mentions, comment highlights. Read the page as JSON first, change it and send the complete document. It is checked against Docmost's editor schema before anything is written, refused while someone else is editing the page, and the previous body is saved as a snapshot. With dry_run=true nothing is written; the result lists any problems and shows the change as a Markdown diff.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| dry_run | No | Only show the change as a diff; write nothing. | |
| document | Yes | The ProseMirror document: {'type': 'doc', 'content': [...]}. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the destructiveHint=true annotation: it discloses editor-schema validation before any write, refusal while another user is editing the page, automatic snapshot of the previous body, and the exact dry_run behavior (nothing written, problems listed, Markdown diff returned). These are precisely the operational facts an agent needs before invoking a destructive whole-document overwrite.
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 tight sentences: what it does, why JSON is chosen, the round-trip procedure, and the safety/preview guarantees. Nothing repeats, and the core operation is front-loaded.
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?
Complete for a destructive, nested-payload mutation: validation, concurrency refusal, snapshotting, and a safe dry-run path are all covered, and an output schema exists so return values need not be explained. No gap remains for correct invocation.
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 page (id/slug/URL), dry_run (boolean with diff semantics), and document (ProseMirror shape) are already documented. The description mostly restates the round-trip origin of 'document' and the purpose of dry_run without adding syntax or constraints beyond 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 ('Replace a whole page body') plus the exact payload format (ProseMirror JSON), and contrasts it with the Markdown-based path. An agent can immediately distinguish it from update_page, replace_section, and rename_page 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 an explicit workflow: read the page as JSON via get_page with format='json', modify, and send the complete document, plus the dry_run preview path. It does not name the sibling tools it replaces (replace_section, update_page) or state when to prefer a partial-section edit instead, so it stops short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_sectionReplace SectionADestructive
Replace one section of a page, found with get_page_outline and read with get_section. Pass the section_hash from get_section: if the section changed since, nothing is written. By default the heading is kept and content replaces what is under it, subsections included; with keep_heading=false content replaces the heading too, and an empty content removes the section. The whole body is saved as a snapshot first. The whole body is rewritten from Markdown, so this is refused on pages with formatting Markdown cannot hold, as update_page replace is.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| index | Yes | Section index from get_page_outline. | |
| content | Yes | New Markdown for the section. | |
| dry_run | No | Only show the change as a diff; write nothing. | |
| keep_heading | No | Keep the section's heading line. | |
| section_hash | Yes | section_hash from get_section. | |
| drop_formatting | No | Write even though the page has formatting Markdown cannot hold, which is then removed. Prefer replace_page_json for such pages. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond destructiveHint=true: it discloses optimistic concurrency ('if the section changed since, nothing is written'), that a snapshot is taken first, that the body is rewritten from Markdown and may be refused, that empty content deletes the section, and that drop_formatting is lossy. These are exactly the risk facts an agent needs before a destructive write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and its locator, then layered with constraints; every sentence carries decision-relevant content and none is filler. It is dense and slightly run-on in the middle clauses, but no sentence could be dropped without losing a behavior.
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 7-parameter destructive mutation with an output schema already defined, the description covers the write path, safety protections, refusal conditions, and the escape hatches (dry_run, drop_formatting). Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds real meaning on top by explaining section_hash as a staleness guard, keep_heading default behavior including subsection scope, and the empty-content deletion case. page and index are left to the schema, which is fine given full coverage.
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 ('Replace one section of a page') and immediately scopes it against siblings by naming get_page_outline, get_section, update_page replace, and replace_page_json. An agent can tell exactly which tool this is and where it sits in the workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes the read path (outline -> get_section -> section_hash) and names the alternative for unsupported pages ('Prefer replace_page_json for such pages', restated as 'refused ... as update_page replace is'). Both the when-to-use prerequisites and the when-to-use-something-else case are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resend_invitationResend InvitationA
Send an invitation email again, for someone who did not get it or lost it. Needs a workspace admin or owner.
| Name | Required | Description | Default |
|---|---|---|---|
| invitation_id | Yes | Invitation id from list_invitations. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the agent knows this is a non-destructive external side-effect action. The description usefully adds the admin/owner requirement, but it does not disclose email delivery side effects, rate limits, or whether resending invalidates the previous invitation token.
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?
Two short sentences with the action, use case, and permission requirement front-loaded. Every sentence earns its place and there is no redundant wording.
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 simple one-parameter mutation tool with an output schema and annotations, the description covers purpose, permission prerequisite, and intended use case. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single parameter is documented as 'Invitation id from list_invitations.' The description adds no further parameter semantics, which is acceptable given the schema already carries the necessary 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 states a specific verb and resource: send an invitation email again. It clearly implies the tool acts on an existing invitation rather than creating one, but it does not explicitly distinguish itself from siblings such as invite_people or revoke_invitation.
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 gives a clear use case—someone did not receive or lost the invitation—and states the required permission level (workspace admin or owner). It does not mention when to choose revoke_invitation or invite_people instead, but the context is sufficiently clear for a simple action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_pageRestore PageA
Restore a page from the Trash, with its child pages. Use list_trash to find it.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id or slug id from list_trash. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the non-read-only, non-destructive profile, but the description adds a genuinely important side effect the schema cannot convey: child pages are restored along with the parent. It still doesn't mention conflict/name-collision behavior or whether a trashed ancestor is required, so it stops short of full disclosure.
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?
Two short sentences with zero filler; the action and its cascade behavior come first, the prerequisite lookup second. Every clause earns its place.
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 no explanation, and the description covers the action, the cascade effect, and how to obtain the id. Minor gaps remain around failure modes (missing ancestor, name conflict), but nothing critical for correct invocation 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 the single 'page' parameter is already documented as an id or slug id from list_trash, so the description only echoes the schema's provenance hint. Baseline 3 is appropriate when the schema carries the semantic load.
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 ('Restore a page') plus the source location ('from the Trash'), which implicitly separates it from restore_page_version and restore_snapshot. It does not explicitly name those look-alike siblings, but the Trash framing makes the scope clear.
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?
'Use list_trash to find it' gives concrete workflow guidance and names the sibling that supplies the required identifier. It does not cover when-not-to-use (e.g., restoring a previous version vs. a trashed page), which keeps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_page_versionRestore Page VersionADestructive
Put a page body back to a version from list_page_history, exactly as Docmost saved it, formatting included. The current body is saved as a snapshot first, so restore_snapshot can undo it. The title is not changed.
| Name | Required | Description | Default |
|---|---|---|---|
| version_id | Yes | Version id from list_page_history. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive, and the description adds important behavior beyond that: the current body is snapshotted first, formatting is preserved exactly, and the title is left untouched. These details directly help an agent understand the mutation's side effects and reversibility.
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, front-loaded with the primary action and followed by the most important behavioral caveats. Every sentence adds useful information without repetition.
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 one-parameter destructive restore tool with a complete schema, output schema, and annotations, the description covers the key agent concerns: source of the version, formatting fidelity, snapshot safety net, and unchanged title.
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 version_id parameter is already documented as coming from list_page_history. The description reinforces the source but does not add format or selection semantics beyond 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: put a page body back to a version from list_page_history. It also distinguishes scope by noting formatting is included and the title is not changed, which separates it from broader page or snapshot restoration 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?
Clearly indicates the version source (list_page_history) and names restore_snapshot as the undo path. It implies when to use this rollback tool, though it does not explicitly state when not to use it versus restore_page or restore_snapshot.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_snapshotRestore SnapshotADestructive
Put a page body back to a snapshot from list_snapshots. The current body is saved as a new snapshot first, so a restore can be undone the same way.
| Name | Required | Description | Default |
|---|---|---|---|
| snapshot_id | Yes | Snapshot id from list_snapshots. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations flag destructiveHint=true, and the description adds non-obvious context beyond them: the current body is first captured as a new snapshot, making the restore reversible. That is exactly the kind of nuance annotations cannot express. It stops short of stating permission requirements or whether the new snapshot is visible in list_snapshots.
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?
Two sentences, no filler, with the core restore action front-loaded and the safety-net behavior immediately after. Every clause carries information the agent needs.
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 and annotations cover returns and safety, and the description supplies the reversible-restore behavior that matters most for a destructive operation. The only meaningful gap is the lack of differentiation from the sibling restore tools.
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 documented there, so the baseline is 3. The description reinforces the source of snapshot_id without adding format or validation detail beyond 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 ('Put a page body back to a snapshot') and ties the input to list_snapshots, so the operation is unambiguous. It does not, however, distinguish itself from siblings like restore_page_version or restore_page, which sound like near-identical restore operations.
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 implies the prerequisite workflow by naming list_snapshots as the source of snapshot_id, which is useful. It gives no guidance on when to choose this over restore_page_version or restore_page, so an agent facing several restore tools must guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revoke_invitationRevoke InvitationA
Cancel a pending invitation; its link stops working. The person can be invited again later. Needs a workspace admin or owner.
| Name | Required | Description | Default |
|---|---|---|---|
| invitation_id | Yes | Invitation id from list_invitations. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: the invitation link is invalidated, the action is recoverable (re-invite is possible), and it requires admin/owner privileges. The recoverability note is consistent with destructiveHint=false since nothing is permanently destroyed. It doesn't say whether revoking an already-accepted invitation errors out, which keeps it from 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?
Three short sentences in descending priority: action+effect, reversibility, then prerequisite. Zero 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 one-parameter mutation with an output schema already defined, the description covers effect, reversibility, and permission gating — everything an agent needs before calling 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 coverage is 100% and the single parameter already carries a description pointing at list_invitations. The description adds nothing about the id's format or failure behavior, 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 (cancel/revoke) and resource (a pending invitation) plus the observable effect: 'its link stops working.' That effect cleanly separates it from resend_invitation and invite_people without needing to name them.
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?
Scoping is explicit — it applies to a pending invitation only, and the follow-up 'can be invited again later' tells the agent this is the non-permanent path versus deactivate_member. It states the required role (workspace admin or owner) but doesn't explicitly name the sibling alternative for a different case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearchARead-only
Full-text search over page titles and bodies you can access. Returns matching pages with a short snippet; use get_page to read one. Can be narrowed to titles, labels or pages you created. To find a page or person by a part of its name, suggest is faster.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Most results to return. | |
| query | Yes | Search words. | |
| labels | No | Only pages with all these labels. Needs Docmost 0.96 or newer. | |
| space_id | No | Only search this space. | |
| title_only | No | Match page titles only. Needs Docmost 0.96 or newer. | |
| created_by_me | No | Only pages you created. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, and the description adds what they cannot: results come back as snippets rather than full bodies, and coverage is limited to content the caller can access. It does not discuss ranking, empty-result behavior, or paging beyond the schema's limit, which keeps 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?
Three short sentences, organized as capability, return shape plus follow-up, then narrowing options, then the alternative. Every clause carries actionable information and the most important facts come first.
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, the description needn't explain result structure, and the schema covers parameter constraints and version prerequisites. The remaining agent-facing gaps — result format at a high level, access scoping, and sibling routing — are all answered.
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 all six parameters are already documented in the schema. The description's 'narrowed to titles, labels or pages you created' paraphrases title_only, labels, and created_by_me but adds no detail beyond them, and space_id and limit go unmentioned in prose — 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 and resource ('Full-text search over page titles and bodies') plus the access scope ('you can access'). It names the sibling it is not ('suggest' for partial-name/person lookup) and the follow-up tool ('get_page'), so an agent can place it precisely among the 60+ siblings.
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 routing: use get_page to read a hit, use suggest when you only have part of a name or need a person. Also states the narrowing options, so an agent knows both when to pick this tool and how to scope the call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggestSuggestARead-only
Quick lookup by name, as Docmost's own search box and @-mentions do: pages whose title matches, and optionally people and groups. Faster than search and good for finding a page id or a person's id from a part of a name.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Matches of each kind. | |
| pages | No | Look for pages by title. | |
| query | Yes | Start of or part of a name. | |
| groups | No | Also look for groups by name. | |
| people | No | Also look for people by name or email. | |
| space_id | No | Only pages in this space. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=false), and the description adds real semantic detail: matching is on titles/names rather than content, and the tool mirrors Docmost's own search box and @-mentions behavior. It doesn't discuss ranking or result ordering, but the output schema covers the return shape.
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?
A single front-loaded sentence that names the operation, the matching model, the optional result kinds, and the comparative advantage over search. 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 six-parameter read-only lookup with full schema coverage, annotation hints, and an output schema, the description covers what an agent needs to choose and call it. Only minor gaps remain, such as match semantics (prefix vs. substring) and result ordering.
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% with per-parameter descriptions for limit, pages, people, groups, and space_id. The description only restates that people and groups are optional and echoes the partial-name matching already in the schema, so it adds little beyond the structured fields.
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: a fast name lookup returning pages whose title matches, plus optional people and groups. It also names the sibling it differs from ('Faster than search'), so an agent can pick between suggest and search without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete use case — resolving a page id or person's id from a partial name — and explicitly contrasts with search on speed. The 'pages whose title matches' phrasing implicitly excludes content search, though no explicit 'do not use for' clause is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trash_pageTrash PageADestructive
Move a page and its child pages to the Trash of its space. It can be restored with restore_page. This server never deletes pages permanently. Clients that can ask the person first do so.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description adds the two facts an agent actually needs beyond that: the operation cascades to child pages, and it is never permanent ('This server never deletes pages permanently'). The note on client-side confirmation further clarifies the human-in-the-loop expectation, none of which is derivable from 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?
Four short sentences with the destructive action and its blast radius front-loaded; nothing is buried. The confirmation sentence is slightly tangential but justified by the destructive nature of the tool.
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 one-parameter mutation with an output schema present, the description covers the essentials: what happens, what it affects (children), and how to undo it. Return values need not be explained since an output schema exists.
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?
With a single required parameter at 100% schema coverage, the schema already documents that 'page' accepts an id, slug id or Docmost page URL. The description adds no additional meaning about the identifier form, 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 and resource plus the scope of effect: 'Move a page and its child pages to the Trash of its space.' The cascade to child pages is exactly the detail that distinguishes this from move_page or list_trash, and naming restore_page as the inverse anchors it against siblings.
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 can be restored with restore_page' routes the agent to the recovery path and implies this is the reversible alternative to permanent deletion. It never states when *not* to use it (e.g., prefer move_page or update_page instead of trashing), so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_commentUpdate CommentADestructive
Replace the text of one of your own comments with plain text. Docmost only lets you edit comments you wrote. The previous text is returned.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Comment text, plain text. | |
| comment_id | Yes | Comment id from list_comments. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description does not need to restate that this is a mutation. It adds useful context beyond annotations by disclosing the ownership restriction and noting that the previous text is returned. It does not contradict any annotation.
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 three short sentences, front-loaded with the core action and followed by the ownership constraint and return behavior. Every sentence contributes useful information without redundancy.
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 simple two-parameter mutation tool with full schema coverage, annotations, and an output schema, the description is complete enough. It covers the action, permission boundary, and return behavior, leaving nothing critical to inference.
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 by the input schema. The description reinforces that comment text is plain text, but it does not add meaningful parameter semantics beyond what the schema 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?
The description states a specific verb and resource: 'Replace the text of one of your own comments with plain text.' It clearly distinguishes update_comment from sibling tools like add_comment and list_comments by focusing on editing existing comment text. 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?
The description gives clear context for use by stating 'Docmost only lets you edit comments you wrote,' which defines the permission boundary. It does not explicitly name alternatives such as add_comment for creating or list_comments for retrieving IDs, so it falls short of full when/when-not/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_groupUpdate GroupA
Rename a group or change its description. Needs a workspace admin or owner.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New name; left out keeps it. | |
| group | Yes | Group name or id from list_groups. | |
| description | No | Short description. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the bar is lower. The description still adds the permission requirement, which is not in any structured field and is essential for a mutation tool. It does not mention name-collision behavior or whether partial updates are atomic, which keeps 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?
Two short sentences with zero waste. The action is front-loaded and the permission constraint follows immediately, with nothing padding the description.
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, all three parameters are documented, and annotations cover the safety profile, so the description is close to sufficient. The remaining gap is edge-case behavior on name conflicts or invalid group identifiers, which an agent would need when calling this against a live workspace.
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 each parameter carries its own description ('New name; left out keeps it.', 'Group name or id from list_groups.'), so the schema does the heavy lifting. The description only restates which fields are mutable, adding no format or constraint detail beyond that. Baseline 3 is correct here.
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 pair: rename a group or change its description. That clearly separates it from create_group, list_groups, and add_group_members by implication, though no sibling is named explicitly.
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 a concrete prerequisite ('needs a workspace admin or owner'), which is real usage guidance an agent can act on. It does not state when not to use it, nor does it name create_group or list_groups as the alternative paths, so the routing burden is only partly addressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_pageUpdate PageADestructive
Change a page body with Markdown. Prefer operation 'append' or 'prepend', which keep the existing text, comments and formatting. 'replace' rewrites the whole body; read the page first and send the complete new body. It is refused on pages with formatting Markdown cannot hold (get_page lists it in markdown_loses); use replace_page_json there. 'replace' is also refused while someone else is editing the page. The previous body is saved as a snapshot that restore_snapshot can bring back. With dry_run=true nothing is written and the result shows the change as a diff. To change one part of a long page, prefer replace_section.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| content | Yes | Markdown text. | |
| dry_run | No | Only show the change as a diff; write nothing. | |
| operation | No | append: add at the end; prepend: at the start; replace: all. | append |
| drop_formatting | No | Write even though the page has formatting Markdown cannot hold, which is then removed. Prefer replace_page_json for such pages. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, but the description goes well beyond them: it discloses the snapshot-and-restore safety net, the diff-only behavior of dry_run, the two refusal conditions, and the formatting-loss tradeoff of drop_formatting. That is exactly the behavioral context an agent needs to invoke a destructive mutation safely.
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 and the recommended default, with each subsequent sentence carrying a distinct constraint or alternative. It is dense and runs long, but nearly every clause earns its place; the replace-refusal rules could be tightened slightly.
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 the description need not explain return values, and it covers the mutation risks, refusal paths, alternatives, and defaults. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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: operation semantics are explained in terms of what is preserved versus rewritten, dry_run is tied to diff output, and drop_formatting is connected to its consequence and to the preferred alternative. Minor room remains (e.g., content size/length guidance is only 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 ('Change a page body with Markdown') and immediately frames the operation modes, which clearly separates it from siblings like replace_page_json, replace_section, and rename_page. An agent can tell what this tool is and what it is not 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?
Explicitly recommends 'append'/'prepend' over 'replace', tells the agent to read the page first before replacing, warns when 'replace' is refused (unrepresentable formatting, concurrent editing), and routes to replace_page_json and replace_section for those cases. This is a full when/when-not/alternatives map.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_spaceUpdate SpaceA
Change a space's name, slug or description. Changing the slug changes the space's URLs. Needs admin rights in the space.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New name; left out keeps it. | |
| slug | No | New short name for URLs, letters and digits; left out keeps it. | |
| space_id | Yes | Space id from list_spaces. | |
| description | No | Short description. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (not read-only, not destructive, closed-world). The description adds context beyond that: the operation is scoped to a single space, needs admin rights, and the slug change has a downstream effect on URLs. It does not mention whether omitted fields are preserved (the schema does) or what happens to existing links after a slug change.
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, front-loaded with the operation, followed by the highest-risk side effect and the permission requirement. 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 so return values need no explanation, and the description covers scope, permission, and the main side effect for a mutation tool. Gaps are minor: link-breakage behavior on slug change and whether the change is reversible/audited.
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 fields are already documented; the description still adds value by flagging the URL consequence of slug edits, which the schema pattern constraint does not convey. It does not clarify that omitting a field leaves it unchanged, but that is covered in the schema defaults.
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 (change) and resource (space) plus the exact fields affected (name, slug, description), which cleanly separates it from create_space or page-level update tools. It stops short of explicitly naming the sibling that handles membership or page edits, but the operation itself 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 requirement of admin rights in the space is a useful precondition, but there is no statement of when to choose this over alternatives (e.g. create_space for new spaces, move_page_to_space for relocating content) or when not to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_attachmentUpload AttachmentA
Upload a file to a page, given as base64, up to 10 MB. Base64 costs about a million tokens per megabyte, so prefer create_upload_link: tell the person that a link is much cheaper, and use this only for small files or when they choose it. By default the file is also added to the page, at the end or where after_heading or after_text say: images are shown, other files appear as a download block. Adding it saves a snapshot of the body first.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id, slug id or Docmost page URL. | |
| file_name | Yes | File name with extension. | |
| mime_type | No | Type of the file; only used when the file name has no known extension. Pages and scripts (HTML, JavaScript, XML) are stored as downloads. | |
| after_text | No | Put the files right after the paragraph or block containing this text. | |
| add_to_page | No | Also show the file in the page body; false only attaches it. | |
| after_heading | No | Put the files at the end of the section under this heading (its text). | |
| content_base64 | Yes | The file, base64. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare this is a non-destructive write with no open-world access, but the description adds context annotations cannot: adding to the page 'saves a snapshot of the body first,' the default is add_to_page=true, and images render inline while other files become download blocks. The token-cost warning (~a million tokens per MB) is a real operational constraint. It does not cover auth requirements or error behavior, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb, format and limit, then the cost/routing warning, then default behavior. Every clause carries routing or behavioral information; nothing is padding.
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 7-parameter mutation tool with an output schema already covering returns, the description supplies the size ceiling, the cost tradeoff, the default placement behavior, and the snapshot side effect. An agent has everything needed to decide whether to call it and how.
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 the interaction the schema cannot express: the default add-to-page behavior and how placement falls back 'at the end or where after_heading or after_text say,' plus that mime_type only matters when the extension is unknown is echoed at the behavioral level.
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 file to a page') plus the transport format and hard limit ('given as base64, up to 10 MB'). It also names the sibling it is not (create_upload_link), so an agent can separate the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit routing rule: prefer create_upload_link, tell the person a link is much cheaper, and use this tool 'only for small files or when they choose it.' Both the preferred alternative and the exception condition are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiWhoamiARead-only
Show which Docmost account this connection acts as, the scopes the member granted to this client, the Docmost version, and the account page where the member sees and revokes connected apps and tokens. Use it when unsure whose rights you act with or why a tool is missing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds useful behavioral context by explaining that it reveals the current account identity, granted scopes, Docmost version, and where the member can review or revoke connected apps and tokens.
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 compact and front-loaded: it first states exactly what is shown, then gives the diagnostic use case. Every clause contributes either return-content information or invocation guidance.
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 no parameters, an output schema present, and annotations declaring a safe read-only diagnostic, the description supplies enough context for correct invocation. It explains the purpose, what the agent will learn, and when to reach for 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?
The tool has zero parameters, so the baseline is 4. The description correctly implies that no input is needed to perform the identity check, and there are no parameter semantics to clarify.
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, "Show," and clearly enumerates the concrete resources returned: acting account, granted scopes, Docmost version, and account connection page. An agent can immediately tell this is an identity/diagnostic tool, distinct from all sibling document and workspace-management 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?
It gives an explicit usage context: "Use it when unsure whose rights you act with or why a tool is missing." That is strong guidance for when to call it, though it does not name exclusions or direct alternatives, which is less necessary here because no sibling serves the same diagnostic role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
upload_attachment1 field changed- changed
Input schema / properties / mime_type / descriptionPrevious value: -"Guessed from the file name when left out."New value: +"Type of the file; only used when the file name has no known extension. Pages and scripts (HTML, JavaScript, XML) are stored as downloads."
62 tool updates
v1.2.0- First observed
activate_member - First observed
add_comment - First observed
add_group_members - First observed
add_labels - First observed
add_space_members - First observed
change_space_member_role - First observed
change_workspace_role - First observed
check_space_health - First observed
create_group - First observed
create_page - First observed
create_space - First observed
create_upload_link - First observed
deactivate_member - First observed
diff_page - First observed
duplicate_page - First observed
export_page - First observed
export_space - First observed
find_pages_by_label - First observed
get_attachment - First observed
get_page - First observed
get_page_outline - First observed
get_page_tree - First observed
get_page_version - First observed
get_section - First observed
get_space - First observed
get_upload_status - First observed
invite_people - First observed
list_attachments - First observed
list_backlinks - First observed
list_comments - First observed
list_group_members - First observed
list_groups - First observed
list_invitations - First observed
list_labels - First observed
list_page_history - First observed
list_pages - First observed
list_snapshots - First observed
list_space_members - First observed
list_spaces - First observed
list_trash - First observed
list_workspace_members - First observed
move_page - First observed
move_page_to_space - First observed
recent_pages - First observed
remove_label - First observed
rename_page - First observed
replace_page_json - First observed
replace_section - First observed
resend_invitation - First observed
restore_page - First observed
restore_page_version - First observed
restore_snapshot - First observed
revoke_invitation - First observed
search - First observed
suggest - First observed
trash_page - First observed
update_comment - First observed
update_group - First observed
update_page - First observed
update_space - First observed
upload_attachment - First observed
whoami
TDQS
Scored across 62 tools
Most tools target clearly distinct Docmost resources and actions: pages vs sections vs spaces vs groups vs invitations vs attachments. There is some overlap among page-editing tools (update_page, replace_page_json, replace_section) and restore/history tools (restore_page, restore_page_version, restore_snapshot), but the descriptions make the boundaries mostly clear.
The set overwhelmingly uses snake_case names, usually in verb_noun form such as create_page, list_comments, and restore_snapshot. A few names break the pattern (search, suggest, whoami, recent_pages), but the convention remains readable and mostly predictable.
At 62 tools, this is far beyond a well-scoped MCP tool surface and creates a heavy selection burden for an agent. Although the server covers a broad Docmost workspace, the count is excessive enough to be an extreme mismatch for practical tool use.
The surface covers core page lifecycle, spaces, comments, labels, membership, groups, invitations, history, snapshots, and attachments in depth. Some secondary operations are missing, such as deleting comments or attachments, removing space/group members, and deleting groups/spaces, but these are mostly workaroundable or intentionally omitted.
Maintenance
Related MCP Connectors
- hiveWikiOAuthai.hivewiki
Shared project wiki for AI agents: read and write pages, next actions, and activity logs over MCP.
Hosted markdown project wikis your team's AI assistants read, search, and update over MCP.
OAuth 2.1 short-link tools for AI agents with scoped tokens, approvals, audit logs, and revocation.
Governed memory and workspace for any AI: tasks, calendar, mail and pages, with per-action consent.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to turn conversations into a searchable personal wiki, read and organize pages, and propose edits such as merges, translations, and fact-checks as reviewable changesets.2MIT
- AlicenseNot gradedqualityAmaintenanceEnables LLM clients to read, search, create, edit, move, and delete pages and files across any MediaWiki wiki, including extension data from Wikibase, Semantic MediaWiki, Cargo, Bucket, and NeoWiki. Supports multiple wikis with per-wiki resources and OAuth-backed permissions.8 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables LLM clients to read, search, create, edit, manage, and upload content across any MediaWiki wiki, including extension-backed querying and OAuth-authenticated writes.8 npmMIT
- FlicenseNot gradedqualityAmaintenanceEnables AI assistants to search, read, create, edit, and archive documents, manage collections, add and view threaded comments, find backlinks, and access content through direct resource URIs with automatic rate limiting.-