<?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: flowboxx</title>
    <description>The latest articles on DEV Community by flowboxx (@flowboxx).</description>
    <link>https://dev.to/flowboxx</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%2Fuser%2Fprofile_image%2F4219353%2F53f269e5-be30-4ab2-bc92-b447589dbbce.png</url>
      <title>DEV Community: flowboxx</title>
      <link>https://dev.to/flowboxx</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/flowboxx"/>
    <language>en</language>
    <item>
      <title>Let an AI assistant leave an inquiry for a small business, starting with one JSON file</title>
      <dc:creator>flowboxx</dc:creator>
      <pubDate>Tue, 03 Nov 2026 07:59:40 +0000</pubDate>
      <link>https://dev.to/flowboxx/let-an-ai-assistant-leave-an-inquiry-for-a-small-business-starting-with-one-json-file-21cg</link>
      <guid>https://dev.to/flowboxx/let-an-ai-assistant-leave-an-inquiry-for-a-small-business-starting-with-one-json-file-21cg</guid>
      <description>&lt;p&gt;An AI assistant should not stop at reading about a business: it should be able to leave an inquiry that a human owner gets as an e-mail.&lt;/p&gt;

&lt;p&gt;When people look for a roofer, a tax advisor or an electrician, more of them now ask an AI assistant instead of a search engine. The assistant then reads websites that were built for humans: hero images, menus, cookie banners, a services page three clicks deep. It has to guess what the business actually does, and even when it gets it right, the conversation ends there.&lt;/p&gt;

&lt;p&gt;The first step is telling it clearly. The A2A protocol (Agent2Agent, an open standard for agents talking to services) defines an &lt;strong&gt;agent card&lt;/strong&gt;: a small JSON file at a fixed address, &lt;code&gt;/.well-known/agent-card.json&lt;/code&gt;. It says who you are, what you offer and where an agent can reach you. Think of it as a business card for machines.&lt;/p&gt;

&lt;p&gt;We maintain a small open source kit that writes and checks these cards: &lt;a href="https://github.com/flowboxx/agent-card-starter" rel="noopener noreferrer"&gt;agent-card-starter&lt;/a&gt;. Python standard library only, Python 3.9 and newer, MIT licensed, no account, works offline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Write your first card
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;agent-card-starter

agent-card init &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; &lt;span class="s2"&gt;"Muster Roofing Ltd"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--description&lt;/span&gt; &lt;span class="s2"&gt;"Roofer in Musterstadt, repairs and new roofs."&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--website&lt;/span&gt; https://www.example.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--skill&lt;/span&gt; &lt;span class="s2"&gt;"Flat roof sealing"&lt;/span&gt;

agent-card validate .well-known/agent-card.json &lt;span class="nt"&gt;--strict&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;init&lt;/code&gt; validates before it writes and never overwrites an existing card without &lt;code&gt;--force&lt;/code&gt;. Pass &lt;code&gt;--skill&lt;/code&gt; once per service. &lt;code&gt;validate&lt;/code&gt; runs the same checks offline, so you can put it in CI.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a card looks like
&lt;/h2&gt;

&lt;p&gt;This is the example from the repo, a fictional German roofer, trimmed:&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="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Beispiel Dachdecker GmbH"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Fiktives Beispiel. Dachdeckerbetrieb für Neubau, Sanierung und Reparatur ..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"supportedInterfaces"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://tuer.beispiel-dachdecker.example/mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"protocolBinding"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MCP"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"protocolVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-06-18"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"provider"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"organization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Beispiel Dachdecker GmbH"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.beispiel-dachdecker.example"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"skills"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"flachdach"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Flachdach abdichten"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Abdichtung und Reparatur von Flachdächern ..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"tags"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"flachdach"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"abdichtung"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"reparatur"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&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;The field names follow A2A v1.0. One skill per real service, with a stable &lt;code&gt;id&lt;/code&gt;. Upload the file to &lt;code&gt;https://&amp;lt;your-domain&amp;gt;/.well-known/agent-card.json&lt;/code&gt; and you are readable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to keep out of the card
&lt;/h2&gt;

&lt;p&gt;The card is public. We learned to keep three things out of it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prices.&lt;/strong&gt; They change, and an assistant quoting last year's price helps nobody.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Phone numbers and personal e-mail addresses.&lt;/strong&gt; Scrapers read cards too.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Promises.&lt;/strong&gt; "Available tomorrow" is a promise a human should make, not a JSON file.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The validator warns about the first two. The third one is on you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Going one step further: an MCP endpoint
&lt;/h2&gt;

&lt;p&gt;MCP (Model Context Protocol) is the other open standard in this space. It lets an assistant call small tools on your side. The kit ships a minimal MCP example server over stdio with two tools: &lt;code&gt;leistungen&lt;/code&gt; (list services) and &lt;code&gt;anfrage_anlegen&lt;/code&gt; (leave an inquiry). Try it from a clone:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'{"jsonrpc":"2.0","id":1,"method":"tools/list"}\n'&lt;/span&gt; | python3 server/mcp_server.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;anfrage_anlegen&lt;/code&gt; is the part that matters most to a business owner: the assistant leaves an inquiry, a human answers. In the kit it is a stub on purpose, because a public inquiry endpoint attracts spam on day one. Before you expose one, you need HTTP transport, rate limiting, a honeypot field and a privacy notice. The README lists what is missing instead of pretending it is done.&lt;/p&gt;

&lt;p&gt;There is also an MCP server card example (&lt;code&gt;examples/mcp-server-card.json&lt;/code&gt;). It follows the Server Card proposal (SEP-2127), which may still change, so check the current schema before you publish.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this does not do
&lt;/h2&gt;

&lt;p&gt;Honest part: nothing here guarantees that an assistant will mention or recommend you. The standards are young and nobody can tell you today how many assistants read agent cards. What the card does is remove guessing. If an assistant looks, it finds clean, current facts at a known address.&lt;/p&gt;

&lt;p&gt;On our own site we see the crawlers of the large AI assistants fetch these files every day. That is a signal, not a ranking.&lt;/p&gt;

&lt;h2&gt;
  
  
  WordPress
&lt;/h2&gt;

&lt;p&gt;Most small businesses do not run Python. For them we built &lt;a href="https://flowboxx.de/open-door/en/?ref=devto" rel="noopener noreferrer"&gt;Open Door for AI Assistants (ODAA)&lt;/a&gt;, a free WordPress plugin that creates the same card, an &lt;code&gt;llms.txt&lt;/code&gt; and a read only MCP endpoint from three questions: company name, services, contact e-mail. An optional hosted inquiry service passes inquiries from assistants on to the owner by e-mail, with spam protection and a confirmed address. The plugin is in review at the WordPress.org plugin directory and will be linked here when it is live.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it, break it, tell us
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Repo: &lt;a href="https://github.com/flowboxx/agent-card-starter" rel="noopener noreferrer"&gt;https://github.com/flowboxx/agent-card-starter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Install: &lt;code&gt;pip install agent-card-starter&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;If you publish a card with it, post it in the repo Discussions under "Show and tell". If the validator rejects something valid, open an issue.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The kit is maintained by &lt;a href="https://flowboxx.de/open-door/en/?ref=devto" rel="noopener noreferrer"&gt;flowboxx&lt;/a&gt;, an agency that builds AI doors for businesses.&lt;/p&gt;

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