---
title: "Connector for AI assistants · DataHubz Attest"
description: "Use Attest from Claude, ChatGPT, Cursor or any MCP app: check records, follow and prepare agreements, while your documents stay end-to-end encrypted."
url: https://attest.datahubz.com/docs/connector
updated: 2026-10-12
---

[ Introducing Attest](https://attest.datahubz.com/docs) [ API reference](https://attest.datahubz.com/docs/api) [ Integrations](https://attest.datahubz.com/docs/integrations) [ AI assistants](https://attest.datahubz.com/docs/connector)

 On this page

[Overview](https://attest.datahubz.com/docs/connector#overview) [What it can do](https://attest.datahubz.com/docs/connector#tools) [What it can't do, and why](https://attest.datahubz.com/docs/connector#limits) [Add it to your assistant](https://attest.datahubz.com/docs/connector#add) [Sign-in and permissions](https://attest.datahubz.com/docs/connector#permissions) [Plans and limits](https://attest.datahubz.com/docs/connector#plans) [Verify without an account](https://attest.datahubz.com/docs/connector#verify-only) [For developers](https://attest.datahubz.com/docs/connector#developers) [Common questions](https://attest.datahubz.com/docs/connector#questions)

Documentation

# Attest in your AI assistant.

The Attest connector lets Claude, ChatGPT, Cursor or any MCP app work with your Attest records: check a signed document, see who still has to sign, remind them, prepare a new agreement, record a receipt and share a proof.

MCP, the **Model Context Protocol**, is an open standard for connecting AI assistants to the services people use. The connector is Attest's MCP server, at `https://attest.datahubz.com/mcp`. You add that address to your assistant, sign in to Attest once, and choose what the assistant may do. Your documents stay end-to-end encrypted the whole time: the connector works with records, statuses, fingerprints and links, and signing always takes each signer's own passkey.

Records, never documents

Your documents are end-to-end encrypted. The connector works with titles, statuses, signers, fingerprints and links; it never receives a document's contents or a key.

Signing stays with people

Every signer signs in Attest with their own passkey. No tool, token or API key can sign for anyone.

You choose what it can do

A consent page lists what the app asks for. Untick a permission and the app doesn't get it.

Disconnect any time

Connected apps, on your Security page, lists every app you connected. Disconnect ends its access at once.

Open standards

The Model Context Protocol, OAuth 2.1 with PKCE, client ID metadata documents and dynamic client registration. Nothing to install.

Verification for anyone

Checking a record is free and needs no account, in your assistant as on attest.datahubz.com/verify.

What it can do

## Nine tools, all of them about your records.

Your assistant picks the tool that fits what you ask. Every result carries the attest.datahubz.com links to open or share: a certificate, a receipt's verification page, a proof, the dashboard.

| Tool               | What it does                                                                                                                                                                                                                       | Permission          |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- |
| verify\_record     | Checks an agreement ID, the ATT-XXXX-XXXX code on a signature stamp, a receipt ID, a proof ID or a SHA-256 fingerprint: the same public check anyone can run on the verify page.                                                   | None (public)       |
| list\_agreements   | Your agreements, the ones you sent and the ones you're asked to sign: status, signers, dates, whose turn it is, whether it's anchored, and the certificate link.                                                                   | Read your records   |
| get\_agreement     | One agreement, with the note to signers, the document's fingerprint and the audit trail up to completion.                                                                                                                          | Read your records   |
| remind\_signers    | Emails the signing link again to the signers whose turn it is, like Remind in the dashboard, at most once a day per signer.                                                                                                        | Act on your records |
| prepare\_agreement | Fills in the New agreement form (title, signers, signing order, note, expiry) and gives you the link. You attach the PDF and send it.                                                                                              | Act on your records |
| record\_receipt    | Records a receipt for a SHA-256 fingerprint, or for a short text it fingerprints; only the fingerprint is stored. The fingerprint is public, so a short or guessable text can be found from it: add a unique detail only you keep. | Act on your records |
| list\_receipts     | Your receipts, with their fingerprints, claims and anchors.                                                                                                                                                                        | Read your records   |
| share\_proof       | Creates a Share proof that you signed a completed agreement, alone or with a named co-signer, and gives you its link.                                                                                                              | Act on your records |
| get\_account       | Your plan and what's left of it: documents (a total on Free, monthly on Signing) and records this month.                                                                                                                           | Read your records   |

You see only agreements you're a party to: ones you sent, and ones that list you as a signer. As a party, you see signers' names and email addresses, just as in the dashboard. verify\_record shows what anyone would see: signers by name, never their email addresses, and a private agreement only as private.

A Share proof shows its recipient your email address, the co-signer's address if you named one, the day the agreement was completed, and that the proof is valid and where it's anchored. It never shows the document or its terms, its title, or any other signer. Each proof is submitted to zkVerify for independent verification.

What it can't do, and why

## Your documents and your signature stay with you.

### It can't read your documents

Every document sent for signature is **end-to-end encrypted**: it's encrypted in the sender's browser (AES-256-GCM, under a new key for each document) before it's uploaded, and that key is encrypted to each party's own key. Only the parties can open it, in their own browsers, unlocked by their passkeys. Attest stores the document only as ciphertext it can't read, so there is nothing readable for the connector to pass on. It never receives a document's contents or any key.

### It can't sign

A signature in Attest is made with a **passkey** only the signer controls, approved with Face ID, Touch ID, Windows Hello or the device PIN, and Attest checks it against the passkey's public key before recording it. The connector has no signing tool. When it's your turn, your assistant points you to the agreement in Attest.

### It doesn't send documents, or release them

prepare\_agreement fills in the form; you attach the PDF and send it from the dashboard, where it's encrypted in your browser. Releasing a document to a signer who has just set up their key is also done by your browser, with your key unlocked by your passkey: Attest can't do it for you, and neither can an assistant.

### What the app does receive

The connector sends the app the records you'd see in the dashboard for what you asked: titles, signers' names and addresses, statuses, times, fingerprints and links. Those records go to the app you connected, like anything else you share with it.

Add it to your assistant

## One address: https://attest.datahubz.com/mcp

### Claude

On Free, Pro and Max: open Customize, then Connectors, choose + Add, then Add custom connector. Name it Attest and enter `https://attest.datahubz.com/mcp` as its URL. For Authentication, choose Sign in now. Where Claude asks how it should identify itself to Attest (OAuth client), choose Use Claude's published identity; Register automatically works too. If the dialog shows Advanced settings instead, leave them empty. Add it, then choose Connect: Claude sends you to Attest to sign in and approve what it may do, then brings you back. Free accounts can add one custom connector.

On Team and Enterprise, an Owner adds it once for everyone: Organization settings, then Connectors, Add, Custom, then Web, with the same URL and the same choices. Each member then opens Customize, then Connectors, and chooses Connect, so each signs in to their own Attest account.

### ChatGPT

Open chatgpt.com/plugins, choose +, then Add custom MCP server. Name it Attest, add a description if you like, enter `https://attest.datahubz.com/mcp` as the server URL, choose OAuth as its authentication, confirm the warning, and choose Create as a plugin. ChatGPT sends you to Attest to sign in and approve it. Whether you can add one depends on your ChatGPT plan and, in a workspace, on its admin's settings.

Claude and ChatGPT can identify themselves with the registration they publish (https://chatgpt.com/oauth/client.json for ChatGPT), so Attest's consent page names the site that publishes it, for example ChatGPT, identified by chatgpt.com.

### Claude Code

shell

```
claude mcp add --transport http attest https://attest.datahubz.com/mcp
```

Then run `/mcp` in Claude Code and choose to authenticate Attest: your browser opens Attest's sign-in and consent page.

### Cursor

[Add Attest to Cursor](cursor://anysphere.cursor-deeplink/mcp/install?name=attest&config=eyJ1cmwiOiJodHRwczovL2F0dGVzdC5kYXRhaHViei5jb20vbWNwIn0=) opens Cursor and asks you to install the server. Or add it to `~/.cursor/mcp.json`, or to `.cursor/mcp.json` in a project:

mcp.json

```
{
  "mcpServers": {
    "attest": { "url": "https://attest.datahubz.com/mcp" }
  }
}
```

### VS Code

[Add Attest to VS Code](vscode:mcp/install?%7B%22name%22%3A%22attest%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fattest.datahubz.com%2Fmcp%22%7D) opens VS Code to install it. Or run MCP: Add Server from the Command Palette, give it the URL, and choose .mcp.json to save it at the root of your workspace (or Copilot Global for all of them). The entry in `.mcp.json`:

.mcp.json

```
{
  "mcpServers": {
    "attest": { "type": "http", "url": "https://attest.datahubz.com/mcp" }
  }
}
```

VS Code still reads the older `.vscode/mcp.json`, where the same entry goes under `"servers"`. On first use, VS Code opens your browser to sign in to Attest.

### Gemini CLI

shell

```
gemini mcp add --transport http attest https://attest.datahubz.com/mcp
```

That adds it to the project's `.gemini/settings.json`; with `--scope user`, to `~/.gemini/settings.json`. Or add it to settings.json yourself:

settings.json

```
{
  "mcpServers": {
    "attest": { "httpUrl": "https://attest.datahubz.com/mcp" }
  }
}
```

Gemini CLI finds Attest's sign-in on its own; run `/mcp auth attest` to sign in, and again if it asks you to later.

### Microsoft Copilot Studio

On your agent's Tools page, choose Add a tool, then New tool, then Model Context Protocol. Enter Attest as the server name, a short description of what it does, and `https://attest.datahubz.com/mcp` as the server URL. For authentication choose OAuth 2.0, then Dynamic discovery, choose Create, then Next. On Add tool, create a new connection, sign in to Attest when asked, and choose Add to agent.

### Other MCP apps

Any app that connects to an MCP server by URL over Streamable HTTP can use the connector. It discovers Attest's sign-in on its own and asks you to sign in the first time it connects.

### With an API key instead

Apps you configure yourself can send an Attest API key instead of signing in: create one in the dashboard (Build, then Developers) and send it as a bearer token. A key acts as your account, with every permission of the connector. API keys come with Pro and with free accounts that use the other tools.

shell

```
claude mcp add --transport http attest https://attest.datahubz.com/mcp --header "Authorization: Bearer ak_live_..."
```

mcp.json

```
{
  "mcpServers": {
    "attest": {
      "url": "https://attest.datahubz.com/mcp",
      "headers": { "Authorization": "Bearer ak_live_..." }
    }
  }
}
```

Sign-in and permissions

## You approve each app, and you can disconnect it.

When an app connects, it sends you to Attest. You sign in, and a consent page shows who is asking, the address it returns to, what it will be able to do and what it can't. An app that registered itself is shown by the name it gives itself, marked as not verified by Attest (anyone can register an app under any name). An app that identifies itself with a registration it publishes, as ChatGPT and Claude can, is shown with the site that publishes it, for example identified by chatgpt.com; when such an app returns to a program on your computer, its name is shown as a claim, with a warning, since any program there could present it. Allow it only if you started from that address. Untick a permission to leave it out. The app gets nothing until you choose Allow.

| Permission          | Scope         | What it allows                                                                                                                                                                           |
| ------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Check records       | verify        | Public checks of agreements, receipts, proofs and fingerprints.                                                                                                                          |
| Read your records   | records:read  | Your agreements, receipts, Share proofs and plan usage.                                                                                                                                  |
| Act on your records | records:write | Email your signers reminders, record public receipts and create public Share proof links (none of these can be undone or withdrawn), and prepare agreements for you to finish in Attest. |

The app receives an access token that lasts an hour and a refresh token that lasts 30 days and is replaced every time it's used. A refresh token used again after it was replaced ends the connection; the only exception is a repeat within 30 seconds (an app's parallel requests or a retry), which gets the very same replacement tokens, unless the app has since revoked them or used the new refresh token. Attest stores tokens only as SHA-256 hashes. Each connection can make up to 300 requests a minute, and an account up to 600 across all its apps and keys. To see or end your connections, open [Security](https://attest.datahubz.com/dashboard/security) in the dashboard: Connected apps lists each app with its permissions and last use, and Disconnect ends its access at once. Signing out ends your sessions on every device and disconnects every app too, including one you approved moments before. You can have up to 50 connections; connecting another ends the one used least recently.

Plans and limits

## On every plan, by the same rules as the dashboard.

The connector works on every plan, Free included. Each tool follows your plan's rules: reading and verifying never use records; recording a receipt uses one; Share proofs use none, up to 10 per party per agreement. Receipts aren't on the Signing plan or on accounts that signed up for signing only. Reminders share the dashboard's daily cap of 300 invitations. Before it prepares an agreement, the connector checks that you have a document left to send, and tells you if you don't: the Free plan includes 2 documents in total and the Signing plan 20 a month. A prepared form's link works for 72 hours, only for you, and your agreements page lists the open ones under Prepared by an assistant, to open or discard. You can have up to 50 open at once, and the connector prepares at most 10 for you in 10 minutes; past either, nothing more is prepared, and none is removed.

Verify without an account

## Check a record from any assistant.

Verification is free and needs no account. To check Attest records from an assistant without signing in, add `https://attest.datahubz.com/mcp/verify` instead: it offers verify\_record only, up to 3,000 requests per 10 minutes from one address. To check a file, your assistant needs its SHA-256 fingerprint, never the file: compute it on your device, or drop the file on [attest.datahubz.com/verify](https://attest.datahubz.com/verify), where it's fingerprinted in your browser and never uploaded.

For developers

## Standard MCP and OAuth, nothing proprietary.

The connector implements MCP revision 2025-11-25 over Streamable HTTP, statelessly: each request is one JSON-RPC message, sent with POST and answered with JSON (batches are refused). Authorization follows the MCP authorization spec, with OAuth 2.1 authorization code and PKCE (S256 only), client ID metadata documents (an IETF draft), dynamic client registration (RFC 7591), resource indicators (RFC 8707), protected resource metadata (RFC 9728), authorization server metadata (RFC 8414), token revocation (RFC 7009) and the iss response parameter (RFC 9207), on every authorization response. Every tool returns structured content with an output schema, and the same JSON as text; lists come in pages with a cursor (list\_agreements up to 25, list\_receipts up to 50, an audit trail up to 100 steps), each result within 30,000 characters.

| Endpoint                      | Address                                   |
| ----------------------------- | ----------------------------------------- |
| MCP server                    | https://attest.datahubz.com/mcp           |
| MCP server, verify only       | https://attest.datahubz.com/mcp/verify    |
| Protected resource metadata   | /.well-known/oauth-protected-resource/mcp |
| Authorization server metadata | /.well-known/oauth-authorization-server   |
| Registration                  | /oauth/register                           |
| Authorization                 | /oauth/authorize                          |
| Token                         | /oauth/token                              |
| Revocation                    | /oauth/revoke                             |

A request without a token gets `401` with a `WWW-Authenticate` header that names the protected resource metadata and the scopes. A tool outside the token's scopes gets `403 insufficient_scope`, naming the scopes to ask for. Past 300 requests a minute with one connection or API key, 600 a minute for one account across all of them, or 600 a minute from one address with tokens Attest never issued, `429` with `Retry-After`. A token Attest issued that expired or was revoked always gets `401 invalid_token`, never `429`, so the app refreshes it. Until you decide on the consent page, Attest shows any error in the request on its own page and never sends you back to the app with it. An app can use the https URL of its client metadata document as its `client_id` instead of registering: Attest reads the document when a signed-in person opens the consent page, only from a public address, without following redirects, within 5 seconds and 5 KB, and uses it again for its HTTP cache lifetime (a minute to a day). The document's `client_id` must be its exact URL, and the app must be able to authenticate as a public client (`none`, with PKCE); Attest doesn't accept client secrets or `private_key_jwt` there. Attest reads at most 60 new documents a minute from one host, and 10 per account in 10 minutes. Redirect URIs are https, or http on the same device (localhost, 127.0.0.1 or \[::1\]), registered in their canonical form. They must match a registered one exactly, except that a loopback one may use any port, and localhost, 127.0.0.1 and \[::1\] count as one host (RFC 8252). Text people typed into Attest (titles, notes, names, file names, claims, an app's self-declared name) comes only in fields named `untrustedText`, never in summaries or next steps, so an assistant can tell it from what Attest says. Email addresses are typed by people too (a sender chooses the signers'), and results mark them as unverified input. The [REST API](https://attest.datahubz.com/docs/api) covers what the connector doesn't, with the same API keys.

Common questions

## Short answers.

### Can my assistant read my contracts?

No. Documents sent for signature are encrypted in the sender's browser, and Attest stores them only as ciphertext it can't read. The connector works with records: titles, signers, statuses, dates, fingerprints and links.

### Can my assistant sign a document for me?

No. Each signer signs in Attest with their own passkey (Face ID, Touch ID, Windows Hello or the device PIN), and Attest checks that signature before recording it. The connector has no signing tool, and no token or API key can sign for anyone.

### Can it send a document for signature?

It prepares one. prepare\_agreement fills in the New agreement form with the title, signers, signing order, note and expiry date, and gives you the link. You attach the PDF there, where it's encrypted in your browser, and send it.

### Does the connector cost anything?

No. It works on every plan, Free included. Reading and verifying never use records; recording a receipt uses one, as it does in the dashboard, and a document you send from a prepared form counts like any other.

### How do I stop an app from using my account?

Open Security in the dashboard: Connected apps lists every app you connected, with its permissions and last use. Disconnect ends its access at once.

---

Source: https://attest.datahubz.com/docs/connector
