Rapier - Markdown Editor & Art
Markdown editor for writing, notes, editable diagrams, drawing and painting with your AI assistant.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"rapier": {
"url": "https://mcp.rapier.website/mcp"
}
}
}Remote endpoints
https://mcp.rapier.website/mcpstreamable-httphttps://mcp.rapier.website/door/mcpstreamable-httpWhat it can do
Tool inventory
Tools (6)
π‘open(document, url, text, filename, note, ...)
Create Markdown with text and filename, resume with document, open a Note (title only with note:"new"), or import an authorized host file. Returns revision and whole text when it fits a page; otherwise a document map. A browser code from the person goes to show {target:"pair", code}. Share editor_url when available; keep document private. Workspaces expire after 30 idle days.
Input Schema
{
"type": "object",
"properties": {
"document": {
"type": "string",
"maxLength": 256
},
"url": {
"type": "string",
"maxLength": 2048
},
"text": {
"type": "string",
"maxLength": 67108864
},
"filename": {
"type": "string",
"maxLength": 256
},
"note": {
"type": "string",
"maxLength": 160,
"minLength": 1
},
"title": {
"type": "string",
"maxLength": 256
},
"file": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 256
},
"resourceUri": {
"type": "string",
"maxLength": 8192
}
},
"required": [
"name",
"resourceUri"
],
"additionalProperties": false
},
"createToken": {
"type": "string",
"maxLength": 128
},
"agent": {
"type": "string"
},
"operation_id": {
"type": "string",
"maxLength": 128,
"minLength": 1
}
},
"additionalProperties": false
}π’read(document, note, block, heading, lines, ...)
Read exact text or a document map; query returns matching lines. Continue next_cursor with cursor alone. Check human context and omissions before editing. Use image for PNG, state for pending work and the personβs presence, after_revision with wait_ms to wait for their next change, or search for Notes. Use guide for instructions; guide resource URIs are not document IDs.
Input Schema
{
"type": "object",
"properties": {
"document": {
"type": "string",
"maxLength": 256
},
"note": {
"type": "string",
"maxLength": 160,
"minLength": 1
},
"block": {
"type": "string",
"maxLength": 128
},
"heading": {
"oneOf": [
{
"type": "string",
"maxLength": 1024
},
{
"type": "array",
"items": {
"type": "string",
"maxLength": 256
},
"maxItems": 32
}
]
},
"lines": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"minItems": 2,
"maxItems": 2
},
"query": {
"type": "string",
"maxLength": 2048
},
"search": {
"type": "string",
"maxLength": 2048
},
"as": {
"type": "string",
"maxLength": 32,
"enum": [
"text",
"image",
"outline"
]
},
"versions": {
"type": "boolean"
},
"version": {
"type": "integer",
"minimum": 1
},
"cursor": {
"type": "string",
"maxLength": 256
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 32768
},
"state": {
"type": "boolean"
},
"history": {
"type": "boolean"
},
"since": {
"type": "string",
"maxLength": 256
},
"comparison": {
"type": "boolean"
},
"return_id": {
"type": "string",
"maxLength": 128
},
"after_revision": {
"type": "integer",
"minimum": 0,
"description": "With wait_ms: return when the revision passes this."
},
"wait_ms": {
"type": "integer",
"minimum": 0,
"maximum": 20000,
"description": "Bounded wait (ms) for the next human revision."
},
"guide": {
"type": "string",
"maxLength": 32,
"description": "Instructions only; use no other read selectors. MCP still requires the current document from open.",
"enum": [
"overview",
"draw",
"water",
"blocks"
]
},
"agent": {
"type": "string"
},
"operation_id": {
"type": "string",
"maxLength": 128,
"minLength": 1
}
},
"required": [
"document"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"required": [
"guide"
]
},
"then": {
"not": {
"anyOf": [
{
"required": [
"note"
]
},
{
"required": [
"block"
]
},
{
"required": [
"heading"
]
},
{
"required": [
"lines"
]
},
{
"required": [
"query"
]
},
{
"required": [
"search"
]
},
{
"required": [
"as"
]
},
{
"required": [
"versions"
]
},
{
"required": [
"version"
]
},
{
"required": [
"cursor"
]
},
{
"required": [
"limit"
]
},
{
"required": [
"state"
]
},
{
"required": [
"history"
]
},
{
"required": [
"since"
]
},
{
"required": [
"comparison"
]
},
{
"required": [
"return_id"
]
},
{
"required": [
"after_revision"
]
},
{
"required": [
"wait_ms"
]
}
]
}
}
}
]
}π΄edit(document, revision, changes, note, turn_id, ...)
Apply unique exact-text changes atomically as one undoable act; act is its id string. At a moved numeric revision, edits can apply if literals remain untouched and history reaches that revision. Whole-document replacement needs the current revision. Conflicts return current revision and exact context or candidate lines; decide afresh. Drawings, painting, Water, comments and HTML objects use fenced text. Painting needs an open editor; check pending work with read.
Input Schema
{
"type": "object",
"properties": {
"document": {
"type": "string",
"maxLength": 256
},
"revision": {
"type": [
"integer",
"string"
]
},
"changes": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"old": {
"type": "string",
"maxLength": 67108864
},
"new": {
"type": "string",
"maxLength": 67108864
},
"block": {
"type": "string",
"maxLength": 128
},
"heading": {
"oneOf": [
{
"type": "string",
"maxLength": 1024
},
{
"type": "array",
"items": {
"type": "string",
"maxLength": 256
},
"maxItems": 32
}
]
}
},
"required": [
"old",
"new"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"after": {
"type": "string",
"maxLength": 67108864
},
"insert": {
"type": "string",
"maxLength": 67108864
},
"block": {
"type": "string",
"maxLength": 128
},
"heading": {
"oneOf": [
{
"type": "string",
"maxLength": 1024
},
{
"type": "array",
"items": {
"type": "string",
"maxLength": 256
},
"maxItems": 32
}
]
}
},
"required": [
"after",
"insert"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 67108864
}
},
"required": [
"text"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 32
},
"note": {
"type": "string",
"maxLength": 160,
"minLength": 1
},
"turn_id": {
"type": "string",
"maxLength": 160
},
"label": {
"type": "string"
},
"fields": {
"type": "object",
"description": "Note controls: tags, pinned, archived, trashed, colour, reminder. See rapier://guide.",
"additionalProperties": true
},
"filename": {
"type": "string",
"maxLength": 256
},
"agent": {
"type": "string"
},
"operation_id": {
"type": "string",
"maxLength": 128,
"minLength": 1
}
},
"required": [
"document",
"revision"
],
"additionalProperties": false
}π΄undo(document, act, turn_id, agent, operation_id)
Undo one act id string or turn_id (act or turn_id, not both), preserving later work. Inspect conflicts before retrying.
Input Schema
{
"type": "object",
"properties": {
"document": {
"type": "string",
"maxLength": 256
},
"act": {
"type": "string",
"maxLength": 256
},
"turn_id": {
"type": "string",
"maxLength": 160
},
"agent": {
"type": "string"
},
"operation_id": {
"type": "string",
"maxLength": 128,
"minLength": 1
}
},
"required": [
"document"
],
"additionalProperties": false
}π΄show(document, target, text, block, heading, ...)
Present work or ask for a reply, selection or device action. A 4-letter code from the person's browser pairs that editor: show {target:"pair", code}; for a connected workspace its owner first approves at owner_approval_url, then the person chooses ALLOW. Inspect actual presentation; a request is not proof the person saw it. Playback: value false pauses, true plays, here only. A comparison leaves source unchanged. Later human navigation wins.
Input Schema
{
"type": "object",
"properties": {
"document": {
"type": "string",
"maxLength": 256
},
"target": {
"type": "string",
"maxLength": 48,
"enum": [
"passage",
"block",
"pointer",
"read_aloud",
"playback",
"comparison",
"view",
"preferences",
"plugin",
"file",
"return",
"note",
"ask",
"pair"
]
},
"text": {
"type": "string",
"maxLength": 67108864
},
"block": {
"type": "string",
"maxLength": 128
},
"heading": {
"oneOf": [
{
"type": "string",
"maxLength": 1024
},
{
"type": "array",
"items": {
"type": "string",
"maxLength": 256
},
"maxItems": 32
}
]
},
"revision": {
"type": [
"integer",
"string"
]
},
"act": {
"type": "string",
"maxLength": 256
},
"turn_id": {
"type": "string",
"maxLength": 160
},
"name": {
"type": "string",
"maxLength": 256,
"description": "Comparison title or target:plugin name: math|mermaid|pdf|ocr|letters-field|letters-relief|letters-leaf|letters-arabesque."
},
"words": {
"type": "string",
"maxLength": 160
},
"view": {
"type": "string",
"maxLength": 32,
"enum": [
"formatted",
"source",
"notes"
]
},
"question": {
"type": "string",
"maxLength": 4096
},
"wait": {
"type": "string",
"maxLength": 32,
"enum": [
"selection",
"message"
]
},
"timeout_ms": {
"type": "integer",
"minimum": 1000,
"maximum": 120000,
"default": 20000
},
"preference": {
"type": "string",
"enum": [
"accent",
"theme",
"fontSize",
"defaultDocumentFont",
"checker",
"lineNums",
"imageStorage",
"inkColour",
"inkWidth",
"inkStylus",
"wrap",
"dim",
"lineFit",
"showPlayButton",
"highlights",
"highlightColor",
"headings",
"invertImageAlpha",
"layout",
"notesStart",
"notesSort",
"notesLayout",
"notesColour"
]
},
"value": {
"type": [
"string",
"boolean"
]
},
"note": {
"type": "string",
"maxLength": 160,
"minLength": 1
},
"code": {
"type": "string",
"maxLength": 4,
"description": "Browser pairing code; only with target:\"pair\"."
},
"close": {
"type": "boolean"
},
"compare_id": {
"type": "string",
"maxLength": 128
},
"lifetime": {
"type": "integer",
"minimum": 1,
"maximum": 30
},
"after_return_id": {
"type": "string",
"maxLength": 128
},
"agent": {
"type": "string"
},
"operation_id": {
"type": "string",
"maxLength": 128,
"minLength": 1
}
},
"required": [
"document"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"required": [
"target"
],
"properties": {
"target": {
"type": "string",
"const": "playback"
}
}
},
"then": {
"required": [
"revision",
"value"
],
"properties": {
"value": {
"type": "boolean"
}
}
}
}
]
}π΄export(document, format, to, text, block, ...)
Deliver an independent file, save to the bound destination or copy a passage. Use to:sync alone to synchronize the configured Notes store; sync can replace files. Page/Word/PDF need an editor or server renderer. Inspect delivery and verification; export does not publish a website.
Input Schema
{
"type": "object",
"properties": {
"document": {
"type": "string",
"maxLength": 256
},
"format": {
"type": "string",
"maxLength": 32,
"enum": [
"markdown",
"html",
"page",
"txt",
"docx",
"pdf",
"plain",
"formatted",
"complete"
]
},
"to": {
"type": "string",
"maxLength": 32,
"enum": [
"file",
"save",
"clipboard",
"sync"
]
},
"text": {
"type": "string",
"maxLength": 67108864
},
"block": {
"type": "string",
"maxLength": 128
},
"heading": {
"oneOf": [
{
"type": "string",
"maxLength": 1024
},
{
"type": "array",
"items": {
"type": "string",
"maxLength": 256
},
"maxItems": 32
}
]
},
"revision": {
"type": [
"integer",
"string"
]
},
"compare_id": {
"type": "string",
"maxLength": 128
},
"agent": {
"type": "string"
},
"operation_id": {
"type": "string",
"maxLength": 128,
"minLength": 1
}
},
"required": [
"document"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"required": [
"to"
],
"properties": {
"to": {
"type": "string",
"const": "sync"
}
}
},
"then": {
"not": {
"anyOf": [
{
"required": [
"format"
]
},
{
"required": [
"text"
]
},
{
"required": [
"block"
]
},
{
"required": [
"heading"
]
},
{
"required": [
"revision"
]
},
{
"required": [
"compare_id"
]
}
]
}
}
}
]
}Community
Evidence