Revise
REMOTE · MCP.REVISE.IO · SCANNED OCT 3
Collaborative word processor you can use with your agent.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security94
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- The endpoint enforces authorisation, advertised via RFC 9728 protected-resource metadata. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability0
- Transport blocked by authentication: the endpoint requires auth we don't have to verify streamable-http. See how to fix → View diagnostics → Unverified
Schema Quality & AI Usability0
- Schema blocked by authentication: the endpoint requires auth we don't have to read it. See how to fix → Unverified
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage0
- Tool coverage blocked by authentication: the endpoint requires auth we don't have to read its tools.Unverified
Tool Safety0
- Tool safety blocked by authentication: the endpoint requires auth we don't have to read its tools.Unverified
Capabilities0
- Capabilities blocked by authentication: the endpoint requires auth we don't have to read them. See how to fix → Unverified
Unverified: 6 categories
Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm. Claim this server and supply a read-only token to verify it and lift the score.
How do I install the Revise MCP server?
Revise is a hosted endpoint at https://mcp.revise.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · mcp.revise.io
claude mcp add --transport http io-revise-mcp-server 'https://mcp.revise.io/mcp'
{
"mcpServers": {
"io-revise-mcp-server": {
"url": "https://mcp.revise.io/mcp"
}
}
} {
"servers": {
"io-revise-mcp-server": {
"type": "http",
"url": "https://mcp.revise.io/mcp"
}
}
} [mcp_servers.io-revise-mcp-server] url = "https://mcp.revise.io/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"io-revise-mcp-server": {
"type": "remote",
"url": "https://mcp.revise.io/mcp",
"enabled": true
}
}
} openclaw mcp add io-revise-mcp-server --url 'https://mcp.revise.io/mcp' --transport streamable-http
mcp_servers:
io-revise-mcp-server:
url: "https://mcp.revise.io/mcp" {
"McpServers": {
"io-revise-mcp-server": {
"Transport": "http",
"Url": "https://mcp.revise.io/mcp"
}
}
} assistant mcp add io-revise-mcp-server -t streamable-http -u 'https://mcp.revise.io/mcp'
{
"mcpServers": {
"io-revise-mcp-server": {
"type": "http",
"url": "https://mcp.revise.io/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 28 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 5 Sept 26 −1
No change was recorded against any check on this day. Endpoint Security went from 97 to 94.
- 2 Sept 26 0
- Authorization: unverified → pass ▲ security
- HSTS header: fail → pass ▲ security
- 1 Sept 26 0
- Authorization: pass → unverified ▼ security
- HSTS header: pass → fail ▼ security
- HTTPS: unverified → pass ▲ security
- 29 Aug 26 0
- Endpoint reachability: unreachable → behind authorisation ▼ security
- Transport: fail → unverified ▼ security
- Authorization: unverified → pass ▲ security
- HSTS header: fail → pass ▲ security
- Tool safety: Tool safety blocked by authentication: the endpoint requires auth we don't have to read its tools. security
- Tool coverage: Tool coverage blocked by authentication: the endpoint requires auth we don't have to read its tools. functional
- Schema quality: Schema blocked by authentication: the endpoint requires auth we don't have to read it. functional
- Capabilities: Capabilities blocked by authentication: the endpoint requires auth we don't have to read them. functional
- 28 Aug 26 0
- Endpoint reachability: behind authorisation → unreachable ▼ security
- Transport: unverified → fail ▼ security
- Authorization: pass → unverified ▼ security
- HSTS header: pass → fail ▼ security
- Tool safety: Tool safety not yet verified: we couldn't read the endpoint's tools, or could read only part of the list. security
- Tool coverage: Tool coverage not yet verified: we couldn't read the endpoint's tools, or could read only part of the list. functional
- Capabilities: Capabilities not yet verified: we couldn't read the endpoint's capabilities. functional
- Schema quality: Schema not yet verified: we couldn't read the endpoint's schema, or could read only part of its tool list. functional
- 26 Aug 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Oct 2026 · Probed https://mcp.revise.io/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=mcp.revise.io | CN=Amazon RSA 2048 M04,O=Amazon,C=US | 13 Jun 2026 | 27 Dec 2026 | RSA 2048 | SHA256-RSA | 557176ae939d31fe26e80ce97fb1ef6 |
| SANs: mcp.revise.io | ||||||
| CN=Amazon RSA 2048 M04,O=Amazon,C=US (CA) | CN=Amazon Root CA 1,O=Amazon,C=US | 23 Aug 2022 | 23 Aug 2030 | RSA 2048 | SHA256-RSA | 773124f2a952e3ed18a58bdb85d1bc0ce5f27 |
| CN=Amazon Root CA 1,O=Amazon,C=US (CA) | CN=Starfield Services Root Certificate Authority - G2,O=Starfield Technologies\, Inc.,L=Scottsdale,ST=Arizona,C=US | 25 May 2015 | 31 Dec 2037 | RSA 2048 | SHA256-RSA | 67f944a2a27cdf3fac2ae2b01f908eeb9c4c6 |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of mcp.revise.io. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| io. | present | 57355 | 8 | Verified |
| revise.io. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On connection |
| HTTP status | 401 |
WWW-Authenticate challenge Bearer error="invalid_token", resource_metadata="https://mcp.revise.io/.well-known/oauth-protected-resource", scope="docs:read docs:write docs:share"
Bearer error="invalid_token", resource_metadata="https://mcp.revise.io/.well-known/oauth-protected-resource", scope="docs:read docs:write docs:share" | Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains |
| content-security-policy | default-src 'none'; frame-ancestors 'none'; base-uri 'none'; form-action 'none' |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| referrer-policy | no-referrer |
| www-authenticate | Bearer error="invalid_token", resource_metadata="https://mcp.revise.io/.well-known/oauth-protected-resource", scope="docs:read docs:write docs:share" |
Protected resource metadata
| Document | https://mcp.revise.io/.well-known/oauth-protected-resource |
|---|---|
| Retrieved | Yes |
| Resource | https://mcp.revise.io/mcp |
| Authorisation server | https://api.revise.io |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.revise.io/mcp | Auth required | 401 | |
| http (plaintext) | http://mcp.revise.io/mcp | HTTPS enforced | 301 | https://mcp.revise.io:443/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
clean_document Clean document metadata ~243
Scrub a document before it is shared externally ("clean this document before I send it"): remove comments, resolve ALL pending tracked-change suggestions (accept or reject — everyone's, not just yours), remove hidden text (Word w:vanish), anonymize revision/comment author names to "Author", and clear document properties (title/author/company metadata from the original file). Destructive and not undoable — confirm with the user before running it. Options all default to off; enable only what the user asked to strip. Returns a summary of what was removed.
| Name | Type | Req | Description |
|---|---|---|---|
| anonymize_authors | boolean | – | Replace suggestion and comment author identities with "Author" |
| clear_core_properties | boolean | – | Wipe document properties (author, title, company, created/modified dates) |
| id | string | yes | Document ID |
| remove_comments | boolean | – | Remove all comment threads and their anchors |
| remove_hidden_text | boolean | – | Remove hidden (invisible-in-Word) text spans; footnote/endnote numerals are kept |
| resolve_suggestions | string | – | Resolve ALL pending suggestions: accept applies them, reject reverts them; omit to leave them pending |
| Name | Type | Req | Description |
|---|---|---|---|
| authorsAnonymized | integer | yes | Distinct author identities replaced with "Author" |
| commentsRemoved | integer | yes | Distinct comment threads removed |
| corePropsCleared | boolean | yes | Whether document properties (docProps/core.xml) were wiped |
| hiddenRemoved | integer | yes | Hidden text spans removed (note-reference numerals are kept) |
| status | string | yes | Scrub outcome |
| suggestionsResolved | integer | yes | Distinct pending suggestions resolved |
No examples provided.
create_document Create document (no account) ~145
Create a Revise document without a Revise account, seeded with markdown. Returns: url (give this to your user — they open it to view the document and create a free account to keep it, in one step) and edit_token (keep it; use it as your Authorization Bearer token in future requests to read and edit this document). The document is private and deleted after 7 days if unclaimed.
| Name | Type | Req | Description |
|---|---|---|---|
| content_markdown | string | – | Initial content as markdown |
| created_by | string | – | Your name (e.g. "Codex", "Claude") so the user sees who made the document. Recommended. |
| title | string | yes | Document title |
| Name | Type | Req | Description |
|---|---|---|---|
| edit_token | string | yes | Bearer token scoped to this document for future read/edit calls |
| id | string | yes | Document ID |
| notes | string | yes | Human-facing claim and retention notes |
| title | string | yes | Document title |
| unlock_more | string | yes | Agent-facing guidance for authenticating to unlock more tools |
| url | string | yes | Editor URL |
No examples provided.
edit_document Edit document ~222
Apply targeted edits to a document using Markdown or HTML content. Edits land as pending tracked changes ("suggest" mode) that the owner reviews and accepts or rejects in the editor — this is the default and the right choice unless your user explicitly asks for direct edits. Pass mode "apply" only on explicit instruction (e.g. "apply it directly", "don't leave suggestions"); it writes immediately with no review step, recorded in the revision history. One exception needs no instruction: on a short/new document (under 20 words) the default is already "apply", since there is nothing meaningful to review. Get block ids from read_document with with_block_ids: true.
| Name | Type | Req | Description |
|---|---|---|---|
| edits | array | yes | Edits to perform, in order |
| id | string | yes | Document ID |
| mode | string | – | Omit for the default: suggest (tracked changes) on documents with 20+ words, apply on shorter ones. Choose "apply" on a substantial document only when your user explicitly asked for direct edits with… |
| Name | Type | Req | Description |
|---|---|---|---|
| acceptedChangeRegions | integer | – | Change regions accepted immediately |
| editsRequested | integer | – | Requested edit count |
| note | string | – | Review guidance |
| pendingSuggestionIds | array | – | Tracked-change suggestion IDs |
| status | string | yes | Whether edits were suggested or directly applied |
No examples provided.
export_document Export document ~83
Export a document by id to markdown, txt, html, docx, pdf. Markdown is returned inline. Every other format (txt, html, docx, pdf) is hosted at a temporary download URL (expires in ~24h) returned in the response, not streamed back inline.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | yes | – |
| id | string | yes | Document ID |
| Name | Type | Req | Description |
|---|---|---|---|
| bytes | integer | – | Hosted file byte length |
| content | string | – | Inline exported text content |
| download_url | string | – | Temporary download URL |
| format | string | yes | Export format |
| id | string | yes | Document ID |
| notes | string | – | Download expiry notes |
| status | string | yes | Export status |
No examples provided.
get_document_info Get document info ~37
Get a document's metadata: title, sharing state, URLs, timestamps, and word count.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Document ID |
| Name | Type | Req | Description |
|---|---|---|---|
| blocks | integer | yes | Top-level block count |
| createdAt | – | – | Creation timestamp from the Revise API |
| id | string | yes | Document ID |
| isOwner | boolean | yes | Whether the current user owns the document |
| isPublic | boolean | yes | Whether the document is publicly shared |
| pages | – | yes | Rendered page count, or null in pageless mode |
| publicUrl | – | yes | Public URL, when enabled |
| readOnly | boolean | yes | Whether the current user has read-only access |
| title | string | yes | Document title |
| updatedAt | – | – | Last update timestamp from the Revise API |
| url | string | yes | Editor URL |
| words | integer | yes | Word count |
No examples provided.
get_document_outline Get document outline ~46
Get a document's heading outline with block ids and per-section word counts. Cheap way to orient in a long document before reading specific sections.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Document ID |
| Name | Type | Req | Description |
|---|---|---|---|
| blocks | integer | yes | Top-level block count |
| sections | array | yes | – |
| title | – | yes | Document title |
| totalWords | integer | yes | Total word count |
No examples provided.
get_recent_changes Get recent changes ~103
See what changed in a document since YOU last looked at it — e.g. edits the human (or another collaborator) made in between. Returns added, removed, and changed blocks (with block ids), all in the accepted/projected state. Great for catching up before continuing work ("how does it look now?"). The first call on a document just establishes a baseline. Each call advances your baseline to the current state.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Document ID |
| Name | Type | Req | Description |
|---|---|---|---|
| added | array | – | Added blocks |
| baselineEstablished | boolean | – | True when this first call only established a baseline |
| changed | array | – | Changed blocks |
| note | string | – | Result note or truncation guidance |
| removed | array | – | Removed blocks |
| since | – | – | ISO timestamp for the previous baseline |
| summary | object | – | Exact changed-block counts |
No examples provided.
import_document Import document (no account) ~230
Create a Revise document from a file at a public http(s) URL (.md, .markdown, .txt, .html, .htm, .docx, .rtf, .odt; PDFs/images not yet supported). The server fetches the URL — file bytes are never passed inline. For a LOCAL file, use upload_document instead (it streams the file to the server). Returns the new document id and URL. Returns url (give it to your user — they view the document and create a free account to keep it, in one step) and edit_token (your Bearer token for future edits). The document is private and deleted after 7 days if unclaimed.
| Name | Type | Req | Description |
|---|---|---|---|
| created_by | string | – | Your name (e.g. "Codex", "Claude") so the user sees who made the document. Recommended. |
| filename | string | – | Filename override — its extension selects the converter (otherwise taken from the URL) |
| title | string | – | Document title |
| url | string | yes | Public http(s) URL of the file for the server to fetch |
| Name | Type | Req | Description |
|---|---|---|---|
| edit_token | string | yes | Bearer token scoped to this document for future read/edit calls |
| id | string | yes | Document ID |
| notes | string | yes | Human-facing claim and retention notes |
| title | string | yes | Document title |
| unlock_more | string | yes | Agent-facing guidance for authenticating to unlock more tools |
| url | string | yes | Editor URL |
No examples provided.
insert_footnote Insert footnote ~289
Insert a footnote: a numbered superscript reference placed immediately after the anchor text inside a paragraph, plus the footnote body (shown at the bottom of the page, or as an endnote in pageless documents). On substantial documents this lands as a pending tracked change by default, like edit_document. Footnote bodies appear in read_document as [^n]: definitions with their own block ids — edit or remove them with the normal editing tools (removing a footnote body also removes its reference, and vice versa).
| Name | Type | Req | Description |
|---|---|---|---|
| block_id | string | yes | Paragraph block that gets the reference (from read_document with_block_ids) |
| find | string | yes | Anchor text inside the block; the reference is inserted right after it. Pass an empty string to append at the end of the block. |
| id | string | yes | Document ID |
| kind | string | – | Note stream: footnote (per-page bottom area, numbered 1,2,3 — default) or endnote (grouped on its own page at the document end, numbered i,ii,iii) |
| mode | string | – | Omit for the default: suggest (pending tracked change) on documents with 20+ words, apply on shorter ones. Choose "apply" on a substantial document only when your user explicitly asked for direct edi… |
| text | string | yes | Footnote body text |
| Name | Type | Req | Description |
|---|---|---|---|
| footnote_block_id | string | – | Block id of the footnote body (editable with block tools) |
| footnote_label | string | – | Display label as it appears in the text: arabic for footnotes, lowercase roman for endnotes |
| footnote_number | integer | – | Per-stream index of the new note |
| status | string | yes | inserted directly, or left as a pending tracked change |
| suggestion_id | string | – | Pending suggestion id when status is suggested |
No examples provided.
leave_comment Leave a comment ~493
Leave a review comment in a document WITHOUT changing its text — either a new thread anchored to one block, or a reply to an existing thread. Comments appear in the editor's margin attributed to you, where the owner can reply or resolve. Prefer this for passage-specific critique or questions; to propose an actual text change, use edit_document in "suggest" mode instead. To START a thread: target one block (from read_document with_block_ids: true) and exactly one anchor form — anchor_text (short text occurring exactly once in the block), anchor_start_text + anchor_end_text (boundaries of a longer range, without reproducing it), or whole_block: true (structural or empty blocks). To REPLY: pass reply_to_comment_id (a comment id from a <comment-thread> element in read_document format "html", or from an earlier leave_comment result) and no block/anchor fields. Text that already carries an unresolved <comment-thread> is already under discussion: reply to that thread rather than starting a second one over the same words, which is rejected unless you pass acknowledge_existing_thread_ids.
| Name | Type | Req | Description |
|---|---|---|---|
| acknowledge_existing_thread_ids | array | – | Only for a NEW thread that deliberately overlaps existing unresolved threads: list their ids to confirm you read them and are raising a genuinely different point. Without this, a new thread over text… |
| anchor_end_text | string | – | Exact text at the end of that range (pair with anchor_start_text) |
| anchor_start_text | string | – | Exact text at the start of a longer range (pair with anchor_end_text) |
| anchor_text | string | – | Short exact text that occurs exactly once in the block; the comment anchors to it |
| block_id | string | – | Target block for a NEW thread (from read_document with_block_ids: true). Required unless replying. |
| comment | string | yes | Comment body (Markdown) |
| id | string | yes | Document ID |
| reply_to_comment_id | string | – | Reply to an existing thread instead of starting a new one: any comment id in the thread (the reply attaches to the thread root). Omit block_id and anchors when replying. |
| whole_block | boolean | – | Anchor to the entire block instead of a text range (structural or empty blocks) |
| Name | Type | Req | Description |
|---|---|---|---|
| anchored_text_range | object | – | Anchored character range within the block (text anchors only) |
| block_id | string | – | Block the comment is anchored to (new threads only) |
| comment_id | string | yes | ID of the new comment or reply |
| note | string | – | Review guidance |
| status | string | yes | commented: new thread started; replied: reply added to an existing thread |
| thread_id | string | – | Root comment id of the thread a reply was added to |
No examples provided.
read_document Read document ~355
Read a Revise document's content. Format "markdown" (default) is the simple dialect — best for plain prose; set with_block_ids to true to interleave <!-- block:xxxxxx --> anchors usable with edit_document. Format "html" is the full-fidelity dialect: compact HTML-like markup with a block id on every element plus everything markdown cannot express — rich marks, <latex> math, code block languages, merged table cells, page layout, and each comment thread inline as a <comment-thread transcript="..."> wrapper around its anchored text. Prefer html when a document uses rich features or has comments; edit_document accepts the same dialect in replacements. "text" is plain text. (For a styled, self-contained HTML file, use export_document instead.) view controls how pending tracked-change suggestions read: "final" (default, as if accepted) or "original" (as if rejected). Long documents are paginated: when a read exceeds the character budget it is cut at a block boundary and the response carries truncated: true, next_start_block, and a ready-to-run example call — repeat with start_block to continue. For a targeted read of a large document, prefer get_document_outline + search_within_document over paging through everything.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | – | – |
| id | string | yes | Document ID |
| start_block | integer | – | 0-based top-level block index to start reading from (default 0). Use the previous response's next_start_block to continue a paginated read. |
| view | string | – | Projection of pending suggestions: final = accepted (default), original = rejected |
| with_block_ids | boolean | – | Interleave block id anchors (markdown format only) |
| Name | Type | Req | Description |
|---|---|---|---|
| blocks_included | integer | – | Top-level blocks included in this page |
| content | string | yes | Document content in the requested format |
| format | string | yes | Returned format |
| id | string | yes | Document ID |
| next_start_block | integer | – | Pass as start_block to read the next page |
| note | string | – | Pagination guidance |
| start_block | integer | – | First top-level block index included in this page |
| total_blocks | integer | – | Total top-level blocks in the document |
| truncated | boolean | – | True when the read was cut at a block boundary |
| with_block_ids | boolean | – | Whether markdown block anchors were included |
No examples provided.
rename_document Rename document ~33
Change a document's title.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Document ID |
| title | string | yes | New document title |
| Name | Type | Req | Description |
|---|---|---|---|
| status | string | yes | Rename status |
| title | string | yes | New title |
No examples provided.
replace_document_content Replace document content ~69
Replace the ENTIRE content of a document with new markdown. Destructive: existing content is removed (it remains recoverable via the document's revision history). Prefer edit_document for targeted changes.
| Name | Type | Req | Description |
|---|---|---|---|
| content_markdown | string | yes | New full document content |
| id | string | yes | Document ID |
| Name | Type | Req | Description |
|---|---|---|---|
| blocks | integer | yes | Number of blocks in the new content |
| status | string | yes | Replacement status |
No examples provided.
resolve_suggestions Accept or reject your suggestions ~218
Accept or reject the tracked-change suggestions YOU made on a document — only your own, never the user's edits or another agent's suggestions. Use this when the user approves your suggested changes (e.g. they say "lgtm" / "looks good") to apply them on their behalf, or asks you to withdraw them. Covers the whole document by default; pass block_ids to limit to specific blocks. (Edits made with edit_document in "apply" mode are already applied — this is for edits left as suggestions in "suggest" mode.)
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | accept: apply your suggested changes; reject: withdraw them |
| block_ids | array | – | Limit to suggestions in these blocks (from read_document with_block_ids); omit to review the whole document |
| id | string | yes | Document ID |
| kind | string | – | Limit to one kind of change (Word-style review filter): insert = added text/blocks, delete = removed text/blocks, format = formatting-only changes; omit for all kinds |
| Name | Type | Req | Description |
|---|---|---|---|
| note | string | – | Why no suggestions were resolved |
| resolvedChangeRegions | integer | – | Resolved change-region count |
| status | string | yes | Suggestion resolution outcome |
No examples provided.
search_within_document Search within document ~95
Find where a query matches inside one document. Returns the matching blocks as markdown with <!-- block:xxxxxx --> anchors (usable with edit_document), each with a few neighboring blocks for context. Case-insensitive.
| Name | Type | Req | Description |
|---|---|---|---|
| context_blocks | integer | – | Neighboring blocks to include on each side (default 2) |
| id | string | yes | Document ID |
| query | string | yes | Text to find (case-insensitive) |
| Name | Type | Req | Description |
|---|---|---|---|
| groups | array | – | Context groups containing matches |
| note | string | – | Result note or truncation guidance |
| query | string | yes | Search query |
| returnedMatchingBlocks | integer | – | Number of matching blocks returned in this response |
| totalMatchingBlocks | integer | yes | Matching block count |
No examples provided.
set_page_layout Set page layout ~406
Set a document's page layout: page size, orientation, margins, page numbers, line/paragraph spacing, pageless mode, or the APA-7 preset. Length values are strings with explicit units (e.g. "1in", "2.54cm", "72px").
| Name | Type | Req | Description |
|---|---|---|---|
| block_spacing | string | – | Vertical spacing between blocks, e.g. "0.125in" |
| id | string | yes | Document ID |
| line_numbering | – | – | Word-style line numbering in the left margin (pleading paper). Pass an object (possibly empty) to enable, null to disable |
| margin | string | – | Uniform margin for all sides, e.g. "1in" |
| margin_bottom | string | – | – |
| margin_left | string | – | – |
| margin_right | string | – | – |
| margin_top | string | – | – |
| note_mode | string | – | Bulk-convert every note in the document to this stream: footnotes (per-page bottom areas, numbered 1,2,3) or endnotes (grouped on their own page at the end, numbered i,ii,iii). Individual notes choos… |
| orientation | string | – | – |
| page_number_position | string | – | – |
| page_number_start | integer | – | – |
| page_size | string | – | Named page size |
| pageless | boolean | – | Enable pageless (continuous) mode |
| preset | string | – | Layout preset applied before other overrides |
| show_page_numbers | boolean | – | Show/hide page numbers (managed as an automatic header/footer page-number field slot; hand-authored header/footer content is never overwritten) |
| watermark | – | – | Diagonal page watermark text painted on every page, e.g. "DRAFT" or "CONFIDENTIAL". Also accepts a JSON settings string {text, color?, opacity?, diagonal?, fontSizePx?}. Pass "" or null to remove the… |
| Name | Type | Req | Description |
|---|---|---|---|
| applied | object | yes | Applied layout settings |
| status | string | yes | Layout update status |
No examples provided.
style_blocks Style document blocks ~277
Style existing content with forgiving CSS-lite selectors and values. Use this for bulk formatting instead of rewriting text. Block selectors include *, #blockId, p, h1-h6, li, lists, tables, and descendants. Inline selectors such as b/strong, i/em, u, s/strike/del, code, sup, sub, mark, and a target only matching formatted text ranges. Examples: set the entire document to Georgia with selectors="*" and attrs=[{"name":"fontFamily","value":"Georgia"}]; bold headings with selectors=["h1","h2","h3"] and attrs=[{"name":"fontWeight","value":"bold"}]. Formatting lands as pending tracked changes by default on substantial documents.
| Name | Type | Req | Description |
|---|---|---|---|
| attrs | array | yes | Style attributes to set |
| id | string | yes | Document ID |
| mode | string | – | Omit for the default: suggest (tracked formatting changes) on documents with 20+ words, apply on shorter ones. Choose "apply" on a substantial document only when the user explicitly asks for direct f… |
| selectors | – | yes | CSS-lite selectors: *, #blockId, p, h1-h6, li, ul, ol, pre, latex, img, table, tr, td/th, div, inline formatting tags, descendants, and :nth-child(n) |
| Name | Type | Req | Description |
|---|---|---|---|
| acceptedChangeRegions | integer | – | Formatting change regions accepted immediately |
| attributesRequested | integer | yes | Number of style attributes in the request |
| note | string | – | Review guidance |
| pendingSuggestionIds | array | – | Tracked formatting suggestion IDs |
| selectorsRequested | integer | yes | Number of selectors in the request |
| status | string | yes | Whether formatting was suggested or directly applied |
No examples provided.
upload_document Upload a document file (no account) ~190
Create a Revise document from a LOCAL file (docx, md, txt, html; PDFs/images not yet supported) without a Revise account and without putting its bytes in your context. Returns a one-time upload_url and a ready-to-run curl command — run the curl to stream the file. The curl response contains url (give it to your user — they view the document and create a free account to keep it, in one step) and edit_token (your Bearer token for future edits). For a public http(s) URL or a tiny inline file, use import_document instead. The document is private and deleted after 7 days if unclaimed.
| Name | Type | Req | Description |
|---|---|---|---|
| created_by | string | – | Your name (e.g. "Codex", "Claude") so the user sees who made the document. Recommended. |
| filename | string | yes | The file's name (its extension selects the converter) |
| Name | Type | Req | Description |
|---|---|---|---|
| curl | string | yes | Ready-to-run curl command for the upload |
| expires_in | integer | yes | Seconds until the upload URL expires |
| next | string | yes | What to do after reserving the upload |
| upload_url | string | yes | One-time upload endpoint |
No examples provided.
What is the Revise MCP server?
Revise is an MCP server listed in the public MCP registry as io.revise/mcp-server. Collaborative word processor you can use with your agent. This page covers its hosted endpoint (https://mcp.revise.io/mcp).
Is the Revise MCP server safe to use?
Revise scores 38 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Revise MCP server expose?
Revise exposes 18 tools: create_document, import_document, upload_document, read_document, search_within_document, and 13 more. Their descriptions and schemas cost roughly 3,534 tokens of context every time the server is loaded.
Does the Revise MCP server require authentication?
Yes. Revise asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the Revise MCP server still maintained?
Revise is still listed as active in the MCP registry. We last reached this channel on 3 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.