<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Attri</title>
    <description>The latest articles on DEV Community by Attri (@attriofficial2026).</description>
    <link>https://dev.to/attriofficial2026</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3843496%2F666d5b9a-c181-4781-9b13-9bf779f725ee.jpeg</url>
      <title>DEV Community: Attri</title>
      <link>https://dev.to/attriofficial2026</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/attriofficial2026"/>
    <language>en</language>
    <item>
      <title>We Built an Open-Source CRM for AI Agents — Here's Why</title>
      <dc:creator>Attri</dc:creator>
      <pubDate>Thu, 26 Mar 2026 16:20:33 +0000</pubDate>
      <link>https://dev.to/attriofficial2026/we-built-an-open-source-crm-for-ai-agents-heres-why-3ffg</link>
      <guid>https://dev.to/attriofficial2026/we-built-an-open-source-crm-for-ai-agents-heres-why-3ffg</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;We Built an Open-Source CRM for AI Agents — Here’s Why&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Traditional CRMs were designed for humans clicking buttons. With 6,400+ MCP servers and AI agents entering every enterprise workflow, it’s time for infrastructure that’s built for them.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you’re building AI agents that interact with business data, you’ve probably hit the same wall we did.&lt;/p&gt;

&lt;p&gt;Your agent can call APIs, generate text, and reason over documents — but where does it store what it knows? Where does it persist contacts, deals, interactions, and the evidence behind every claim? How does it handle conflicting information without silently overwriting the truth?&lt;/p&gt;

&lt;p&gt;Most teams wire up a vector database and call it memory. That works for semantic search. It doesn’t work when you need to know the exact deal value, who the decision maker is, and which email confirmed it — with a full audit trail.&lt;/p&gt;

&lt;p&gt;We needed something better. So we built it and open-sourced it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open Tooling CRM: The Technical Case&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open Tooling CRM is a headless, local-first CRM designed for AI agents as the primary users. No UI. No cloud dependencies. Just a SQLite-backed data layer with two clean interfaces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;REST API — 29 endpoints. Standard HTTP/JSON with consistent pagination, filtering, idempotency keys, and Zod validation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MCP Server — 27 tools purpose-built for Claude Desktop, Claude Code, and any MCP-compatible client. Entities, relationships, artifacts, observations, briefs, conflicts, graph traversal, FTS, import/export.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Evidence Chain&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The core differentiator is the memory layer. Instead of flat fields that get overwritten, Open Tooling CRM implements a four-level evidence chain:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Artifacts (raw evidence: emails, transcripts, documents)&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;↓ extraction
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Observations (typed claims with lifecycle: current → superseded / retracted)&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;↓ derivation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Briefs (summaries that cite observations — always regeneratable)&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;↓ detection
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Conflicts (when observations disagree — never silently resolved)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every observation links to its source artifact. Every brief cites its observations. Every conflict references the disagreeing claims. Progressive retrieval means agents start with the brief and drill down to raw evidence when needed.&lt;/p&gt;

&lt;p&gt;This isn’t academic — it’s practical. When your agent says “budget is $250K,” you can trace that through the observation to the artifact (the email from the prospect’s CFO on March 3rd). When the budget changes, the old observation is superseded, not deleted. The audit trail is preserved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agent Client → MCP Tools → OpenCRM Core → SQLite&lt;/p&gt;

&lt;p&gt;Agent Client → REST API  → OpenCRM Core → SQLite&lt;/p&gt;

&lt;p&gt;Both interfaces share the same core. All writes produce immutable events in an append-only ledger. Data model: typed entities with JSON properties, directed relationships, field-level provenance, FTS index, and the full memory layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP Tools at a Glance&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Entities: create_entity, update_entity, get_entity, search_entities, archive_entity&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Relationships: link_entities, unlink_entities, list_relationships, traverse_graph&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Memory: ingest_artifact, add_observation, list_observations, supersede_observation, retract_observation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Briefs: create_brief, get_brief, list_briefs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Conflicts: create_conflict, get_conflict, list_conflicts, resolve_conflict&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data: export_data, import_data&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why Headless?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No bundled UI is a deliberate architectural choice. CRMs that couple their data layer to a rigid frontend create lock-in by design. Open Tooling inverts this: the API is the product.&lt;/p&gt;

&lt;p&gt;Three ways to use it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agent-only. Connect the MCP server to Claude Desktop. Your CRM interface is natural language.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Vibe-code a frontend. Tell Claude or Cursor: “Build me a React dashboard for my deals pipeline using the Open Tooling CRM API at localhost:8787.” The API is conventional enough that any code-gen tool can scaffold a working UI in minutes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integrate into your stack. It’s a REST API — connect it to anything.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Part of a Bigger Vision&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open Tooling CRM is the first module in Open Tooling — an open-source family of AI-native SaaS tools. The same architecture (headless, local-first, evidence-based, MCP-native) applies across verticals like HR, Finance, Project Management, Procurement, and beyond.&lt;/p&gt;

&lt;p&gt;We also ship a Claude plugin marketplace (Attri-Inc/open-tooling-plugins). Install it and Claude gets the knowledge layer to use Open Tooling CRM optimally — the right ingestion patterns, the evidence chain, progressive retrieval, conflict resolution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick Start&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/Attri-Inc/open-tooling.git" rel="noopener noreferrer"&gt;https://github.com/Attri-Inc/open-tooling.git&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;cd open-tooling/crm&lt;/p&gt;

&lt;p&gt;npm install &amp;amp;&amp;amp; cp .env.example .env&lt;/p&gt;

&lt;p&gt;npm run dev    # REST API at localhost:8787&lt;/p&gt;

&lt;p&gt;npm run seed   # Sample data&lt;/p&gt;

&lt;p&gt;npm run mcp    # MCP server (stdio)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use It with Claude (Zero Config)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP Server:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Add the MCP config to Claude Desktop or Claude Code. 27 tools, full evidence chain, natural language CRM.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude Cowork Plugin:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One-click install via our plugin marketplace. Gives Claude the knowledge layer for optimal usage — ingestion patterns, evidence chain workflow, progressive retrieval, conflict resolution.&lt;/p&gt;

&lt;p&gt;Cowork setup: Customize → Add plugin → Add marketplace → Attri-Inc/open-tooling-plugins → Sync.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;[GIF: Claude Cowork plugin install — showing the marketplace setup flow]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⭐ GITHUB: github.com/Attri-Inc/open-tooling&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧩 PLUGIN MARKETPLACE: github.com/Attri-Inc/open-tooling-plugins&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Apache 2.0 licensed. Contributions welcome.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published on Attri AI Substack [link].&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Built by Attri AI. We build AI-native tools for enterprises.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>webdev</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
