RSS Amplifier

Ryan’s Substack · Oct 21, 2025

Building an AI-Discoverable Portfolio with the A2A Protocol

0
Sign in to vote or save

Ryan Booth · Ryan’s Substack

TL;DR:
Google’s Agent2Agent (A2A) protocol defines how AI agents discover each other, share capability information, and exchange structured messages.
I built my own professional portfolio using A2A, allowing other AI agents to discover and query it. I’m sharing the tool so you can build yours too.

In this post, we’ll:

  • Explain how A2A discovery and data exchange work

  • Show real API calls you can run against abstractRyan.ai

  • Demonstrate how PortfolioManager automates A2A setup for your own site

The following post will extend this into AP2 (Agent Payments Protocol), where discovery turns into secure transactions.

The foundation of A2A is agent discovery: helping AI agents find and understand what information and services your site provides.

Every A2A-enabled site publishes a discovery document at:
/.well-known/agent-card.json

Try it yourself:

curl https://abstractryan.ai/.well-known/agent-card.json | jq

You’ll see something like:

{
  “version”: “1.0”,
  “name”: “Ryan Booth”,
  “description”: “AI Solutions Consultant with 20+ years of experience”,
  “capabilities”: [
    “AI Strategy Consulting”,
    “Infrastructure Automation”,
    “Application Development”
  ],
  “endpoints”: {
    “rpc”: “https://abstractryan.ai/a2a”,
    “projects”: “https://abstractryan.ai/projects”,
    “blog”: “https://abstractryan.ai/blog”,
    “contact”: “https://abstractryan.ai/contact”
  },
  “methods”: [
    {”name”: “getPortfolioInfo”, “description”: “Get basic profile”},
    {”name”: “listProjects”, “description”: “List all projects”},
    {”name”: “getProject”, “params”: [{”name”: “slug”, “required”: true}]},
    {”name”: “listBlogPosts”, “description”: “List blog posts”},
    {”name”: “getBlogPost”, “params”: [{”name”: “slug”}]},
    {”name”: “search”, “params”: [{”name”: “query”, “required”: true}]}
  ],
  “owner”: {
    “name”: “Ryan Booth”,
    “email”: “contact@abstractryan.ai”,
    “website”: “https://abstractryan.ai”
  }
}

This document tells any AI system precisely what data your site exposes and how to talk to it, no scraping, no guessing.

My portfolio implements a JSON-RPC 2.0 endpoint at /a2a that returns structured data for any supported method.

curl -X POST https://abstractryan.ai/a2a \
  -H “Content-Type: application/json” \
  -d ‘{
        “jsonrpc”: “2.0”,
        “method”: “getPortfolioInfo”,
        “id”: 1
      }’

Response:

{
  “jsonrpc”: “2.0”,
  “result”: {
    “name”: “Ryan Booth”,
    “title”: “AI Solutions Consultant”,
    “description”: “20+ years helping teams build AI-driven solutions...”,
    “email”: “contact@abstractryan.ai”,
    “location”: “Canyon, Texas, United States”,
    “social”: {
      “github”: “https://github.com/that1guy15”,
      “linkedin”: “https://www.linkedin.com/in/ryanbooth15/”
    }
  },
  “id”: 1
}
curl -X POST https://abstractryan.ai/a2a \
  -H “Content-Type: application/json” \
  -d ‘{
        “jsonrpc”: “2.0”,
        “method”: “listProjects”,
        “params”: {”featured”: true},
        “id”: 2
      }’

This returns an array of projects with metadata — titles, tags, languages, and repository links.

curl -X POST https://abstractryan.ai/a2a \
  -H “Content-Type: application/json” \
  -d ‘{
        “jsonrpc”: “2.0”,
        “method”: “search”,
        “params”: {”query”: “AI”},
        “id”: 3
      }’

Returns a filtered list of projects, posts, or portfolio items related to AI.

PortfolioManager includes privacy-aware logic — it lets AI agents see what you’ve built without exposing private repositories or code.

Example:

curl -X POST https://abstractryan.ai/a2a \
  -H “Content-Type: application/json” \
  -d ‘{
        “jsonrpc”: “2.0”,
        “method”: “getProject”,
        “params”: {”slug”: “artist-dashboard”},
        “id”: 4
      }’

Response:

{
  “result”: {
    “title”: “Artist Dashboard”,
    “description”: “Cross-platform social manager for artists.”,
    “private”: true,
    “url”: null,
    “tags”: [”SaaS”, “Full-Stack”, “Social Media”],
    “language”: “Python, React, TypeScript”
  }
}

Agents can evaluate your skills and experience while keeping sensitive source material hidden.

Visit abstractRyan.ai/#a2a-stats to see real-time analytics showing:

  • Total A2A requests

  • Success vs. error counts

  • Most-used methods

  • Auto-refresh every 30 seconds

This demonstrates that the A2A layer isn’t just static metadata — it’s a living, queryable interface.

I built PortfolioManager to make this setup trivial.

  • Imports GitHub repos (public + private), LinkedIn data, and Hugging Face models

  • Auto-generates agent-card.json and /a2a RPC endpoint

  • Registers 6 default methods (profile, projects, blog, search, etc.)

  • Sets up analytics tracking via Cloudflare KV

  • Deploys seamlessly to Cloudflare Workers (Account Required)

npm install
npm run setup      # guided wizard
npm run build
wrangler deploy

You’ll get:

✅ Agent Card at /.well-known/agent-card.json
✅ JSON-RPC endpoint /a2a
✅ All 6 methods active
✅ Real-time analytics
✅ Private repo security
✅ Live deployment to Cloudflare

Available free for all paid subscribers.

Beyond data queries, abstractRyan.ai now supports a lightweight message API for conversational agents.

Example:

curl -X POST https://abstractryan.ai/v1/message/send \
  -H “Content-Type: application/json” \
  -d ‘{
        “message”: {
          “role”: “user”,
          “parts”: [{”kind”: “text”,”text”: “What AI projects do you have?”}]
        }
      }’

Response:

{
  “message”: {
    “role”: “agent”,
    “parts”: [
      {”kind”: “text”,”text”: “I currently have 2 AI/ML projects including ai_notebooks and That1Guy15_eli5_clm-model...”}
    ]
  },
  “artifacts”: [
    {”id”: “ai-projects”,”kind”: “json”,”data”: {”total”: 2,”projects”: [...]}}
  ]
}

Supported queries include:

  • “What AI projects?” → Returns AI/ML project list

  • “Tell me about private work” → Returns summary (no URLs)

  • “What technologies do you use?” → Returns tech stack

  • “Your expertise” → Returns skill breakdown

Next up:
/v1/message:stream for real-time SSE responses
/v1/tasks/* for long-running operations

1️⃣ Discover capabilities

curl https://abstractryan.ai/.well-known/agent-card.json | jq ‘.methods[].name’

2️⃣ Get profile

curl -X POST https://abstractryan.ai/a2a \
  -H “Content-Type: application/json” \
  -d ‘{”jsonrpc”:”2.0”,”method”:”getPortfolioInfo”,”id”:1}’ | jq

3️⃣ Search for AI projects

curl -X POST https://abstractryan.ai/a2a \
  -H “Content-Type: application/json” \
  -d ‘{”jsonrpc”:”2.0”,”method”:”search”,”params”:{”query”:”AI”},”id”:2}’ | jq

4️⃣ Conversational query

curl -X POST https://abstractryan.ai/v1/message/send \
  -H “Content-Type: application/json” \
  -d ‘{”message”:{”role”:”user”,”parts”:[{”kind”:”text”,”text”:”What AI projects?”}]}}’ | jq

In the next post, we’ll explore AP2 (Agent Payments Protocol) — where A2A-discovered agents can securely execute verified purchases and service transactions.
If A2A is the conversation, AP2 is the contract that closes the deal.

Thanks for reading Ryan’s Substack! This post is public, so feel free to share it.

Share

No posts

Read the original on abstractryan.substack.com

Comments

Nothing yet. Say the first thing.

    Sign in to join the conversation.