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.jsonand/a2aRPC endpointRegisters 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.
No posts

Comments
Nothing yet. Say the first thing.
Sign in to join the conversation.