<?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: ppl</title>
    <description>The latest articles on DEV Community by ppl (ppl_crm).</description>
    <link>https://dev.to/ppl_crm</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.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F15306%2F1fdf5743-6df6-45de-992c-e2e314de98d5.png</url>
      <title>DEV Community: ppl</title>
      <link>https://dev.to/ppl_crm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ppl_crm"/>
    <language>en</language>
    <item>
      <title>Give your agent a contact book it can actually use</title>
      <dc:creator>David Hurley</dc:creator>
      <pubDate>Wed, 14 Oct 2026 19:04:46 +0000</pubDate>
      <link>https://dev.to/ppl_crm/give-your-agent-a-contact-book-it-can-actually-use-3jl2</link>
      <guid>https://dev.to/ppl_crm/give-your-agent-a-contact-book-it-can-actually-use-3jl2</guid>
      <description>&lt;p&gt;Before a call with an old friend, the useful question is usually a small one: what did we talk about last time?&lt;/p&gt;

&lt;p&gt;An agent can help with that if it has somewhere to keep relationship notes. ppl is a personal CRM at &lt;a href="https://withppl.com" rel="noopener noreferrer"&gt;withppl.com&lt;/a&gt;. You can use the web app yourself or connect an agent to the same account. Contacts, notes, reminders, and conversation history stay together instead of getting scattered across chats.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try the example before connecting
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://withppl.com/api/agent/preview" rel="noopener noreferrer"&gt;public preview&lt;/a&gt; returns a fictional briefing. It requires no account and contains no private contact data. There is also a &lt;a href="https://huggingface.co/spaces/dbhurley/ppl-personal-crm" rel="noopener noreferrer"&gt;small interactive demo&lt;/a&gt;. That demo uses sample records, not an AI model or a live CRM account.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect through your client
&lt;/h2&gt;

&lt;p&gt;The hosted MCP endpoint is &lt;code&gt;https://withppl.com/mcp&lt;/code&gt;. If your client supports MCP OAuth, let its normal sign-in flow handle authorization. The person reviews access before an agent receives it.&lt;/p&gt;

&lt;p&gt;For an agent without OAuth support, the &lt;a href="https://withppl.com/developers" rel="noopener noreferrer"&gt;developer guide&lt;/a&gt; documents the approval-and-poll flow. The agent requests a connection, shows the returned approval URL, and polls no faster than once every five seconds. After approval it stores the returned token through its secure credential mechanism. Tokens belong in secure storage, never in a URL, a repository, or a chat transcript.&lt;/p&gt;

&lt;p&gt;A browser approval is only the setup step. Ask for a first relationship briefing, then have your agent run &lt;code&gt;agent.briefing.get&lt;/code&gt;. A daily briefing combines birthdays, reminders, open tasks, and people you may want to catch up with.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ask about one person
&lt;/h2&gt;

&lt;p&gt;For a specific conversation, search for the person and use &lt;code&gt;contacts.digest.get&lt;/code&gt; with the returned contact ID. &lt;code&gt;memory.search&lt;/code&gt; helps find a previous note when you remember the subject but not the exact wording. Search before creating a new contact so the agent does not start a second record for the same person.&lt;/p&gt;

&lt;p&gt;A good first request is: “Find my notes about Jordan and help me prepare for our call.” Reading those notes does not authorize sending a message. If you want a draft, ask for a draft; review it before anything goes out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the model’s tool list manageable
&lt;/h2&gt;

&lt;p&gt;ppl’s default MCP catalog still works with existing clients. Clients that support custom MCP metadata can request a smaller starter catalog:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"jsonrpc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"tools/list"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"_meta"&lt;/span&gt;&lt;span class="p"&gt;:{&lt;/span&gt;&lt;span class="nl"&gt;"ppl/profile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"starter"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nl"&gt;"ppl/page_size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;}}}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Follow &lt;code&gt;nextCursor&lt;/code&gt; through the normal &lt;code&gt;params.cursor&lt;/code&gt; field. These options shorten the list of tool descriptions; they do not change the token’s permissions. Clients without this extension should keep using the default catalog.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://withppl.com/.well-known/ppl-tools.json" rel="noopener noreferrer"&gt;public task recipes&lt;/a&gt; map common jobs to the current tool names. The &lt;a href="https://withppl.com/.well-known/mcp/server-card.json" rel="noopener noreferrer"&gt;full schema catalog&lt;/a&gt; is available without an account.&lt;/p&gt;

&lt;h2&gt;
  
  
  When a call fails
&lt;/h2&gt;

&lt;p&gt;A paused installation needs the owner to resume it. A missing scope needs a new authorization, because existing tokens do not quietly gain permissions. A rate limit needs a pause that respects &lt;code&gt;Retry-After&lt;/code&gt;. If a write times out, check whether it already succeeded before repeating it.&lt;/p&gt;

&lt;p&gt;These are small details, but they decide whether an agent is useful after the first successful demo. The developer guide includes recovery instructions, permission details, and client guides so you can connect once and keep the workflow understandable.&lt;/p&gt;

&lt;p&gt;ppl is free during beta for up to 1,000 contacts. Start with a few people, add a note after your next conversation, and ask your agent to find it before the following one.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>agents</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
