# md2sign

> Send markdown contracts for legally binding e-signatures. Draft, preview, send and track signing.

- name: com.md2sign/md2sign
- version: 1.3.0
- connection class: R0 (autonomous)
- trust: 96/100
- quality: 92/100 (new)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.md2sign%2Fmd2sign
- tools: https://api.protogrid.dev/v1/servers/com.md2sign%2Fmd2sign/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "md2sign": {
      "type": "http",
      "url": "https://md2sign.com/mcp",
      "headers": {
        "Authorization": "Bearer ${MD2SIGN_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${MD2SIGN_TOKEN}`.

## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 85
- drivers: +repository +dns-namespace +website +reachable +uptime-100% +updated-1d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 92/100 (new)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: 83 (weight 15)

- pass `auth.prm`: Protected Resource Metadata (RFC 9728) published
- pass `auth.as_metadata`: authorization server metadata reachable
- warn `auth.cimd`: only Dynamic Client Registration, deprecated in 2026-07-28 in favour of CIMD
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 21 of 21 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 4,789 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump
- pass `tools.hidden_text`: no hidden text in tool names, descriptions, schemas or annotations

### stability: n/a (weight 15)

- n/a `stability.changes`, `stability.rug_pull`, `stability.new_links`: tool history recorded for 1 of the 7 days needed

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 21, about 4,789 tokens to load them all
- tool set hash: 02cac7565e69db3a0ca40f4d61a01674
- tools last changed: 2026-11-13T14:28:34.663Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.md2sign/md2sign.svg)](https://protogrid.dev/servers/com.md2sign/md2sign)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-11-13 `create_account` changed (description)
  - before: Create an md2sign account for your human and get an API key. They are emailed a confirmation link and subscription options. Once they confirm their email, their first sent document is free (up to 5 signers); after that, sending needs a plan (Starter $7.50/mo for 50 signature requests, Pro $26.41/mo for 500). You can validate, draft, preview and test-send right away. Returns api_key and checkout_urls to hand to the human.
  - after: Create an md2sign account for your human and get an API key. They are emailed a confirmation link and subscription options. Once they confirm their email, their first sent document is free (up to 5 signers); after that, sending needs a plan (Starter $7.50/mo for 50 signature requests, Pro $39/mo for 500, or yearly at 12 months for the price of 10). You can validate, draft, preview and test-send right away. Returns api_key, checkout_urls (monthly) and annual_checkout_urls (yearly) to hand to the human.
- 2026-11-13 `save_webhook` changed (title, annotations)
- 2026-11-13 `list_webhooks` changed (title, annotations)
- 2026-11-13 `create_document_from_template` changed (title, annotations)
- 2026-11-13 `save_template` changed (title, annotations)
- 2026-11-13 `get_template` changed (title, annotations)
- 2026-11-13 `list_templates` changed (title, annotations)
- 2026-11-13 `get_audit_trail` changed (title, annotations)
- 2026-11-13 `void_document` changed (title, annotations)
- 2026-11-13 `remind_recipients` changed (title, annotations)

Full history: https://api.protogrid.dev/v1/servers/com.md2sign%2Fmd2sign/changes

## Remotes

- https://md2sign.com/mcp/oauth (streamable-http, auth oauth2, reachable false, uptime30d 0.8)
- https://md2sign.com/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (21)

- `create_account`: Create an md2sign account for your human and get an API key. They are emailed a confirmation link and subscription options. Once they confirm their email, their first sent document is free (up to 5 signers); after that, sending needs a plan (Starter $7.50/mo for 50 signature requests, Pro $39/mo for 500, or yearly at 12 months for the price of 10). You can validate, draft, preview and test-send right away. Returns api_key, checkout_urls (monthly) and annual_checkout_urls (yearly) to hand to the human.
- `create_document_from_template`: Create a draft from a template by filling in its {{ variables }} (Pro). Set send=true to send it straight away; otherwise review it and call send_document. Missing variables return a missing_variables error listing them.
- `create_draft`: Save markdown as a draft document. Recipients are detected from the signature fields. Drafts are free and can be updated any number of times. Set send=true to send immediately (uses one unit per recipient).
- `get_account`: Show the account's verification status, plan, signature requests used and remaining this month, and checkout links if there is no subscription yet.
- `get_audit_trail`: Get the audit trail and cryptographic verification for a document: SHA-256 hashes, chained signature hashes, Ed25519 seals and every event with timestamps and IP addresses.
- `get_document`: Get a document with its status, markdown, recipients and each recipient's signing status.
- `get_markdown_spec`: Explains md2sign's markdown format: signature fields [[signature: First Last <email>]], optional roles, input fields signers fill in [[field: Label | for: email | type: date | required]], and hidden style/title/signing-order directives. Returns an example contract. Call this first if you have not written md2sign markdown before.
- `get_template`: Get a template: its latest markdown, the {{ variables }} it needs, and its version history. Pass "version" to read an older version.
- `import_word_document`: Convert a Word document (.docx, or best-effort .doc) into md2sign markdown. Keeps headings, bold and italics, numbered and bulleted lists, tables and links; images are dropped. Nothing is saved: review the returned markdown, add a [[signature: Name <email>]] field for each person who needs to sign (see signing_advice), then call create_draft. Returns markdown, title, import_warnings and validation. Max 10 MB.
- `list_documents`: List your documents, newest first, optionally filtered by status (draft, sent, completed, declined, voided, expired).
- `list_templates`: List the document templates shared by your company account (Pro). Use get_template to read one and create_document_from_template to use it.
- `list_webhooks`: List the company's webhook endpoints (Pro, admin only), including each signing secret, and the events you can subscribe to.
- `remind_recipients`: Re-send the signature request email to recipients who haven't signed yet (at most once an hour per recipient). Uses no extra units.
- `render_preview`: Render markdown exactly as a recipient will see it: the signing page (default) or the signature-request email. Returns HTML you can show your human, plus validation results. Free, no account needed.
- `save_template`: Create a template (omit template_id) or update one (Pro). Changing the markdown saves a new version; older versions are kept. Use {{ variable_name }} placeholders for values that change per document, e.g. [[signature: {{ client_name }} <{{ client_email }}>]].
- `save_webhook`: Create (omit webhook_id) or update a webhook endpoint (Pro, admin only). md2sign POSTs signed JSON with the document, its markdown and, on document.completed, the signed PDF as base64 to a public https URL such as Zapier, Make or n8n. Set send_test=true to send a test event.
- `send_document`: Send a draft for signature. Each recipient gets an email from "<Company> via md2sign" with the document and a unique signing link. Uses one unit per recipient. Needs a confirmed email and an active subscription; once sent, the document can't be edited.
- `test_send_document`: Email a watermarked TEST copy of the signature request to the account owner only, so the human can see exactly what recipients will get. Free and needs no subscription; limited to 10 a day.
- `update_draft`: Replace the markdown, title, style or message of a draft. Only drafts can be changed; to change a sent document, void it and create a new one.
- `validate_markdown`: Check that markdown has correctly formed signature fields before you draft or send it. Returns detected recipients, title, style, units required, the SHA-256 document hash, and errors/warnings with line numbers. Free, no account needed.
- `void_document`: Cancel a sent document that is still awaiting signatures. Recipients who haven't signed are told it was cancelled.
