What Agent-Native CRM Actually Means - Relaticle             [  Back to blog ](https://relaticle.com/blog) 

 ![What 'Agent-Native CRM' Actually Means](https://relaticle.com/storage/ink/01M17KWER35G1NK6TDDS6KQSZN.png)Agent-native CRM is not a product category defined by marketing. It is a set of verifiable architectural properties: an AI agent can do everything a human can do in the UI, writes are governed by a safety model built for agents rather than borrowed from human permissions, self-hosted and cloud deployments carry identical agent capability, the product's own surfaces speak machine-readable formats to agents, and the agent tooling ships as a first-party part of the product's own release, not a bolted-on integration. Every one of those five properties has a concrete test you can run against any CRM in about five minutes. "Has an MCP server" is not on the list, because it is table stakes now. [Twenty documents a first-party MCP server](https://docs.twenty.com/developers/extend/capabilities/mcp), including self-hosted configuration, checked September 22, 2026. Having one tells you nothing about whether it can set a custom field, whether it asks before it deletes 50 records, or whether any of it works if you self-host.

This post lays out the checklist, explains how to run each test yourself, and scores Relaticle against it, including the places it falls short today.

![The five properties of an agent-native CRM: full write surface, safety model, deployment parity, machine-readable surfaces, first-party tooling](https://relaticle.com/storage/ink/01M09E1Z3ANQT32PBZFDFZ054B.png)

[](#property-1-full-write-surface-for-agents "Permalink")Property 1: full write surface for agents
--------------------------------------------------------------------------------------------------

The test: create a custom field in your CRM that exists nowhere else, one your engineering team didn't anticipate, then ask the agent to set it. If the agent says "I can't do that" or silently ignores the field, the write surface is a subset of the UI, and every custom field your team adds becomes something your agent quietly can't touch.

In Relaticle, custom fields are not hardcoded into the agent tooling. `CustomFieldsSchemaDescriber` (`packages/Chat/src/Services/Tools/CustomFieldsSchemaDescriber.php`) builds a per-tenant description of every active custom field for chat, including type, shared format hints, and option labels for choice fields, and inlines it into the tool schema the model sees. On the MCP side, `BaseCreateTool` and `BaseUpdateTool` (`app/Mcp/Tools/`) accept a `custom_fields` object validated by the same `App\Rules\ValidCustomFields` rule used by chat. Add a field in the Custom Fields admin UI and both surfaces expose it immediately, no code change required.

File handling now has a different boundary. The retired FileUpload custom-field type cannot be written. MCP can upload supported files through `upload-file`, using a public HTTPS URL, Base64 content, or a completed signed upload. It returns Markdown for rich-editor fields. The upload limit is 10 MB, with 60 calls per workspace per hour. JSON tools therefore do support file workflows without carrying raw binary bodies in every tool call.

[](#property-2-a-safety-model-designed-for-agents-not-borrowed-from-humans "Permalink")Property 2: a safety model designed for agents, not borrowed from humans
---------------------------------------------------------------------------------------------------------------------------------------------------------------

The test: use disposable records in a test workspace. Request a batch deletion and inspect whether the client asks for approval before execution. A safety model built for humans (a delete button with a confirm dialog) doesn't map cleanly onto an agent that can issue the same request a thousand times a minute. An agent-native CRM needs two distinct answers: one for a conversational agent acting on a user's behalf in real time, and one for a scoped integration acting autonomously.

Relaticle answers this with two different mechanisms for two different trust levels. Chat writes never touch the database directly. Every create, update, or delete proposed in conversation becomes a `PendingAction` row (`packages/Chat/src/Models/PendingAction.php`) with a `pending` status, an expiry, and the diff the user is being asked to approve; nothing executes until a human clicks approve. MCP is the other half ([how to connect a client](https://relaticle.com/blog/how-to-connect-claude-to-your-crm-with-mcp)): a scoped integration authenticated with an OAuth token or personal access token acts directly, no approval step, because the trust boundary was already crossed at token-issuance time, not at write time. Every MCP tool that performs a destructive action declares an explicit destructive hint in its MCP tool annotations (`app/Mcp/Tools/Company/DeleteCompanyTool.php` and its four siblings for people, opportunities, tasks, and notes) so any MCP client, human or agent, can see which calls may change or remove data before it makes them. Token abilities are checked per-call in `ChecksTokenAbility`, and OAuth clients get exactly one scope, `mcp:use`, deliberately coarse because the finer-grained boundary is which team's data the token is bound to, not which verbs it can call.

This is the property where "has an MCP server" tells you the least. A server can expose write tools with no approval step and no destructive annotations at all, and you'd only find out by testing it, not by reading a feature list. Run this test against any CRM's MCP server: ask it to delete something, and see whether the tool call itself declares that it's destructive before you approve the client to use it.

![A Relaticle chat pending-action card showing the old to new diff for an opportunity update before the write commits](https://relaticle.com/storage/ink/01M09G7HW5H8W6X736JJVEGT6Y.png)

[](#property-3-deployment-parity "Permalink")Property 3: deployment parity
--------------------------------------------------------------------------

The test: point the same agent workflow at a self-hosted instance with no internet-routed cloud dependency, and see what breaks. If chat degrades to a stub, or MCP just isn't there, the agent capability was cloud infrastructure wearing a CRM's branding.

Relaticle's chat and MCP routes are gated by `EnsureHostedWorkspaceAccess`, which delegates to `HostedWorkspaceAccess::allows()` (`app/Services/Billing/HostedWorkspaceAccess.php`). That gate checks a `Billing` feature flag first, and returns `true` unconditionally when it's off, which is the self-hosted default. There's no separate "self-hosted tier" of the agent tooling; it's the same billing gate the rest of the product uses, off by default outside the hosted product. `config/ai.php` configures Ollama (`OLLAMA_BASE_URL`, defaults to `localhost:11434`) and a generic `selfhosted` OpenAI-compatible provider alongside the hosted providers, so the model backing chat can run entirely on infrastructure you control. Chat and MCP ship in the same application. Self-hosted chat still needs a configured, compatible model provider.

Our own facts entry for Twenty used to read "marketed for Cloud workspaces," phrasing lifted straight from the vendor's pricing page. [Twenty's MCP documentation](https://docs.twenty.com/developers/extend/capabilities/mcp) includes self-hosted configuration, so we corrected the entry. That is exactly the kind of claim the checklist exists to force you to verify rather than take on faith, ours included.

[](#property-4-agent-legible-surfaces "Permalink")Property 4: agent-legible surfaces
------------------------------------------------------------------------------------

The test: request a documentation page with `Accept: text/markdown` instead of `text/html`, and see what comes back. If you get the same HTML with the same navigation chrome and marketing script tags an agent has to parse around, the surface wasn't built with agents as a first-class consumer.

Relaticle's `/developers` and `/help` routes run through `Spatie\MarkdownResponse\Middleware\ProvideMarkdownResponse` (`packages/Documentation/routes/web.php`). This is real content negotiation, not a static markdown mirror: the middleware inspects the `Accept` header, converts the HTML response to markdown on a cache miss, and returns it with `Content-Type: text/markdown`, a `Vary: Accept` header, and an estimated token count. An `/llms.txt` route lists the available documentation for agent discovery. It does not establish a search-ranking benefit.

[](#property-5-first-party-versioned-with-the-product "Permalink")Property 5: first-party, versioned with the product
---------------------------------------------------------------------------------------------------------------------

The test: check whether the MCP server or agent tools live in the product's own repository and ship with its own releases, or whether they're a separate package, a community wrapper, or something that can silently drift out of sync with the core product's version.

Relaticle's MCP server registers 39 tools, checked September 22, 2026. They live in `app/Mcp/`, the same directory tree as the CRM's Filament resources and Eloquent models, registered on a single `RelaticleServer` class versioned at `2.0.0`. The chat package (`packages/Chat/`) has no `composer.json` of its own; it's autoloaded straight from the root `composer.json` under the `Relaticle\Chat` namespace, which means it has no independent version number to fall out of sync, no separate release cadence, and no possibility of a chat feature announcement that describes a version of the tools nobody has installed yet. Whatever commit ships the CRM ships the agent tooling.

[](#scoring-relaticle-honestly "Permalink")Scoring Relaticle honestly
---------------------------------------------------------------------

Tracing the current write path reveals a board-ordering gap and a separate boundary around retired field types.

The first is board ordering. Moving an opportunity to a different pipeline stage works from chat or MCP, because stage is itself a custom field and flows through the same bridge as every other custom field. But reordering a card within a stage, the `order_column` value the Kanban board uses for its decimal-position drag-and-drop, is not in `UpdateOpportunityTool`'s schema and not in the `UpdateOpportunity` action's allowed attribute list. An agent can tell you a deal moved to "Negotiation." It cannot currently put it above or below a specific other deal in that column. That's UI-only today.

The retired FileUpload type remains unavailable for writes. Supported attachments use upload tools and rich-editor fields. This is a field-type boundary, not a general inability to upload files.

| Property | How to test it |
|---|---|
| Full write surface | Add a custom field, ask the agent to set it |
| Safety model for agents | Request a deletion of disposable test records and inspect approval behavior |
| Deployment parity | Run the same workflow against a self-hosted instance with no cloud dependency |
| Agent-legible surfaces | Request docs with `Accept: text/markdown` |
| First-party, versioned with the product | Check whether the tooling ships in the product's own repo and release |

| Property | Relaticle |
|---|---|
| Full write surface | Active fields are discovered dynamically. Retired FileUpload fields are read-only; supported attachments use upload tools and rich-editor fields. |
| Safety model for agents | Chat proposes, a human approves (`PendingAction`); MCP writes directly under a scoped token, destructive tools carry an explicit annotation |
| Deployment parity | The same chat and MCP code ships self-hosted. Chat requires a configured compatible provider; Ollama is a supported configuration. |
| Agent-legible surfaces | Real content negotiation returns markdown with token-count headers; `/llms.txt` served at the root |
| First-party, versioned with the product | The MCP tools and chat package live in the CRM's own repository with no separate version to drift |

Board ordering remains a UI-only operation. File workflows require the supported upload and rich-editor path. Evaluate those specific operations against your workflow.

[](#the-test-to-run-on-any-vendor "Permalink")The test to run on any vendor
---------------------------------------------------------------------------

None of the five properties above require trusting a vendor's word. Each one is a specific action you can take in under ten minutes: create an unusual custom field and ask the agent to set it, ask an agent to delete something and see what happens before undo, point the workflow at a self-hosted deployment, request a docs page with a markdown `Accept` header, and check whether the agent tooling lives in the product's own repository or a side project.

Run those five tests against Relaticle at [relaticle.com/developers/mcp](https://relaticle.com/developers/mcp), and against whatever else you're evaluating, including Twenty. The full breakdown of pricing, self-hosting, and AI capability differences between the two is at [relaticle.com/compare/relaticle-vs-twenty](https://relaticle.com/compare/relaticle-vs-twenty). "Agent-native" should be a claim you can fail. If a vendor's checklist only ever produces green checkmarks, you're reading marketing copy, not an architecture.

 Tagged: [ #mcp ](https://relaticle.com/blog/tag/mcp) 

 Related posts
-------------

 [  Guides   Oct 16, 2026  

 Attio export and migration: records, lists, relationships 
-----------------------------------------------------------

An Attio export and migration guide with a worked example of one company in two lists, destination mappings, expected counts, and relationship checks.

 ![Attio export and migration: records, lists, relationships](https://relaticle.com/storage/ink/01M38HHGV72B8MFZM5HRJ5098G.png) ](https://relaticle.com/blog/attio-export-migration-records-lists-relationships) [  Guides   Oct 13, 2026  

 CRM data import checklist: CSV mapping and sample files 
---------------------------------------------------------

A CRM data import checklist with sample company and people CSV files, exact mappings, relationship checks, and a second-run update test.

 ![CRM data import checklist: CSV mapping and sample files](https://relaticle.com/storage/ink/01M38HF8RDTX5SCR0AM71K8PW0.png) ](https://relaticle.com/blog/crm-csv-import-checklist) [  Guides   Oct 9, 2026  

 CRM permissions for AI agents: an access checklist 
----------------------------------------------------

Set CRM permissions for AI agents with a filled access worksheet, clear approval boundaries, and tests for denied writes and revoked connections.

 ![CRM permissions for AI agents: an access checklist](https://relaticle.com/storage/ink/01M38HCK3DY8GPEAQ2Z5FW3S3J.png) ](https://relaticle.com/blog/crm-ai-permissions-before-connecting-an-agent) 

    ###    On this page
