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_filenordocument_markdownwas sent. - A required argument is missing, too long, or a signer field is invalid.
- The
download_urlis 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