MCP server
Use Invoance from Claude, ChatGPT, Cursor or Claude Code. Add one URL and sign in; the assistant can then record events, documents and AI outputs, and check them later. No SDK and no code.
| Server URL | https://mcp.invoance.com/mcp |
|---|---|
| Transport | Streamable HTTP. One JSON-RPC message per POST, answered with JSON. |
| Sign-in | OAuth 2.1 with dynamic client registration and PKCE. The client finds it on its own from the server's 401. |
| API keys | Clients that send headers can use Authorization: Bearer invoance_live_... instead. |
| Plans | Every plan. Records made through the server count against the plan the same as API calls. |
Paste this into the coding agent you want to connect, such as Claude Code, Cursor or Codex. It reads this page as Markdown and adds the server; you approve the sign-in in your browser. In ChatGPT or claude.ai, use the Connect steps below instead.
Use curl to read https://www.invoance.com/api/docs/developers/mcp and connect the Invoance MCP server to this agent, then call the whoami tool to check the connection.
Claude
- In claude.ai or Claude Desktop, open Customize, then Connectors. Click + Add, then Add custom connector.
- Name it Invoance, paste https://mcp.invoance.com/mcp, click Continue, keep sign-in on and click Add.
- Sign in to Invoance when asked. In a chat, turn Invoance on from the + menu, Connectors.
Team and Enterprise: an owner adds it once in Organization settings, Connectors (Add, Custom, Web). Each member then clicks Connect.
ChatGPT
- On chatgpt.com, open Plugins, choose +, then Add custom MCP server. Name it Invoance and paste https://mcp.invoance.com/mcp.
- Choose OAuth, confirm the warning and select Create as a plugin. Install the plugin and sign in to Invoance.
- Start a new chat, type @ and pick Invoance.
Workspace permissions apply: in a Business or Enterprise workspace an admin may need to allow custom MCP servers. ChatGPT asks you to confirm each write tool call by default.
Cursor
- Add the server to ~/.cursor/mcp.json, or to .cursor/mcp.json in one project.
- Sign in to Invoance when Cursor asks. The browser opens app.invoance.com.
- Connection errors show in the Output panel under MCP Logs.
{
"mcpServers": {
"invoance": {
"url": "https://mcp.invoance.com/mcp"
}
}
}
Claude Code
- Add the server from your terminal.
- In Claude Code run /mcp, pick invoance and sign in in the browser.
- Without an interactive session, claude mcp login invoance runs the same sign-in from the shell.
claude mcp add --transport http invoance https://mcp.invoance.com/mcp
In the Claude desktop app, add Invoance as a connector with the Claude steps above. It then works in chats and in the Code tab.
The first time the client calls https://mcp.invoance.com/mcp, it is sent to app.invoance.com in your browser. Sign in, or create an account, then approve the app for your organization.
- Paste the URLThe client asks the server where to sign in.
- In the browserapp.invoance.com opens. Sign in, or create an account.
- Owner or adminApprove access for your organization.
- Tools appearThe connection gets its own key on your plan.
| Who can approve | An owner or admin of the organization. Other members see the request but cannot approve it. |
|---|---|
| Access | Read and write by default. A client may also ask for audit:read, which adds the audit log tools. The consent page lists what it asks for. |
| Its own key | Each approval gets its own API key, kept out of the API keys list. Limits and usage apply as for any key. |
| Connecting again | Replaces that app's earlier connection. |
| Disconnect | Settings, API Tokens, Connected apps. The app's next call is refused. |
| Tokens | Access tokens last 1 hour and refresh tokens 30 days; the client renews them without asking you. |
Developer clients that can send headers can skip the sign-in and use an API key. Create one in the dashboard (see Authentication) and send it as a Bearer token. The key's scopes decide which tools the client sees.
claude mcp add --transport http invoance https://mcp.invoance.com/mcp \
--header "Authorization: Bearer $INVOANCE_API_KEY"
The client only sees the tools its access allows. Each call runs the matching /v1 API route as the caller, so validation, scopes and limits are the API's own. Every record a tool returns carries a proof_url anyone can open.
| Tool | Access | What it does and its inputs |
|---|---|---|
| whoami | Any | Shows the connected organization, its plan and what the connection may do.None. |
| get_record | read | Fetches one record: its hashes, signature details, time and a public proof link.record_type (event, document or ai_attestation), id. |
| list_records | read | Lists the organization's records, newest first.record_type. Optional: date_from, date_to, event_type (events), document_ref (documents), limit (1 to 50, default 20), page. |
| verify_record | read | Checks content against a record and returns the result with the proof link.record_type, id, and payload (events) or hash, the SHA-256 in hex (documents and AI attestations). |
| check_document | read | Returns a link where the user drops a file to check it against a recorded document.Optional: id of the document record. Without it the link opens the general verify page. |
| log_event | write | Records something that happened as a signed, time-stamped event. Returns its ID and proof link.event_type (a short dotted name such as report.sent), payload (JSON). Optional: event_time. |
| attest_ai_output | write | Records a model's input and output, with the model that produced them, as a signed attestation.input, output, model_provider, model_name. Optional: type (output, decision or approval), model_version, user_id, session_id. |
| anchor_document | write | Records a document's SHA-256 fingerprint, or returns a one-time link to hash the file in the browser.Optional: document_hash (SHA-256 of the file's exact bytes, hex), document_ref (up to 200 characters), metadata. |
| list_audit_organizations | audit:read | Lists the customer organizations that have an audit log.None. |
| search_audit_events | audit:read | Searches one organization's audit log by action, actor, target and time.organization_id. Optional: actions (comma-separated), actor_id, target_id, occurred_after, occurred_before, limit (1 to 100, default 25), cursor. |
If your assistant cannot access the exact file bytes and calculate SHA-256, use the browser link. The browser hashes the file and the file is never uploaded.
Record a file
anchor_document without document_hash returns a one-time link on app.invoance.com. The user drops the file there; the browser hashes it and only the hash is recorded.
Check a file
check_document returns the record's public proof page. The user drops the file and the browser compares its hash with the record.
Assistants that can hash
Claude Code, Cursor and other clients with file access can pass document_hash to anchor_document, or hash to verify_record, and skip the link.
| Recording link | From anchor_document. Works once and expires after 15 minutes. |
|---|---|
| Check link | From check_document: the record's public proof page. It does not expire. |
| The file | Hashed in the browser and never uploaded. |
| What is recorded | The SHA-256, the document reference if one was given, and a proof link. |
| Plans | Available on every plan. |
|---|---|
| Quota | Records made through the server count against the plan the same as API calls. |
| Rate limit | Shared with your organization's API keys. |
| Errors | A refused call returns the API's own message, for example Rate limited or Not allowed, so the assistant can tell you why. |
“Record that we sent the Q3 board pack to the investors today.”
log_event“Anchor this contract before I send it to the buyer.”
anchor_document“Is this PDF the closing statement we sent on 14 October?”
check_document“Keep a record of your answer above, with the model you used.”
attest_ai_output“What did we record last week?”
list_records“Which organization is this connected to?”
whoami