On this page
A chat history is not a record
ChatGPT keeps a history of your conversations. You can edit a prompt and regenerate the answer, delete a chat, or export it. That is convenient, and it is exactly why a chat history cannot stand as evidence of what the assistant said, or of what your team sent, when it matters later. The same goes for the file you dragged into the chat: ChatGPT read it, but nothing fixed which bytes it read.
Invoance's hosted MCP server gives ChatGPT somewhere to write that is outside the chat and outside its own reach: a signed, time-stamped record in your organization's ledger, with a public proof link. Nothing in the ledger can be edited or deleted. This post is the ChatGPT setup from start to finish, then three habits worth building once it is connected.
Install it as a plugin
On chatgpt.com, open Plugins, choose +, then Add custom MCP server. Name it Invoance and paste the server URL. Choose OAuth, confirm the warning and select Create as a plugin. Install the plugin and sign in to Invoance when the browser opens app.invoance.com: passkey, password or Microsoft account, or a new account if you have none. An owner or admin approves the connection for your organization. Start a new chat, type @ and pick Invoance.
In a Business or Enterprise workspace, an admin may first need to allow custom MCP servers. Each person signs in to Invoance as themselves, so the records show who made them.
https://mcp.invoance.com/mcp
Every write asks you first
ChatGPT shows you each write tool call with its arguments before the call runs, and waits for your confirmation. That is the default, and for a product whose output is a signed record it is the right one. Leave it on. The confirmation card is where you read the event type and the payload, or the document reference, and decide whether that is what you want recorded under your organization's key. Once you confirm, the record is signed and in the ledger. Reads, such as listing, fetching, checking and whoami, run without a confirmation.
That changes how you use the assistant. You are not asking ChatGPT to remember something. You are approving a record, with the same care you would give a letter on letterhead, and ChatGPT is drafting it.
Is this the closing statement we sent?
A buyer's lawyer emails a closing statement back with a question, and the first thing your operations lead wants to know is whether that attachment is the file your firm issued. In ChatGPT, with the file saved somewhere handy: "@Invoance is this PDF the closing statement we sent to Hale & Partners on 14 October?"
ChatGPT finds the record with list_records, filtered by the file name and the date, then calls check_document with the record's ID and gives you the public proof page. You drop the attachment on that page. Your browser hashes it and compares the hash with the record. Nothing is uploaded, and the page needs no account, so the lawyer could have done the same.
A match means the attachment is byte for byte the file you issued at 16:40 on 14 October. No match means it changed after that, or it was never your file. Either way the answer took a minute and did not depend on anyone's memory.
Is this the version we sent?
chatgpt.com · Invoance- You
@Invoance is this PDF the closing statement we sent to Hale & Partners on 14 October?
- ChatGPTlist_recordsrecord_type: documentdocument_ref: "closing-statement-hale.pdf"date_from: 2026-10-141 record · signed 2026-10-14 16:40:22Z
- ChatGPTcheck_documentid: 5d08a3f1-…www.invoance.com/proof/document/5d08a3f1-…
Drop the PDF on that page. Your browser hashes it and compares the hash with the record; nothing is uploaded. A match means it is byte for byte the file you sent on 14 October.
- You
No match.
- ChatGPT
Then the copy that came back is not the one you issued. Your version is fixed in the record at 16:40 on 14 October; whatever changed happened after that, or the file came from somewhere else. Shall I record that the returned copy failed the check?
Keep a signed attestation of ChatGPT's answer
When ChatGPT drafts something you will act on (a reading of a policy, a customer response, the summary that goes to the board), ask it to record the answer: "Record that answer as an attestation, with the model you used." ChatGPT calls attest_ai_output with the prompt, its output and the model name it reports (provider openai), and asks you to confirm. Invoance stores the SHA-256 of the input and of the output, the model fields and the time, and signs the record with your organization's key.
Later, anyone holding the answer text can hash it and compare with the record on the public proof page, or offline with your published public key. The record settles what the assistant said at that time. It records the exchange as ChatGPT passed it to the tool and as you confirmed it; it is not Invoance observing the chat, and it is not a statement that the answer was correct.
A signed record of what the model said
attest_ai_outputChatGPT passes the prompt, its answer and the model it reports
Under our retention policy, how long do we keep KYC packs for a fund that has closed?
outputSeven years from the fund's final distribution, under section 4.2 of the policy you uploaded. Packs for investors who redeemed earlier are kept seven years from their redemption date.
what is hashedthe input text and the output text, separately
Stored in the ledger; the texts themselves are not needed to check it
{"attestation_id": "a7c3e9d1-4b8f-4e2a-9c6d-1f0b5a8e2d47","attestation_type": "output","model_provider": "openai","model_name": "gpt-5","input_hash": "e3b0c442…b7852b85","output_hash": "5f1a9c0e…2d84f6a1","created_at": "2026-10-26T10:03:41Z","signature_alg": "ed25519"}proof_urlwww.invoance.com/proof/ai/a7c3e9d1-…
Recording that something happened
Most records are not documents or model answers. They are facts: a pack was sent, an approval was given, a call was made. "Record that the KYC pack for Ostrava Holdings went to the fund administrator this morning" becomes a log_event call. ChatGPT proposes an event type and a payload, you read them on the confirmation card, and the record is signed.
A few habits make these records useful a year later. Event types are short dotted names: kyc_pack.sent, not a sentence. The payload holds facts you would want to find again (the counterparty, the version, the channel), not prose. Give an event_time when the thing happened earlier than the chat. And leave out secrets and personal data you do not need; the record is signed and kept, so put in what you would be content to show an auditor.
Reading back is the easy half. "What did we record last week?" lists records. "Show me that record" fetches one with its proof link. "Which organization is this connected to?" calls whoami, which is a good first question in any new chat.
{
"event_type": "kyc_pack.sent",
"payload": {
"counterparty": "Ostrava Holdings",
"pack_version": "v3",
"sent_to": "fund administrator",
"channel": "evidence room"
}
}
Anchoring a file ChatGPT cannot hash
Like any assistant running in a browser, ChatGPT cannot read a file's exact bytes, and a hash of the file name or of extracted text would be worthless. So anchor_document called without a hash returns a one-time link on app.invoance.com, valid for fifteen minutes. You drop the file there, your browser computes the SHA-256, only the hash is sent, and the record is written with the file name as its reference. Nothing is uploaded, and if the link expires you ask again.
Once the record exists, the proof link is what you hand out. Put it in the email that carries the file, and every recipient can check their copy without asking you.
Workspaces, plans and switching it off
The connector works on every Invoance plan, including Developer. Records written through it count against your plan the same as API calls, and the rate limit is shared with your organization's API keys. A refused call returns the API's own message (Rate limited, Not allowed), so ChatGPT can tell you why.
Each approval creates an API key that belongs to that connection, kept out of the dashboard's API keys list and limited to the scopes you approved. ChatGPT holds only short-lived tokens, which it renews itself. Connecting ChatGPT again replaces its earlier connection. To switch it off, open Settings, API Tokens, Connected apps and revoke it; the next call is refused. The records it wrote stay in the ledger, signed, as every record does.
