Clientell MCP documentation
Clientell MCP is a hosted Model Context Protocol server that gives an MCP-compatible AI client a structural index of your Salesforce org, plus tools for the systems the work is discussed in. This page documents what it holds, what it will not do, how to set it up, and every way it fails.
Salesforce and Slack are the connectors running today. Gmail and Jira exist but arrive by manual push rather than continuous sync. Everything else named in the connector reference is planned, which means it appears in our scope documents and has no ingestion pipeline yet. This page publishes no capability for a planned connector.
Setup is self-serve. Claude Code is the client we build and verify against, and the worked example in Setup is its. Other MCP clients implement the same surface and should register the server with their own add-server syntax, but we have not run those installs ourselves.
Want the shorter version of what it does? Start on the product page.
Three parts, and they behave differently.
An MCP server is a service that gives an AI client a fixed set of tools it can call on your behalf. Ours runs on Clientell’s infrastructure, not your machine: nothing is downloaded, no process runs locally, and removing it is one command. Almost every question about the product resolves to which of these three parts you are talking about.
A structural index, refreshed on demand.
Objects, fields, flows, Apex, validation rules, profiles and permission sets, plus the references between them. It answers structural questions. It holds no record contents.
Record data, read at the moment you ask.
Record lookups run on demand through your own authenticated Salesforce CLI session. That data is not copied or stored by Clientell, and it is never part of the index.
What you explicitly ask it to remember.
Entries written by you or by the model, with corrections, versioning and time-based expiry. Nothing is inferred from your activity and stored on its own. See Memory.
Connector tools are reachable directly over MCP. For Salesforce and Slack, your client invokes them as ordinary MCP tools — there is no separate agent-only surface you have to go through to reach them.
What this does, and what it does not do.
The right-hand column is not a list of missing features. Each line is a deliberate design decision, and several of them are the reason the left-hand column can be trusted.
What it does
- Indexes Salesforce metadata and the references between components, and answers structural questions from that index.
- Reads live Salesforce records on demand through your own authenticated CLI session.
- Drafts a change plan for Salesforce work, naming what the change would affect.
- Exposes its tools to any MCP-compatible client over Streamable HTTP with bearer auth.
- Isolates each workspace from every other workspace.
- Stores what you explicitly ask it to remember, with corrections, versions and expiry.
What it does not do
- Store Salesforce record contents, Slack message bodies, or the bodies of anything indexed from Gmail or Jira.
- Deploy to Salesforce, or run a merge. It plans; you run the sf commands yourself.
- Hold the Salesforce session your record reads and changes run under — that is your own CLI session, and we never see it. The separate token we hold for metadata indexing cannot read your customer records.
- Enforce individual Salesforce record-level or field-level permissions on graph queries. See Security and isolation.
- Guarantee a human-approval step for write-capable connector tools. That comes from your MCP client.
- Ingest continuously in the background. Content is refreshed on demand.
Map, not mirror.
The Context Graph is an index of your org’s structure: which components exist and which reference which. It is what lets a client name the flows that would break before you make a change, rather than guessing your schema.
Names, identifiers and relationships. Not record contents.
The graph answers which — which flow touches which field, which profile reaches which object. That is still data, and we say so rather than claim we hold none. What it does not hold: Salesforce record contents, Slack message bodies, and the bodies of anything indexed from Gmail or Jira. Those stay in their source systems.
Read-only, and the database enforces it.
Not read-only by convention. Queries against your org’s graph run through the database’s read-only execution path, so a write cannot be issued even by mistake — that graph stays a faithful index of Salesforce and nothing else.
Every change to Salesforce goes through your own CLI.
Changes run as sf commands on your machine, under your credentials, with your permissions — Clientell never sees that session. Clientell does hold a token for the metadata-indexing connection, scoped narrowly: it cannot read your customer records.
Objects, fields, flows, Apex, validation rules, profiles and permission sets, plus the references between them. Structural questions — which flow writes to a field, which profiles can edit it, what breaks if it is deleted — are answered from this index alone, without reading a single record.
How changes reach SalesforceThey do not, from our side. A tool drafts a change plan and checks it against the graph’s dependencies. You run the resulting sf commands yourself, on your machine, under your own credentials and your own permissions.
Refreshed on demand, not continuously.
This determines how much you should trust an answer about something that changed this morning, so it is stated on its own rather than folded into a footnote.
Graph content is refreshed on demand, not through continuous background ingestion. Between refreshes, it can lag behind the connected source systems. Salesforce live-record lookups are separate from the metadata index — they run on demand through your own authenticated Salesforce CLI session, and that live record data is not copied or stored by Clientell.
A field created minutes ago may not be in the graph until the next refresh, and an answer that says a field does not exist may be answering about the index rather than about your org. If you have just changed metadata and the answer looks stale, refresh before you conclude anything.
Where the boundary actually is.
Read this section before you connect a production org. The isolation guarantee and its limit are stated together because either one on its own is misleading.
Private, org, and shared graph scopes use separate graph destinations. Workspace-level isolation prevents access across workspaces. Within a workspace, anyone with workspace access can query the shared graph. These queries do not enforce each person’s individual Salesforce record-level or field-level permissions. Treat information in the shared graph as accessible to everyone with workspace access, and include only information appropriate for that audience.
If a field is in the shared graph, anyone with access to the workspace can ask about its structure, regardless of whether they could see that field in Salesforce. Scope your workspace membership accordingly.
Slack includes write-capable tools. A direct MCP invocation can execute a write action immediately, without a separate human-approval step enforced by the MCP layer. Any confirmation behavior comes from your MCP client’s own tool-approval settings (check Claude Code, Cursor, or your client’s docs), not from a Clientell-side guarantee. Salesforce record changes follow a different workflow: the agent drafts a change plan, and you run the sf CLI commands yourself under your own Salesforce credentials.
Stored credentials are encrypted using AES-256-GCM, with a fresh nonce for each storage write. Salesforce record access is not among them — records are read and changed through your own CLI session on your own machine, which Clientell never sees. What is held on the Salesforce side is the token for the metadata-indexing connection, scoped narrowly: it cannot read your customer records.
One verified, the rest compatible.
This is a standard Streamable HTTP MCP server exposing tools and instructions, with bearer auth. That is the surface every major MCP client implements, so it should register the same way using their own add-server syntax.
Verified. Run end to end against this server. The worked example in Setup is this client, and every command on this page assumes it.
Compatible. They implement the same MCP surface, and nobody at Clientell has run them end to end against this server. Treat them as expected to work rather than tested.
Clients not named here are not excluded. Any client implementing Streamable HTTP MCP with bearer auth can connect; this list is what we have looked at, not an allowlist.
Three stages.
Setup is self-serve. You connect your systems in the Clientell app, the first index is built, and then you register the server with your MCP client.
Connect
Sign in and authorise the connectors you want through OAuth. Salesforce is the one that matters first.
Build the graph
The first index of your org is built. This is the slow one, and it runs once before anything can be queried.
Query
Register the server in your MCP client and ask a question in plain language. The client picks the tools.
Claude Code, installed and signed in
claude --versionExpect — a version string.
If missing — install it from Anthropic’s quickstart. We do not host our own installer.
The Salesforce CLI
sf --versionExpect — a line starting @salesforce/cli/.
If missing — install it from Salesforce. sf is not needed for the install, and metadata and graph questions are answered without it. It is needed for live-record access and for executing any change to your org, because both of those run through your own CLI.
An org you are authenticated to
sf org listExpect — at least one org, not marked (expired).
If missing or expired — run sf org login web. An expired session still appears in the list and still fails at query time.
A Clientell workspace
Where — app.clientell.ai. Sign in, then authorise Salesforce through OAuth. Your access token for the MCP server comes from the same place.
Note — the token is a bearer credential scoped to your Clientell workspace. It is not a Salesforce credential and cannot be used to reach Salesforce.
Node.js. It is a prerequisite of Claude Code, not of ours — our server is hosted and runs no process on your machine. If Claude Code works, you have everything you need from that side.
Connect your systems
Sign in and authorise each system you want through OAuth. Salesforce is the one to do first — the graph is built from it, and the other connectors index references into work that happens around it.
Authorise only what you need. A connector you have not authorised contributes nothing to the graph and exposes no tools. Before you authorise Slack, read the write-action note in Security and isolation.
Let the first index build
The first build reads your org’s structure and writes the graph. It runs once, before anything can be queried, and it is the slowest step in setup. A large org takes longer than a developer org.
You can check where a workspace is up to from your client, once the server is registered, with clientell_onboarding_status. If a query returns nothing for an object you know exists, check this before assuming the answer is wrong.
Register the server with your client
Replace <YOUR_TOKEN> with the token from your workspace — keep the word Bearer and the space after it — then paste the whole thing into your terminal.
claude mcp add-json clientell '{
"type": "http",
"url": "https://mcp.clientell.ai/mcp",
"headers": { "Authorization": "Bearer <YOUR_TOKEN>" },
"timeout": 180000
}' --scope userThis means the entry was saved. It does not mean the server works. Claude Code writes the configuration without testing the URL or the token — a wrong hostname and an expired token are both accepted here and both fail later. Verify it worked is where you find out.
Line by line — hover or tab through to highlight each piece above
- claude mcp add-json
- Claude Code’s own command for registering an MCP server from a JSON block. Nothing of ours runs here — you are editing Claude Code’s configuration.
- clientell
- The name you will see in
/mcpand in tool names. It is yours to pick; we useclientellthroughout this page, and every other command here assumes you did too. - '{ … }'
- The server entry, in single quotes so your shell passes it through untouched. Four keys: the first three are required, and
timeouthas a default, so it is recommended rather than mandatory. - "type": "http"
- Says this is a remote server reached over HTTP. Leave it out and Claude Code reads the entry as a local command to run, finds none, and skips the server silently — it will not appear in
claude mcp listat all. - "url": ".../mcp"
- The single endpoint the server answers on. The
/mcpat the end is part of the address, not decoration. Drop it and you get a “not found” error that reports only the hostname, which makes the cause hard to see. - "headers"
- Your access token, sent on every request. Claude Code does not trim it — a stray space or newline from copying is sent as part of the token and the server rejects it.
- "timeout": 180000
- Three minutes, in milliseconds, as the ceiling for a single tool call. The default cuts a request off after 60 seconds, and a first query against a cold org graph can take longer than that. Values below
1000are ignored entirely. - --scope user
- Makes the server available in every project. Without it Claude Code uses its default scope, which binds the server to whichever directory you happened to be in — start Claude anywhere else and you will be told no MCP servers are configured. Scope is fixed when you add the server; changing it means removing and re-adding.
Prefer flags to JSON?
Same server, flag by flag. This form is easier to read, but it has no --timeout flag, so it cannot set the timeout — you have to add that afterwards by hand.
claude mcp add --transport http clientell https://mcp.clientell.ai/mcp \
--header "Authorization: Bearer <YOUR_TOKEN>" \
--scope userThen open ~/.claude.json, find the clientell entry under the top-level mcpServers, and add "timeout": 180000 to it. If you would rather not hand-edit that file, use the JSON form above — that is why it is the primary path.
The same server entry, in each client’s own configuration format. We have not run these installs ourselves — see Supported clients. If one of them needs a different shape than what is below, that is worth telling us about.
Claude DesktopCompatible · not verified by us
Config ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"clientell": {
"type": "http",
"url": "https://mcp.clientell.ai/mcp",
"headers": { "Authorization": "Bearer <YOUR_TOKEN>" }
}
}
}Restart Claude Desktop after editing. It reads this file only at launch.
Unverified — confirm this against Claude’s current custom-connector documentation before relying on it. Nobody at Clientell has run this install end to end.
CodexCompatible · not verified by us
Config ~/.codex/config.toml
[mcp_servers.clientell]
url = "https://mcp.clientell.ai/mcp"
http_headers = { Authorization = "Bearer <YOUR_TOKEN>" }Codex reads remote MCP servers from its TOML config. Check its own documentation for the key names on your version — they have moved between releases.
CursorCompatible · not verified by us
Config ~/.cursor/mcp.json
{
"mcpServers": {
"clientell": {
"url": "https://mcp.clientell.ai/mcp",
"headers": { "Authorization": "Bearer <YOUR_TOKEN>" }
}
}
}A project-local .cursor/mcp.json works too, and scopes the server to that repository instead of your whole account.
VS CodeCompatible · not verified by us
Config .vscode/mcp.json
{
"servers": {
"clientell": {
"type": "http",
"url": "https://mcp.clientell.ai/mcp",
"headers": { "Authorization": "Bearer <YOUR_TOKEN>" }
}
}
}Note the top-level key is servers, not mcpServers. VS Code differs from the others here and it fails quietly if you use the wrong one.
"Added" and "working" are two different things.
Registering the server saved a configuration file. This is where the token gets used and the hostname gets resolved for the first time.
The fast check
Looks at one server, so it returns quickly.
claude mcp get clientellIf something is wrong, recent versions of Claude Code print an Issue: line with the HTTP status and the server’s own error text. That line is the most useful thing on this page when you are stuck — take it to Troubleshooting.
The full check
Health-checks every MCP server you have configured, so it can take 30–60 seconds — longer if one of your other servers is hung.
claude mcp listAnd when it is not working, the same line ends differently: clientell: https://mcp.clientell.ai/mcp (HTTP) - ✘ Failed to connect — <reason>
Every status this can report
Ready to use.
The connection opened but the tool list did not come back. Run claude mcp get clientell for the detail.
The server is reachable and wants a credential it did not get.
No usable response. A reason usually follows the dash.
The attempt threw. Claude Code appends no detail to this one.
A project-scoped server awaiting approval. You will not see this if you used --scope user.
Not an error. Claude Code remembered the tool list from a previous session and will connect when you first ask something.
On older Windows consoles the marks render as √ and × instead of ✔ and ✘. Same meanings.
Inside a session
Start Claude Code and type /mcp. You will see clientell listed with its tools.
A 5xx or a dropped connection is retried automatically with backoff, so transient failures often clear themselves. Authentication and not-found errors are never retried — those need a configuration change, so they fail instantly and stay failed.
Ask it something you would otherwise open six tabs for.
Open your client in any directory and ask a question the way you would ask a colleague. You do not call the tools by name; the client picks them.
- What writes to Opportunity.Amount?Flows, Apex, validation rules and processes that touch one field — the question that usually means reading four setup screens.
- What breaks if I delete Account.Custom_Segment__c?Every reference to a field, before you find them one deploy error at a time.
- Show me every flow on Case that fires after save.Ordering and overlap on one object, in one list.
- Which profiles can edit Contact.Email?Field-level security resolved across profiles and permission sets.
Answers like these read metadata only — names, identifiers and relationships. The index holds no record data, so nothing in the answer came from your customers’ rows, and nothing in your org was changed. If you then decide to change something, the client proposes it and you run it through your own sf CLI, on your machine, under your credentials.
A first question against a cold graph can take a while. If it runs past about two minutes, Claude Code moves it to a background task and tells you so — it has not hung. If an answer comes back marked as truncated, it is incomplete; narrow the question and ask again rather than trusting the count.
The failure that returns an answer instead of an error.
Most admins are authenticated to more than one org. If the client answers about the wrong one, nothing errors — you just get a confident answer about your sandbox.
Two behaviours are built into the server, and both are deliberate:
- If it was not told which org you are working in, it says so in its answer rather than picking one for you.
- If the org you selected and the org your token belongs to resolve to different indexes, it refuses the request instead of choosing between them.
Set the org for the session with clientell_set_active_org. It happens in the conversation, not in a config file — you ask the client to switch orgs and it calls the tool. To see what you are authenticated to locally:
sf org listWhat is connected, and how current it is.
A connector is a source system the graph indexes. Each one below carries its real status. Anything under Planned has no ingestion pipeline, so this page publishes no access level and no capability for it.
| Connector | Access | Status | What the index holds | Notes |
|---|---|---|---|---|
| Salesforce | Read | Shipped | Objects, fields, flows, Apex, validation rules, profiles and permission sets, plus the references between them. | Metadata index only. Record contents are never stored; they are read live through your own authenticated sf CLI session. Changes are drafted as a plan that you run yourself. |
| Slack | Read + write | Shipped | Index-level references to channels and threads — which thread a change was asked for in. Not message bodies. | Includes write-capable tools. See the write-action note below the table before you enable it. |
| Gmail | Read | Manual push | Index-level references to mail threads. Not message bodies. | Manual push today, not a continuous sync. Content appears only after a push, so the index can lag your mailbox indefinitely. |
| Jira | Read | Manual push | Index-level references to issues. Not issue bodies. | Manual push today, not a continuous sync. Content appears only after a push, so the index can lag your project indefinitely. |
Planned
Named in our scope documents. No ingestion pipeline exists for these yet, so this page publishes no access level, no capability and no date for any of them.
- HubSpot
- GitHub
- Google Drive
- SharePoint
- Notion
- Microsoft Teams
- Outlook Mail
- Outlook Calendar
- Google Calendar
- Shipped
- A real ingester exists and runs. Queryable today.
- Manual push
- An ingester exists, but content arrives by manual push rather than continuous sync.
- Planned
- Named in our scope documents. No ingestion pipeline exists yet.
- Read
- Contributes to the index and can be queried. Exposes no tool that changes anything in the source system.
- Read + write
- Also exposes tools that can perform an action in the source system. Read the write-action note below before enabling one.
Shipped: 2 connectors. Manual push: 2 connectors.
Slack includes write-capable tools. A direct MCP invocation can execute a write action immediately, without a separate human-approval step enforced by the MCP layer. Any confirmation behavior comes from your MCP client’s own tool-approval settings (check Claude Code, Cursor, or your client’s docs), not from a Clientell-side guarantee.
Salesforce record changes follow a different workflow: the agent drafts a change plan, and you run the sf CLI commands yourself under your own Salesforce credentials.
Connector tools are invoked directly over MCP. For Salesforce and Slack, your client calls them as ordinary MCP tools with no separate agent surface in between.
Seven tools do the Salesforce work.
These are the context and planning tools for Salesforce work: they answer questions about the org and draft change plans, and you run the resulting sf commands yourself. Running /mcp in your client will show more than these — setup and account plumbing, listed underneath, plus the connector tools described in Connectors.
- search_salesforce_metadataAnswers structural questions about the org — objects, fields, flows, rules, what depends on what, and who can edit it. Curated audit sections come back from here too.
- get_salesforce_best_practicesFetches the vetted guidance for an admin task — building a Flow, writing a validation rule, loading data — before you do it.
- build_or_fix_salesforce_flowDrafts a new Flow from a plain-language description, or diagnoses one that errors at runtime and proposes a fix. It never deploys — you get a plan, and you run it.
- search_salesforce_docsLooks something up in Salesforce's own published documentation, and cites the guide it came from.
- generate_salesforce_org_reportRenders an impact, audit or access report and hands back the document itself.
- search_work_contextFinds the email, Slack or Jira thread a change was asked for in — the context that lives outside Salesforce.
- merge_duplicate_recordsFinds duplicate Accounts, Contacts or Leads and builds a merge plan, checking every Id against the org's own answer first. It plans and it refuses — it never merges. You run the merge.
Registered and visible in /mcp, but they do not answer questions about your org. Listed here so an unfamiliar name in that panel is not a surprise.
- clientell_onboarding_statusReports where your workspace is in setup — what is connected and whether an index has been built.
- clientell_set_active_orgSets which Salesforce org the session is working against. See Picking the right org.
- clientell_billing_statusReports the billing state of your workspace.
- clientell_delete_my_dataDeletes the data held for you. See Uninstall and data deletion.
- record_work_contextWrites an entry to memory. This is the explicit write described in Memory — nothing is stored without a call like this one.
One person, several identifiers.
The same person is a User record in Salesforce, a member ID in Slack and an account ID in Jira. Clientell can associate identities belonging to the same person across connected systems.
Association is something the system can do, not something it does completely or with verified accuracy for every person in every org. Coverage depends on what the connected systems expose, and identities that share no common signal may not be associated at all.
Treat an association as a useful hint rather than a verification of who someone is. Do not use it as the basis for an access decision.
What it remembers, and for how long.
Memory is a set of entries that persist between conversations. An entry is stored only when you or the model explicitly writes one, through record_work_context.
- 01
Written
A fact enters memory only when you or the model explicitly writes it. Nothing is inferred from your activity and stored on its own.
- 02
Corrected
Writing a correction supersedes the earlier value. The earlier version is retained as a version rather than overwritten in place.
- 03
Versioned
Each write is a version, so what the model believed at a point in time stays inspectable rather than being flattened into the latest value.
- 04
Expired
Entries carry a time-based expiry. Once past it, an entry stops being returned to the model.
Memory does not learn your workflow on its own — nothing is inferred from your activity and stored without an explicit write. Versioning keeps earlier values inspectable; it is not a rollback feature, and this page does not claim you can restore an earlier version.
Find what you are seeing, not what is wrong.
Before anything else, ask the network a direct question. This tells you whether the address is reachable at all, which splits the problem in half.
curl -I https://mcp.clientell.ai/mcpOn Windows PowerShell, use curl.exe — plain curl is an alias for something else and takes different arguments.
✘ Failed to connect — HTTP 401
The token is missing, expired, or not one this server accepts.
FixThe most common cause is invisible: a leading or trailing space on the pasted token. Claude Code notices and warns Leading or trailing whitespace in: headers.Authorization — but it does not trim it, and sends the value exactly as written. Remove the server, re-copy the token carefully, and add it again.
Otherwise, get a fresh token from your workspace and re-add. A rejected token is final — Claude Code reports the connection as failed rather than falling back to a browser sign-in.
Claude Code warns about whitespace in headers.Authorization
Your token has a space, tab or newline at one end. This comes from copying out of a web page and it is one of the most common ways this install fails.
FixRemove and re-add the server with a clean paste. Claude Code names the field but never echoes the value, so you cannot correct it by reading the warning.
claude mcp remove clientell -s userMCP endpoint not found when you select the server in /mcp
The URL in your configuration does not point at the endpoint. The message reports only the hostname — never the path — which hides the actual cause.
FixCheck that your URL ends in /mcp. The full address is https://mcp.clientell.ai/mcp. Dropping that suffix is the usual reason for this message.
! Connected · tools fetch failed
The connection opened, but the request for the tool list did not come back. The server is reachable; something failed after that.
FixRun claude mcp get clientell and read the Issue: line — it carries the HTTP status and the server’s error text. Read that output and redact anything sensitive before you share it with anyone, here or elsewhere.
✘ Failed to connect — HTTP 421, or every single request fails identicallyOurs to fix
The server's DNS-rebinding guard rejected the request because its allowed-hostname list does not include the hostname it is being served under. It is a deployment misconfiguration on our side.
FixNothing you can do from your machine, and nothing you should have to. Tell us and we will correct the deployment. If you are running the server yourself, the allow-list has to name the hostname in both bare and with-port forms — and it must never be emptied or disabled to clear a 421.
✘ Failed to connect — ConnectionRefused
Nothing is listening at that address.
FixCheck the hostname first. If you are running the server yourself, the port is 8088. An 8089 in older notes is stale.
You added the server, but claude mcp list does not show it
The entry has a url but no "type", so Claude Code read it as a local command to run, found none, and skipped it without reporting anything.
Add "type": "http" to the entry, or remove the server and re-add it with the JSON command in Stage 3, which includes it.
No MCP servers configured in a project where you know you added it
The server was added at the default scope, which binds it to the single directory you were in when you ran the command.
FixRemove it and add it again with --scope user. Scope is fixed when the server is added; re-running add without removing first will fail.
MCP server clientell already exists in user config — right after you removed it
The remove did not take. claude mcp get prints the scope as a sentence (“User config (available in all your projects)”), but remove -s only accepts the short form.
Pass the short form exactly:
claude mcp remove clientell -s userEverything times out after about 60 seconds
Claude Code's default per-request limit. A first query against a cold org graph can exceed it.
FixSet a per-server timeout — the JSON command in Stage 3 does this for you with "timeout": 180000. Values below 1000 are ignored, so a small number is the same as no number.
The answer looks short, or a count seems too low
Large results get cut. The server caps its own output first and marks the result as truncated, reporting the true row count alongside the rows it returned. Claude Code also truncates very large tool output on its own, silently.
FixNarrow the question. If the result says it was truncated, treat the answer as incomplete — say so out loud rather than acting on the number.
A generated report ends mid-sentence
The document exceeded the size cap. The result carries a note naming how many characters were dropped.
FixRe-run with a narrower scope. A truncated document is missing its closing structure and must never be circulated as finished.
An answer is missing something you know exists in the org
Most often the index has not been refreshed since that component was created. Graph content is refreshed on demand, not continuously.
FixRefresh and ask again. Check clientell_onboarding_status if you are not sure whether the first build has finished. See Freshness.
The org index does not exist, or the request is refused because two orgs disagree
Either no index has been built for that org yet, or the org you are working in and the org your token belongs to point at different indexes. In the second case the server refuses rather than picking one.
FixBoth errors name what was looked for. Set the org explicitly with clientell_set_active_org, and see Picking the right org. If an index has never been built for that org, send us the error text.
A connector is authorised but nothing from it appears
For Gmail and Jira this is expected between pushes: those arrive by manual push rather than continuous sync, so content appears only after a push.
FixCheck the connector’s status in Connectors before treating this as a fault. If the connector is listed as Planned, nothing will ever appear — there is no ingestion pipeline for it.
sf org list shows your org as expired, or sf commands start failing
Your Salesforce session lapsed. That session lives on your machine and we never see it, so we cannot refresh it for you.
Fixsf org login webclaude plugin marketplace add returns a 404
You are following instructions from somewhere else. There is no Clientell plugin marketplace.
FixUse the setup on this page. It is the only supported path.
Two separate things.
Removing the server from your client and deleting the data held for you are different actions. Doing the first does not do the second.
claude mcp remove clientell -s userThat removes the server’s configuration entry. No Clientell process was installed on your machine, but setup involved pasting a token into a terminal, so shell history and your client’s own logs may keep traces this command does not touch. -s takes the short scope name — user, project or local — and must match the scope you added it at.
Ask your client to call clientell_delete_my_data. This is the tool that deletes the data held for you, and it is separate from removing the server — a client with the server removed still has a workspace behind it.
Deleting data does not revoke an OAuth authorisation. Revoke each connector from your workspace, or from the source system’s own connected-app settings, if you want the authorisation gone as well.
Short answers to the questions this page gets asked.
Each answer matches the section that owns the subject. Where a section states a limit, the answer here restates the limit.
Does Clientell store our Salesforce record data?
No. The graph indexes names, identifiers, metadata and relationships, never record contents. Record data is read on demand through your own authenticated Salesforce CLI session and is not copied or stored by Clientell.
Does the graph enforce each person's Salesforce permissions?
No, and this is the single most important limit on this page. Workspace isolation prevents access across workspaces, but within a workspace anyone with workspace access can query the shared graph, and those queries do not enforce individual Salesforce record-level or field-level permissions. Treat information in the shared graph as accessible to everyone with workspace access.
Can the server change something in my Salesforce org on its own?
No. Salesforce work is drafted as a change plan, and you run the sf CLI commands yourself under your own credentials — Clientell never sees that session. Clientell does hold a token for the metadata-indexing connection, scoped narrowly: it cannot read your customer records or change anything for you. Note that this is specific to Salesforce — Slack is different, see the next answer.
Can it perform a write in Slack without asking me?
Slack includes write-capable tools, and a direct MCP invocation can execute a write action immediately without a separate human-approval step enforced by the MCP layer. Any confirmation prompt you see comes from your MCP client’s own tool-approval settings, not from a Clientell-side guarantee. Configure approvals in your client if you need them.
How current is the graph?
Graph content is refreshed on demand, not through continuous background ingestion. Between refreshes it can lag behind the connected source systems. Salesforce live-record lookups are separate and always run against your org at the moment you ask.
Which connectors actually work today?
Salesforce and Slack are shipped. Gmail and Jira exist but arrive by manual push rather than continuous sync. Everything else in the connector section is planned, which means it is named in our scope documents and has no ingestion pipeline yet.
Which MCP clients is this verified against?
Claude Code. It is a standard Streamable HTTP MCP server with bearer auth, so any MCP-compatible client should connect using its own add-server syntax, but we have not run those installs ourselves. Treat anything other than Claude Code as expected to work rather than tested.
Are connectors available directly over MCP, or only inside your agent?
Directly over MCP. For the shipped connectors, Salesforce and Slack, your client invokes connector tools as ordinary MCP tools. There is no separate agent-only surface you have to go through.
What does the server remember between conversations?
Only what you or the model explicitly writes. Entries can be corrected, each write is kept as a version rather than overwriting the last, and entries carry a time-based expiry. Nothing is inferred from your activity and stored on its own.
How are stored credentials protected?
Stored credentials are encrypted using AES-256-GCM, with a fresh nonce for each storage write.
How do I remove it and delete my data?
Removing the server from your client is one command, and it removes that server’s configuration entry. No Clientell process was installed on your machine, though setup involved pasting a token into a terminal, so shell history and client logs may keep traces that command does not touch. Deleting the data held in your workspace is a separate action — see Uninstall and data deletion.
Changes to this document.
Material changes to what this page claims. Wording fixes and typography are not listed.
First published. Absorbs the install documentation, which now redirects here. Adds the connector reference, the security and isolation model, identity resolution, memory, and the boundary ledger.
Where this page states a capability, it describes what the software does. It makes no claims about time saved, teams using it, or results you should expect. Connectors without a shipped ingestion pipeline are listed as planned and carry no capability claim.