Rapier - Markdown Editor & Art

Markdown editor for writing, notes, editable diagrams, drawing and painting with your AI assistant.

Should I use this

Quality & Safety

A
Description quality
97%
Schema completeness
79%
Naming quality
97%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,516Tokens (tool definitions)
~3.7 KBTypical response size
Moderate attention impact (1.97% of 128k context)

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-http
https://mcp.rapier.website/door/mcpstreamable-http

What it can do

Tool inventory

Tools (6)

🟒 Read-only🟑 WriteπŸ”΄ Deleteβšͺ Unknown
🟑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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools
verifiedversion not recorded6 tools