NotaryLive API - MCP Server

Page last updated: October 20, 2026

Overview

NotaryLive runs a remote Model Context Protocol (MCP) server that lets AI assistants such as Claude and ChatGPT create online notarization orders on a user's behalf. The server lives at a single endpoint:

POST https://notarylive.com/mcp

The server uses the Streamable HTTP transport and is stateless. Every request is a single JSON-RPC 2.0 message sent as the JSON body of a POST, and every response is a plain JSON body. The server never opens an SSE stream, and a GET request to the endpoint returns 405 Method Not Allowed.

No API credentials or sign-in are required. The user finishes the order, verifies their identity and pays in their own browser, so the server never handles payment or identity data.

If you only want to use NotaryLive from Claude, follow the Connect NotaryLive to Claude guide instead.


Initializing

Start by sending an initialize request:

curl -X POST "https://notarylive.com/mcp" \
    -H 'Content-Type: application/json' \
    -H 'Accept: application/json, text/event-stream' \
    -d $'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"example-client","version":"1.0.0"}}}'

A successful request will generate the following response:

{
  "id": 1,
  "jsonrpc": "2.0",
  "result": {
    "capabilities": {
      "tools": {
        "listChanged": false
      }
    },
    "protocolVersion": "2025-06-18",
    "serverInfo": {
      "name": "notarylive",
      "title": "NotaryLive",
      "version": "1.0.0"
    }
  }
}

The server supports the following protocol versions. If you request a version that is not listed, the server answers with the newest one it supports.

protocolVersion
2025-11-25
2025-06-18
2025-03-26

The initialize response also carries an Mcp-Session-Id header. Send it back as a header on every later request. It holds no server-side session, so the server keeps working without it, but it lets us tell which assistant an order came from.


Methods

The server answers the following JSON-RPC methods:

method Description
initialize Negotiates the protocol version and returns the server's capabilities. See Initializing.
ping Returns an empty result object.
tools/call Runs a tool. See Creating an Order.
tools/list Returns the tools the server offers. See Listing Tools.

A message without an id is a notification, such as notifications/initialized. The server accepts every notification with a 202 Accepted response and an empty body.


Listing Tools

The server offers a single tool, create_notarization_order. Send a tools/list request to retrieve its full definition, including its inputSchema and outputSchema:

curl -X POST "https://notarylive.com/mcp" \
    -H 'Content-Type: application/json' \
    -d $'{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

The schemas in the tools/list response are always the most up-to-date description of what the tool accepts.


Creating an Order

Call create_notarization_order with the document and everyone who will sign or witness it. Below is an example that sends the document as Markdown:

curl -X POST "https://notarylive.com/mcp" \
    -H 'Content-Type: application/json' \
    -d $'{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"create_notarization_order","arguments":{"document_title":"Affidavit of Residence","document_markdown":"# Affidavit of Residence\\n\\nI, Jane Doe, ...","signers":[{"type":"signer","first_name":"Jane","last_name":"Doe","email":"[email protected]"}]}}}'

A successful request will generate the following response:

{
  "id": 3,
  "jsonrpc": "2.0",
  "result": {
    "content": [
      {
        "text": "Order created. Ask the user to open this link in their own web browser to review the order, verify their identity, pay, and meet the notary by video: https://notarylive.com/...",
        "type": "text"
      }
    ],
    "structuredContent": {
      "link_to_order": "https://notarylive.com/..."
    }
  }
}

Give the user the link_to_order. They open it in their own browser to review the order, verify their identity, pay, and meet a commissioned notary by video.

Arguments

Argument Required Description
document_file One of document_file or document_markdown A file the user uploaded, as an object. See Document Files.
document_markdown One of document_file or document_markdown The full text of the document, in Markdown, up to 100,000 characters. We render it to a PDF, which can be at most 30 pages long.
document_title Yes The document title, for example "Affidavit of Residence", up to 150 characters.
notary_instructions No Notes for the notary, up to 1,000 characters.
signers Yes An array of everyone who will sign or witness the document. See Signers.

Send document_file or document_markdown, never both.

Signers

Each entry in signers is an object with the following fields, all required. At least one entry must have a type of signer, and the first signer is treated as the person placing the order.

Field Description
email The person's email address.
first_name Letters, spaces, commas, periods, hyphens and apostrophes only.
last_name Letters, spaces, commas, periods, hyphens and apostrophes only.
type Either signer or witness.

Document Files

To send a file instead of Markdown, pass document_file as an object. Only download_url is required:

{
  "document_file": {
    "download_url": "https://pdfobject.com/pdf/sample.pdf",
    "file_id": "optional-id-from-the-assistant",
    "file_name": "affidavit.pdf",
    "mime_type": "application/pdf"
  }
}

The download_url must be a public HTTPS link that we can download without signing in. The file can be up to 100 MB and must be one of these types: pdf, doc, docx, png, jpg, jpeg, heic, heif.


Errors

Problems with the JSON-RPC message itself return a JSON-RPC error object:

HTTP status Error code Description
400 -32600 The body is not a JSON-RPC message with a string method.
413 -32600 The request body is larger than 1 MB. Send large documents as a document file link instead.
200 -32601 The method is not one the server answers. See Methods.
{
  "error": {
    "code": -32601,
    "message": "Method not found"
  },
  "id": 4,
  "jsonrpc": "2.0"
}

Problems with a tool call, such as a missing document or an invalid signer, are returned as a JSON-RPC response with isError set to true, as the MCP specification requires. The text explains what went wrong in a way the assistant can act on, for example by retrying or asking the user for more information:

{
  "id": 3,
  "jsonrpc": "2.0",
  "result": {
    "content": [
      {
        "text": "No document was received. If the user uploaded a file, retry the call with document_file; otherwise send the full document text as document_markdown.",
        "type": "text"
      }
    ],
    "isError": true
  }
}

The following are the most common reasons a tool call fails:

  • Neither document_file nor document_markdown was sent.
  • A required argument is missing, too long, or a signer field is invalid.
  • The download_url is not a public HTTPS link, could not be downloaded, is too large, or is an unsupported file type.
  • The Markdown document renders to more than 30 pages.
  • The file is password protected or locked against editing.
  • Order creation is temporarily unavailable. Try again later.

Copyright © 2026, NotaryLive.com