What Is the A2A Protocol? Agent2Agent Explained, A2A vs MCP, and a Working Agent on Twitter (X) Data

- A2A = agent to agent. An open protocol for one agent to discover another, delegate a task and receive results; Google-originated, now under the Linux Foundation's Agentic AI Foundation.
- v1.0 is the stable spec (shipped March 2026; the GitHub repo tags v1.0.1). Three bindings:
JSONRPC,GRPC,HTTP+JSON. SDKs for Python, Go, Java, JavaScript, C#/.NET and Rust. - Four objects to learn: the Agent Card (
/.well-known/agent-card.json), the Message (with Parts), the Task (with a state machine) and the Artifact (the output). - A2A vs MCP: MCP connects one agent to tools and data; A2A connects agents to each other. Most real systems use both, MCP underneath and A2A on top.
- On X, A2A is a niche next to MCP: 19.5% of 708 A2A posts we collected in 2026 also mention MCP, while "MCP server" posts arrived about 323x as often as "A2A protocol" posts.
- Give an A2A agent live X data with one REST call or our hosted MCP server; the 973-post study behind this page cost $0.15 at $0.15 per 1,000 tweets, versus $4.87 at X's $0.005 per post read.
Searches for "a2a protocol" mostly come from builders who have already met MCP and now see A2A in agent framework docs and vendor announcements and want three answers: what it actually is on the wire, whether they need it, and how it relates to the MCP servers they already run. This page answers those in that order, from the v1.0 specification on a2a-protocol.org and the normative a2a.proto in the a2aproject/A2A repository, both read this year.
This is the A2A explainer and the A2A vs MCP comparison. It does not repeat what our sibling pages cover: what an MCP server is and how its wire protocol works (see the MCP server explainer), how to write one (the build-an-MCP-server tutorial), or when a CLI beats MCP for an agent (MCP vs CLI). Where MCP needs a concrete example we use TwitterAPI.io's hosted X (Twitter) MCP server, because it is the one we can measure.
We also did something no other A2A explainer does: we pulled 708 public X posts about A2A from 551 accounts and measured what the conversation is about, how often it mentions MCP, and how its volume compares with the MCP-server conversation. The charts and tables below come from that study.
19.5% of 708 A2A posts from 551 accounts (collected in 2026); none of the 200 newest "MCP server" posts mentioned A2A, and MCP-server posts arrived about 323x as often.
What the A2A protocol is, in one model
A2A treats every agent as opaque: a client agent does not see the remote agent's prompts, memory, model or tools. It only sees what the remote agent advertises and what it returns. That is the design choice that separates A2A from frameworks that orchestrate agents inside one process. Two agents written by different teams, in different languages, on different clouds can still cooperate, because the only thing they share is the protocol.
Agent Card. A JSON document, served by convention at https://{server_domain}/.well-known/agent-card.json, that says who the agent is and how to talk to it. The v1.0 schema requires name, description, version, supportedInterfaces, capabilities, defaultInputModes, defaultOutputModes and skills; optional fields include provider, documentationUrl, securitySchemes, securityRequirements, signatures (signed cards) and iconUrl.
Skill. An entry in the card's skills list with an id, name, description and tags (all required), plus optional examples and input/output modes. Skills are how an orchestrator, or a model choosing between agents, decides who gets a task.
Message and Part. A message has a messageId, a role (ROLE_USER from the client, ROLE_AGENT from the agent) and a list of parts. A part is exactly one of text, raw (bytes, base64 in JSON), url (a file by reference) or data (any JSON value), with optional mediaType, filename and metadata.
Task. The unit of work. It carries an id, a contextId that groups related tasks into one conversation, a status with a state, plus artifacts and history. Tasks are what make A2A suitable for work that takes minutes or hours rather than one request.
Artifact. The output of a task: an artifactId, an optional name and description, and parts. A report, a JSON payload or an image all come back as artifacts, and can be streamed in chunks.
Who runs A2A, and what changed in v1.0
Origin. Google announced Agent2Agent in April 2025. The GitHub repository a2aproject/A2A was created in March 2025 and is licensed Apache-2.0; when we checked it this session it had about 26,500 stars and 2,700 forks and had received commits the same day.
Linux Foundation. On June 23, 2025, at Open Source Summit North America, the Linux Foundation launched the Agent2Agent Protocol Project around the protocol Google had created and launched that April. The announcement quotes Google Cloud, SAP, ServiceNow and Cisco as founding contributors or members, carries statements of support from AWS, Microsoft and Salesforce, and puts support at more than 100 companies at the time.
Agentic AI Foundation. On August 17, 2026 the AAIF announced that A2A was joining it as a hosted project, still governed openly under the Linux Foundation; the same announcement says A2A is "backed by over 150 organizations".
v1.0. The AAIF post describes v1.0 as "the first stable specification", shipped in March 2026, and lists what it added: multi-protocol bindings, version negotiation, multi-tenancy and signed Agent Cards. The repository tagged v1.0.0 in March 2026 and v1.0.1 in May 2026; the spec page lists 0.3.0, 0.2.6 and 0.1.0 as earlier versions.
Version negotiation. Clients send an A2A-Version header (or an A2A-Version query parameter). A server that does not support the requested version returns VersionNotSupportedError, and an empty value is treated as 0.3, so v1.0 servers can still talk to older clients that never sent the header.
SDKs. The A2A site lists official SDKs for Python, Go, Java, JavaScript, C#/.NET and Rust, all implementing the same v1.0 specification. The Python package is a2a-sdk on PyPI (version 1.3.0 when we checked).
How an A2A exchange works on the wire
A full exchange has four steps. Discover: the client fetches the Agent Card and reads supportedInterfaces, each with a url, a protocolBinding (JSONRPC, GRPC or HTTP+JSON; the field is open, so custom bindings are allowed) and a protocolVersion. Authenticate: if the card declares securitySchemes (API key, HTTP auth, OAuth 2.0 with authorization-code, client-credentials or device-code flows, OpenID Connect, or mutual TLS), the client gets credentials out of band. Send: the client calls SendMessage (or SendStreamingMessage for server-sent events). Follow up: it polls with GetTask, subscribes with SubscribeToTask, or registers a webhook for push notifications.
The operations are the same in every binding; only the framing changes. The table maps the core ones:
Task states. A task moves through TASK_STATE_SUBMITTED and TASK_STATE_WORKING to one of the terminal states TASK_STATE_COMPLETED, TASK_STATE_FAILED, TASK_STATE_CANCELED or TASK_STATE_REJECTED. Two states pause the task and hand control back to the client: TASK_STATE_INPUT_REQUIRED (the agent needs more information) and TASK_STATE_AUTH_REQUIRED (it needs credentials). Those two are what let an A2A agent hold a multi-turn conversation inside one task.
Push notifications. If the card sets capabilities.pushNotifications to true, a client can register a webhook url (plus an optional token and authentication info) and the agent will POST StreamResponse payloads to it as the task progresses, as plain HTTP with JSON whatever binding the agent uses. The spec warns that neither push nor streaming is a reliable delivery mechanism for critical information, so a client should still call GetTask for the final state.
The request below is the smallest valid JSON-RPC call. The response wraps either a task or, for a quick answer that needs no task, a message.
POST <supportedInterfaces[].url> A2A-Version: 1.0
{
"jsonrpc": "2.0",
"id": 1,
"method": "SendMessage",
"params": {
"message": {
"messageId": "6f1c...",
"role": "ROLE_USER",
"parts": [{"text": "What are people on X saying about A2A this week?"}]
},
"configuration": {"acceptedOutputModes": ["application/json", "text/plain"]}
}
}
-> {"jsonrpc": "2.0", "id": 1, "result": {"task": {
"id": "task-uuid", "contextId": "context-uuid",
"status": {"state": "TASK_STATE_COMPLETED"},
"artifacts": [{"artifactId": "...", "parts": [{"data": {"count": 40, "posts": [...]}}]}]
}}}A2A vs MCP: different layers, usually used together
The short version is the A2A site's own line: MCP connects an agent to tools, APIs and data; A2A connects it to other agents. The longer version is about what each protocol assumes about the thing on the other end. An MCP server is a tool: it exposes typed functions (tools), readable context (resources) and templates (prompts), and the calling model decides exactly which function to run with which arguments. An A2A agent is a peer: the caller describes a goal in a message, and the remote agent decides how to reach it, may ask for more input, and may take a long time.
When MCP alone is enough. If one agent needs to read data or call APIs, MCP (or a plain REST call) is the whole answer. Connecting Claude Code, Cursor or another host to our hosted X server is one config entry with your API key as a Bearer token, and the agent gets 12 read-only tools for searching posts and reading profiles, timelines, replies, followers and trends. Adding A2A here would add a hop and gain nothing.
When you need A2A. When the work crosses an ownership boundary: a procurement agent at one company asking a supplier's agent for a quote, an orchestrator delegating to specialist agents another team deploys and updates on its own schedule, or any case where you must not (or cannot) see the other agent's tools and prompts. A2A gives you discovery, a task lifecycle and auth negotiation that MCP was not designed to provide between peers.
How they combine. The common pattern is the one in the hero diagram: agents talk to each other over A2A, and each one reaches its own tools over MCP. A research agent that answers "what is X saying about our launch?" can expose that as an A2A skill, and internally call an X MCP server or the REST API to fetch the posts. The client agent never learns which data source was used; it just receives an artifact.
Where the line is getting blurry. MCP's current spec revision (2026-07-28) makes requests stateless and self-contained and adds an opt-in Tasks extension for long-running operations, so MCP now covers some async work that used to be A2A-only. The difference that remains is the peer model: MCP still assumes the caller picks the tool and its arguments, A2A assumes the callee owns the plan.
What X says about A2A: the measured conversation
To see how builders actually talk about A2A, we searched X for "A2A protocol" (newest and top posts) and "agent2agent", with retweets excluded, and de-duplicated the results into 708 posts from 551 accounts. For scale we also pulled the newest 200 posts containing "MCP server". Every number below comes from that sample.
MCP is the protocol A2A is discussed with. 19.5% of A2A posts also mention MCP (138 posts), far ahead of any other agent protocol: x402 appears in 6.8%, ACP in 1.8%, AP2 in 1.0%. About a quarter of the A2A-plus-MCP posts (25.4%) frame them as a comparison ("vs", "difference", "compare"); the rest mostly list them side by side as parts of one stack. The link does not run the other way: none of the 200 recent "MCP server" posts mentioned A2A.
Google still owns the story. 32.2% of A2A posts mention Google, ADK, Vertex or Gemini, more than Anthropic or Claude (8.9%), OpenAI (7.1%), Microsoft (6.6%) and AWS (3.7%) combined. Agent frameworks are a small slice: LangChain or LangGraph 4.1%, CrewAI 2.5%.
Security and payments dominate the themes. 30.4% of posts touch security, auth, trust, identity or signatures; 19.1% touch payments or commerce; 17.5% are tutorials, guides or demos; 13.4% talk about Agent Cards or discovery. 14.0% carry crypto-token vocabulary (tickers, onchain, airdrop), which is worth knowing if you plan to monitor the term: filter it or your feed will fill with token launches that borrow the A2A name.
Few posts point at the spec. 44.6% of A2A posts carry a link, but only 2.5% link to a2a-protocol.org or the a2aproject GitHub organization, and 5.5% link to GitHub at all. 18.5% contain a question mark. For a reader, that means most of what circulates on X about A2A is commentary on the protocol rather than the protocol; the spec is the place to check field names.

A2A vs MCP on X: a small, high-signal conversation
Volume tells a different story from the specs. In its newest 30 days the "A2A protocol" search returned 73 posts, about 2.4 a day; the "agent2agent" search ran at 2.4 a day over the 83.6 days its 200 posts covered. The newest 200 "MCP server" posts, by contrast, all fell inside 6.2 hours, a rate of about 775 a day, roughly 323 times the A2A rate.
Attention per post runs the other way. The median post in the A2A Latest sample had 350 views and 6 likes; the median MCP-server post had 24.5 views and 0.5 likes, and 50% of MCP-server posts got no like at all, against 5.4% of A2A posts. 73.0% of A2A posts came from blue-verified accounts. A plausible reading, which the sample cannot prove: MCP servers are now a commodity people announce daily, while A2A is still discussed mostly by people who follow agent infrastructure closely.
Among the 90 Top-ranked A2A posts, 25.6% mention MCP, and those had a median of 92 likes against 45 for the rest. The A2A vs MCP framing is what travels, which is also why this page answers both.

Build it: an A2A agent that answers with live X (Twitter) data
A practical way to understand A2A is to stand up one agent. The script in the code section below is a complete v1.0 agent in about 140 lines of standard-library Python plus requests: it serves an Agent Card with one skill (search-x), accepts SendMessage over JSON-RPC, runs the text of the message as an X advanced-search query against TwitterAPI.io's REST API, and returns a completed Task whose artifact is a data part holding the posts. Its client half does what any A2A client does: read the card, choose the JSONRPC interface, send the message with an A2A-Version: 1.0 header, and read the artifact.
Why REST inside the agent, not MCP. Inside an agent you control, a direct call is the shortest path: one GET to /twitter/tweet/advanced_search with an X-API-Key header returns up to 20 posts per page plus has_next_page and next_cursor, and the fields (createdAt, text, likeCount, viewCount, author.userName) map straight into the artifact. If the agent is itself an LLM loop (ADK, LangGraph, the OpenAI Agents SDK, the Claude Agent SDK), point it at https://mcp.twitterapi.io/mcp with Authorization: Bearer <your key> instead, and let the model pick among the 12 read-only tools. Either way the remote A2A client only sees the skill.
What to change for production. Swap the hand-rolled server for the official a2a-sdk, which handles streaming (SendStreamingMessage), task storage for GetTask, push notifications and auth; declare a securitySchemes entry in the card (an API key or OAuth 2.0) instead of leaving the agent open; and keep tasks in TASK_STATE_WORKING while a long search paginates, so a client can poll or subscribe rather than block.
Reads need no X account. The search runs on TwitterAPI.io's own collection, so the agent needs an API key, not an X developer app or an X login. If you later want an agent to post, our write endpoints (/twitter/create_tweet_v2 and others) run through an authenticated session: one /twitter/user_login_v2 login ($0.10, with a proxy you supply) returns login_cookies, then each action is 60 credits ($0.0006), billed per HTTP 200 call. That call acts as that account, so keep a normal human pace on your own account only; X can rate-limit, lock or suspend it, and the session can need a re-login.
What X data costs an A2A agent
TwitterAPI.io bills per tweet returned: 15 credits per tweet, which is $0.15 per 1,000 tweets, with a 15-credit minimum when a search returns nothing ($0.00015). A full 20-post page costs $0.003. X's own API, on its pay-per-usage rate card at docs.x.com/x-api/getting-started/pricing, charges $0.005 per post read, or $5 per 1,000 posts, about 33x more per 1,000 tweets. The study on this page read 973 posts in 50 requests: $0.15 with us, $4.87 at X's post-read price.
A2A-specific sizing. A2A tasks are usually bursts, not streams: an orchestrator asks "what is X saying about this?" and the X agent reads one to five pages. At $0.003 per full page that is $0.003 to $0.015 per task. Even a monitoring skill that polls a niche term is cheap, because empty checks cost the minimum: at the 2.4 posts a day we measured for "A2A protocol", a 5-minute poll finds nothing most of the time, so the floor of about $1.30 a month is most of the bill.
New accounts that pass the automatic bot check get up to $1 of free credits (at most 100,000 credits, no card, one per person or network, expiring after 31 days), enough to run the study above several times. The rate limit is 0.2 requests per second before the first payment and 20 once paid. Purchased credits never expire; plans and higher limits are on the pricing page.
How we collected this
Question. How do people on X talk about the A2A protocol, how often do they pair it with MCP, and how does the A2A conversation compare in volume and attention with the MCP-server conversation?
Queries. Four searches on /twitter/tweet/advanced_search, all with -filter:retweets: "A2A protocol" Latest (25 pages, 483 posts), agent2agent Latest (10 pages, 200 posts), "A2A protocol" Top (5 pages, 90 posts) and "MCP server" Latest (10 pages, 200 posts). The three A2A sets were merged and de-duplicated by post id into 708 posts from 551 accounts. 50 requests, 973 posts, $0.15 in credits.
Window. The newest matching posts at collection time, collected in 2026. Each query covers a different span: the newest 200 MCP-server posts covered a few hours, while the A2A searches reach back over many months. Per-day rates use each sample's own span; the A2A rate uses its newest 30 days.
Method. Keyword matching on lowercased post text (and expanded link domains), with the regular expressions in analyze.py; a post can count toward several protocols, vendors or themes. Engagement is the likeCount and viewCount at collection time.
What the sample cannot show. Search results are not a census: X search coverage varies, older posts are sparser, and Top is X's ranking, not ours. Keyword matching misses posts that discuss A2A without the words and catches some that use "A2A" for unrelated things (crypto tokens, account-to-account payments). The MCP-server sample covers hours, so time-of-day affects its rate. None of this measures adoption of the protocol, only the conversation about it.
Privacy. Aggregates only. Most authors are private individuals, so raw search pages were not kept; the published sample holds de-identified rows (no post id, URL, text, author id or handle). No account is named or profiled.
"""a2a_x_agent.py - a minimal A2A v1.0 agent that answers questions with live X (Twitter) posts.
Server mode serves an Agent Card at /.well-known/agent-card.json and answers the
JSON-RPC method SendMessage by running one search on TwitterAPI.io's REST API
(/twitter/tweet/advanced_search) and returning a completed Task with one artifact.
Client mode does what any A2A client does: read the card, pick the JSONRPC
interface, send a message, print the task state and the artifact.
Hand-rolled on purpose so every field is visible. For production use the official
SDK (pip install a2a-sdk), which adds streaming, push notifications and auth.
pip install requests
export TWITTERAPI_IO_API_KEY=... # from twitterapi.io/dashboard
python3 a2a_x_agent.py serve # terminal 1, listens on :9999
python3 a2a_x_agent.py ask "A2A protocol" # terminal 2
"""
import json
import os
import sys
import uuid
from http.server import BaseHTTPRequestHandler, HTTPServer
import requests
BASE = "https://api.twitterapi.io"
PORT = 9999
AGENT_URL = f"http://localhost:{PORT}/a2a"
AGENT_CARD = {
"name": "X search agent",
"description": "Finds recent public X (Twitter) posts for a query and returns them as JSON.",
"version": "0.1.0",
"supportedInterfaces": [
{"url": AGENT_URL, "protocolBinding": "JSONRPC", "protocolVersion": "1.0"},
],
"capabilities": {"streaming": False, "pushNotifications": False},
"defaultInputModes": ["text/plain"],
"defaultOutputModes": ["application/json"],
"skills": [{
"id": "search-x",
"name": "Search X posts",
"description": "Latest public posts matching an X advanced-search query.",
"tags": ["social-listening", "search", "x-posts"],
"examples": ["\"A2A protocol\" -filter:retweets", "from:googledevs a2a"],
}],
}
def search_x(query, max_pages=2):
"""Read up to max_pages pages (about 20 posts each) via next_cursor."""
key = os.environ["TWITTERAPI_IO_API_KEY"]
posts, cursor = [], ""
for _ in range(max_pages):
params = {"query": query, "queryType": "Latest"}
if cursor:
params["cursor"] = cursor
r = requests.get(f"{BASE}/twitter/tweet/advanced_search",
headers={"X-API-Key": key}, params=params, timeout=60)
r.raise_for_status()
page = r.json()
for tw in page.get("tweets", []):
posts.append({
"url": tw["url"],
"createdAt": tw["createdAt"],
"text": tw["text"],
"likeCount": tw["likeCount"],
"viewCount": tw.get("viewCount"),
"author": tw["author"]["userName"],
})
if not page.get("has_next_page"):
break
cursor = page.get("next_cursor", "")
return posts
class Handler(BaseHTTPRequestHandler):
def _send(self, code, body):
data = json.dumps(body).encode()
self.send_response(code)
self.send_header("Content-Type", "application/json")
self.send_header("Content-Length", str(len(data)))
self.end_headers()
self.wfile.write(data)
def do_GET(self):
if self.path == "/.well-known/agent-card.json":
return self._send(200, AGENT_CARD)
self._send(404, {"error": "not found"})
def do_POST(self):
req = json.loads(self.rfile.read(int(self.headers["Content-Length"])))
rid = req.get("id")
if req.get("method") != "SendMessage":
return self._send(200, {"jsonrpc": "2.0", "id": rid,
"error": {"code": -32601, "message": "Method not found"}})
msg = req["params"]["message"]
query = " ".join(p["text"] for p in msg["parts"] if "text" in p).strip()
task = {"id": str(uuid.uuid4()), "contextId": msg.get("contextId") or str(uuid.uuid4())}
try:
posts = search_x(query)
task["status"] = {"state": "TASK_STATE_COMPLETED"}
task["artifacts"] = [{
"artifactId": str(uuid.uuid4()),
"name": "x-posts",
"parts": [{"data": {"query": query, "count": len(posts), "posts": posts},
"mediaType": "application/json"}],
}]
except requests.RequestException as exc:
task["status"] = {"state": "TASK_STATE_FAILED", "message": {
"messageId": str(uuid.uuid4()), "role": "ROLE_AGENT",
"parts": [{"text": f"X search failed: {exc}"}]}}
self._send(200, {"jsonrpc": "2.0", "id": rid, "result": {"task": task}})
def ask(base_url, text):
card = requests.get(f"{base_url}/.well-known/agent-card.json", timeout=30).json()
iface = next(i for i in card["supportedInterfaces"] if i["protocolBinding"] == "JSONRPC")
print("agent:", card["name"], "| skills:", [s["id"] for s in card["skills"]])
body = {"jsonrpc": "2.0", "id": 1, "method": "SendMessage", "params": {
"message": {"messageId": str(uuid.uuid4()), "role": "ROLE_USER", "parts": [{"text": text}]},
"configuration": {"acceptedOutputModes": ["application/json"]},
}}
r = requests.post(iface["url"], json=body, timeout=120,
headers={"A2A-Version": iface["protocolVersion"]})
reply = r.json()
if "error" in reply:
raise SystemExit(reply["error"])
task = reply["result"]["task"]
print("task", task["id"], task["status"]["state"])
for art in task.get("artifacts", []):
data = art["parts"][0]["data"]
print(data["count"], "posts for", repr(data["query"]))
for p in data["posts"][:5]:
print(" ", p["createdAt"], p["likeCount"], p["text"][:80].replace("\n", " "))
if __name__ == "__main__":
if sys.argv[1:2] == ["serve"]:
print(f"A2A agent on http://localhost:{PORT} (card at /.well-known/agent-card.json)")
HTTPServer(("localhost", PORT), Handler).serve_forever()
else:
ask(f"http://localhost:{PORT}", " ".join(sys.argv[2:]) or "\"A2A protocol\" -filter:retweets")
Researching this?Free starter credits cover end-to-end testing — Google sign-in, no card. Get a key.
Questions readers ask
What is the A2A protocol in simple terms?
A2A (Agent2Agent) is an open protocol that lets AI agents built by different teams discover each other, hand off tasks and return results without sharing their internals. An agent publishes an Agent Card describing its skills and endpoints; another agent sends it a message, and the work is tracked as a Task whose output comes back as Artifacts.
Who created A2A and who maintains it now?
Google introduced A2A in April 2025 and contributed it to the Linux Foundation, which launched the Agent2Agent Protocol Project on June 23, 2025; Google Cloud, SAP, ServiceNow and Cisco are named in the announcement as founding contributors or members. In August 2026 A2A joined the Agentic AI Foundation (AAIF) as a hosted project, still under Linux Foundation governance.
What is the difference between A2A and MCP?
MCP connects one agent to tools and data: the model picks a tool and its arguments and gets a result. A2A connects agents to other agents: the caller describes a goal, and the remote agent decides how to do it, can ask for more input, and reports progress through a task lifecycle. Most systems use both, MCP for each agent's tools and A2A between agents.
Does A2A replace MCP?
No. The A2A project's own site says MCP connects an agent to tools, APIs and data, A2A connects it to other agents, and to use both. If a single agent only needs to read data, such as X posts, an MCP server or a REST call is enough and A2A adds nothing.
What is an A2A Agent Card?
A JSON document, usually at /.well-known/agent-card.json on the agent's domain, that describes the agent. v1.0 requires name, description, version, supportedInterfaces (URL, protocol binding and protocol version for each endpoint), capabilities, default input and output modes, and skills; it can also declare security schemes and carry signatures so clients can verify who published it.
Which transports does A2A v1.0 support?
Three core protocol bindings: JSON-RPC 2.0, gRPC and HTTP+JSON (REST-style routes such as POST /message:send). Streaming uses server-sent events, and long tasks can push updates to a client webhook. The binding field is an open string, so custom bindings are allowed.
Is there an A2A SDK for Python?
Yes. The official Python SDK is the a2a-sdk package on PyPI (version 1.3.0 when we checked), maintained in the a2aproject/a2a-python repository under Apache-2.0. The A2A site also lists official SDKs for Go, Java, JavaScript, C#/.NET and Rust.
How can an A2A agent read Twitter (X) data?
Inside the agent, call a data API: one GET to TwitterAPI.io's /twitter/tweet/advanced_search with an X-API-Key header returns posts for any X search query at $0.15 per 1,000 tweets, or connect the agent's model to the hosted MCP server at mcp.twitterapi.io/mcp. Expose the result as an A2A skill so other agents can ask for it. No X developer account or X login is needed for reads.
Continue
- A2A Protocol Specification v1.0 (operations, bindings, Agent Card, task states, push notifications)
- a2aproject/A2A on GitHub (spec source, a2a.proto, releases, Apache-2.0)
- Linux Foundation: launch of the Agent2Agent Protocol Project
- Agentic AI Foundation: A2A joins AAIF (v1.0 status, 150+ organizations)
- Model Context Protocol specification (current revision, server features, Tasks extension)
- X API pricing: pay-per-usage rate card
- Twitter (X) API overview: endpoints, pricing and limits
- What an MCP server is and how its wire protocol works
- How to build your own MCP server, step by step
- MCP vs CLI: which one an AI agent should use
- How to build an AI agent that reads X data
- Agentic payment protocols compared (AP2, ACP, x402)
- TwitterAPI.io pricing and plans
- 01Bright Data Alternatives for Twitter (X) Data: Prices, Fit and a Measured Cost Test
- 02Make.com Pricing in 2026: Plans, Credits and What a Twitter (X) Workflow Really Costs
- 03CrewAI vs LangGraph: Which Multi-Agent Framework to Pick, and Where AutoGen Went
- 04Browser Use MCP Server: Setup, CLI and Twitter (X) Reads in 2026
- 05Manus Alternatives in 2026: Hosted, Chat-Plan and Open-Source Agents, and What People on Twitter (X) Switch To
- 06Twitter (X) API Endpoints: the X API v2 Map, What Each Read Costs, and the TwitterAPI.io Path for the Same Job
- 07Twitter Trends — Find, Track, Automate
- 08Twitter to RSS: How to Get an RSS Feed of Any X Account, Search or List
Writing about something you built with TwitterAPI.io? Our community rewards program pays API credits for honest tutorials, build logs and videos.
Stop reading. Start building.
Starter credits cover real testing on real data. Google sign-in, no card, no application queue.
Get an API keyAlready building with TwitterAPI.io? Publish an honest tutorial or build log about it and earn up to $200 a month in API credits.