The Claude connector
Plantactic answers to Claude directly. Hand over a set of contracts, ask what happened to ARR, get a PDF back — without leaving the conversation, and without the numbers being anything other than the ones your dashboard shows.
Connecting your account
In Claude, open Settings → Connectors, choose Add custom connector, and give it this URL:
https://mcp.plantactic.com/mcp Leave the OAuth client fields empty — the server registers Claude itself, over RFC 7591 dynamic client registration. You are sent to Plantactic to sign in, shown the connector's name and the host you will be returned to, and connected.
What you are granting: two scopes, plantactic.read and
plantactic.write — so approval includes write access, which is what lets Claude
create datasets and upload contracts. The grant is bound to one API account. A refresh token is
stored and rotates on use; the access token it mints is prefixed ptx_oauth_.
You do not need an API account first. If you have a Plantactic login but have never used the API, one is created and linked at the moment you approve, named from your email domain. If your login already has API accounts, you choose which to connect — and the one you pick is checked against your own, so naming someone else's is refused.
What Claude can do
Five things, each a single call into the API you already have. Claude decides which to use from what you ask; you do not invoke them by name.
- List your datasets — what this account can see.
- Create a dataset — somewhere to put contracts.
- Upload contracts — rows in, a new active version out.
- Get metrics — the full grid at a horizon month: ARR, MRR, CARR, CMRR, TCV, ACV, bookings, logo counts and the growth rates over them.
- Export a report — PDF, Excel or JSON.
You: Upload these contracts to a new dataset and tell me what
happened to ARR through 2026.
Claude: [create_dataset] [upload_contracts] [get_metrics]
Closing ARR reaches $3.7M by December 2026, up from $948K
twelve months earlier. The step in April is Woodgrove Bank
and Litware Health starting in the same month.
Charts come out with the right units, and it is worth saying why. Every
metric row is returned with its formatType — the same presentation metadata a
partner's own client uses to decide whether a number is currency, a percentage or a count. Claude
reads it and can render the units without guessing at them.
You: Give me that as a PDF I can put in the board pack.
Claude: [export_report]
Ready — every metric across the axis.
Download: https://… (the link is good for 10 minutes;
ask again for a fresh one) The shape of a contract
Claude reads your spreadsheet and sends rows. Each needs an identifier, a customer, dates and a
value. Four things decide whether a row counts at all: a
revenueModel that is not one-time, a term, a non-zero
tcv, and a signedDate. A contract missing any of them expands to no
facts. A row missing term is the one to watch: it still counts toward bookings and
revenue while contributing zero ARR and MRR, so the answer looks whole and is not.
licenses drives the per-unit metrics rather than the revenue ones.
{
"contractId": "ACME-1042",
"customer": "Northwind Traders",
"signedDate": "2025-11-15",
"startDate": "2026-01-01",
"endDate": "2026-12-31",
"term": 12,
"tcv": 120000,
"licenses": 100,
"revenueModel": "RECURRING"
} Every row is validated before anything is written, and a rejected upload reports every bad row at once rather than the first — so a file with fourteen problems takes one round trip to fix, not fourteen.
What asks before it acts
list_datasets and get_metrics are marked read-only and run without
interrupting you. create_dataset and export_report write, but nothing
they do removes anything.
upload_contracts we mark destructive, and Claude asks before
running it — a new version becomes the active one and supersedes what was there, so every later
answer about that dataset changes, and that is not something to do quietly. The marking is an
annotation we send; the prompt you see is Claude's, not ours to guarantee.
What the connector cannot see
The connector is a translation layer. It stores no contract data, no conversation, and no credential of its own: Claude holds the refresh token as the OAuth client, and Plantactic records the grant so it can be revoked. It never receives your Plantactic password. It does not see your conversation with Claude beyond the arguments of the call it is asked to make, and it has no access to Claude's memory, your chat history or your files.
Worth stating in the other direction too, because it is the part people miss: contract rows you hand to Claude are part of your conversation with Claude before they ever reach us. The connector receives only the arguments of the call it is asked to make — but the conversation itself is Anthropic's to describe, not ours.
Every request it makes to the API carries your token, not a credential of its own — bound to the one API account you chose when you approved, and limited to the scopes you granted. If your login has several accounts, the connector reaches that one, not all of them.
Revoking the grant takes effect on the next request rather than after a cache expires; nothing here holds a token verdict. Disconnecting in Claude is the usual way to do it, and you can also revoke from our side — mail support@plantactic.com.
What is kept, and for how long. Contracts you upload are stored as dataset versions and persist until you ask us to remove them — there is no delete endpoint and no expiry today, so deletion is a support request. Export artifacts live seven days and their download links ten minutes. Usage is recorded per request as a count, never as content. Datasets, versions, facts covers the storage model.
It also performs no arithmetic. Every number comes from the same engine the product runs, which is the whole reason to connect it rather than paste a spreadsheet into a chat: what Claude tells you and what your dashboard shows cannot drift apart.
Why a connected session is always live
A connected account is always in live mode. Approving the connector creates an
OAuth credential against your account, and that credential is issued live — there is no consent
option, account setting or key prefix that makes a connected session run against sandbox data.
Test mode applies to ptx_test_ API keys used
directly over REST; it is not reachable through Claude.
So evaluate the connector on a dataset you create for the purpose rather than on one you rely
on. Uploading into a new dataset leaves your existing ones untouched; uploading into an existing
one does supersede its active version, which is why that tool asks first. Datasets and versions
come back carrying livemode, so you can check — the metric grid does not, so check
the dataset rather than the grid.