Backstop MCP
5 min read
Getting Started
You want to | Read |
|---|---|
Connect your AI assistant and log in | |
Deploy the server, on Unique SaaS or self-managed, and configure it | |
Understand how it works, what it can read and write, and every tool | |
Find a quick answer | |
Change the server's code | Local Development, then the developer documentation on GitHub |
Overview
Backstop MCP is an MCP server that lets AI assistants read and write a firm's Backstop CRM through the Backstop REST API. It covers organizations, people, activities (notes, meetings, calls, emails, documents, tasks), the opportunity pipeline, funds and investor accounts, custom fields, and saved Report Center reports, through 44 MCP tools. These pages say AI assistant, or just assistant, for the MCP client that connects to the server, such as Unique chat.
Every tool call acts as the signed-in user. Each user connects once with their own Backstop username and personal API token; the server never uses a shared service account, so a user sees and changes exactly what Backstop allows them to.
Backstop has no OAuth of its own, so this server is the OAuth 2.1 authorization server for the assistants that connect to it. It hosts a small login form, checks the submitted credential against Backstop, stores it encrypted, and issues its own short-lived MCP tokens. See Authentication.
Quick Summary
Property | Detail |
|---|---|
What it does | 44 tools: 27 read-only, 17 that create, change, or delete CRM records |
Who it acts as | The connected user, with their own Backstop credential |
Deployment | One Python (FastMCP) container on Kubernetes, installed with a Helm chart |
Durable state | PostgreSQL only: OAuth clients and tokens, each user's encrypted Backstop credential, and recent login attempts |
Not needed | No message queue, no Unique knowledge base, no Zitadel service account, no ingestion |
CRM data at rest | None. Backstop data is fetched live per call. Reference catalogs are cached in memory, and report results are held in memory for up to an hour so a slow build can be collected |
Requirements
Backstop
Requirement | Details |
|---|---|
Backstop tenant | Reachable over HTTPS from the cluster, either on the tenant's own host or on the shared |
Personal API token per user | Created in Backstop under Main Menu › System Tools › Administrative › Update Your Profile, API Security section. The login form takes this token, never a password |
Each user's login must be a Backstop system user | A system user is a staff login at your own firm, the kind of account your Backstop administrator manages under user administration. It is not a CRM contact or an employee record, and your firm's staff are the only people who have one. A login without a system user is refused at sign-in, because every activity the assistant logs has to be authored as that system user |
Platform
Requirement | Details |
|---|---|
Kubernetes + Helm | The chart depends on Unique's |
A memory limit set by you | The chart's default limit of 256 Mi, with a 128 Mi request, is too low for real use: reading a large custom-field catalog gets the pod OOM-killed. Set |
PostgreSQL | One database. Schema migrations run as a Helm hook ( |
Public HTTPS URL | The assistant and the user's browser must reach the server; the URL is the OAuth issuer ( |
What It Can Do
Feature | Read | Write |
|---|---|---|
Look up, search firm-wide, roster of an organization, employment history | Create, update, delete; add and end employment; edit addresses | |
Firm-wide or per-party search, full detail and attachments, last activity per party, tasks | Log notes, meetings, calls, tasks; attach documents and email files; update; delete | |
A party's deals with stage history, firm-wide search and counts, deals by id | Create, update (including stage moves), delete, backfill stage history | |
Products, a party's holdings, a product's investors, dated time series, subscriptions and redemptions | None | |
Definitions, layout groups, values on records | Write values on people, organizations, and opportunities | |
Run a saved Report Center report by name | None | |
Build and parse links to the Backstop web app | None |
See Features for the questions each feature answers and how it behaves.
How It Works
The user adds the server to their AI assistant. The assistant registers itself and starts an OAuth flow.
The browser opens the server's login form. The user enters their Backstop username and personal API token. The server checks them against Backstop and finds the user's system-user record.
The server stores the credential encrypted, and gives the assistant a 15-minute access token and a 30-day refresh token.
Each tool call loads that user's credential and calls Backstop as them.
See Architecture for components and request flow.
Limitations
Limitation | Details |
|---|---|
No shared service account | Every user needs their own Backstop login and API token |
5 concurrent Backstop requests per user, per pod | Backstop allows each user's token 5 requests at once, and every pod holds a gate of the same size. That gate counts one pod only, so two replicas can put 10 requests in flight for the same user. Backstop answers the excess with |
Deletes are permanent | Backstop has no recycle bin. The four delete tools show the record and ask the user to confirm, but only when the assistant can put a question to the user mid-task; otherwise they delete without asking |
Creates are not idempotent | Repeating a create call makes a second record |
Read-only areas | Funds, accounts, flows, reports, and catalogs (tags, categories, sources, users) cannot be written |
File size |
|
Search ceiling | Backstop's activity search stops at 10,000 rows. A larger result comes back marked as incomplete, so the assistant can tell the user the answer is partial and suggest a narrower question: a shorter date range, one party, or one activity type. The field carrying that mark is |
Key employee is read-only | Sending |
Related Documentation
Developer documentation
These pages live in the repository and are read on GitHub. They are for developers changing the server, not for using or operating it.
Document | What it covers |
|---|---|
Code layout, the layering rule, and the steps for adding a feature or tool | |
The full guide to how features are structured, and the rules every feature follows | |
How the Backstop REST API behaves, and Backstop's standard records, fields and errors | |
Repository-wide commands for Python services |