Skip to content

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.