├── .editorconfig
├── .git-blame-ignore-revs
├── .gitattributes
├── .github
├── CODEOWNERS
├── ISSUE_TEMPLATE
│ ├── bug-report.yml
│ └── feature-request.yml
├── PULL_REQUEST_TEMPLATE.md
├── actions
│ └── spelling
│ │ ├── advice.md
│ │ ├── allow.txt
│ │ ├── excludes.txt
│ │ └── line_forbidden.patterns
├── conventional-commit-lint.yaml
├── linters
│ ├── .eslintrc.js
│ ├── .jscpd.json
│ ├── .markdownlint.json
│ └── .stylelintrc.json
└── workflows
│ ├── check-linked-issues.yml
│ ├── conventional-commits.yml
│ ├── dispatch-a2a-update.yml
│ ├── docs.yml
│ ├── generate-a2a-json.yml
│ ├── issue-metrics.yml
│ ├── links.yaml
│ ├── linter.yaml
│ ├── release-please.yml
│ ├── sort-spelling-allowlist.yml
│ ├── spelling.yaml
│ └── stale.yaml
├── .gitignore
├── .mkdocs
└── overrides
│ └── main.html
├── .prettierrc
├── .ruff.toml
├── .vscode
└── settings.json
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── GOVERNANCE.md
├── LICENSE
├── README.md
├── SECURITY.md
├── docs
├── 404.html
├── README.md
├── assets
│ ├── a2a-actors.png
│ ├── a2a-banner.png
│ ├── a2a-logo-black.svg
│ ├── a2a-logo-white.svg
│ ├── a2a-main.png
│ ├── a2a-mcp-readme.png
│ ├── a2a-mcp.png
│ ├── adk.svg
│ ├── ag2-black.svg
│ └── langgraph-color.svg
├── community.md
├── index.md
├── llms.txt
├── partners.md
├── roadmap.md
├── sdk
│ └── python
│ │ ├── conf.py
│ │ └── index.rst
├── specification.md
├── stylesheets
│ └── custom.css
├── topics
│ ├── a2a-and-mcp.md
│ ├── agent-discovery.md
│ ├── enterprise-ready.md
│ ├── extensions.md
│ ├── key-concepts.md
│ ├── life-of-a-task.md
│ ├── streaming-and-async.md
│ └── what-is-a2a.md
└── tutorials
│ └── python
│ ├── 1-introduction.md
│ ├── 2-setup.md
│ ├── 3-agent-skills-and-card.md
│ ├── 4-agent-executor.md
│ ├── 5-start-server.md
│ ├── 6-interact-with-server.md
│ ├── 7-streaming-and-multiturn.md
│ └── 8-next-steps.md
├── lychee.toml
├── mkdocs.yml
├── requirements-docs.txt
├── scripts
├── build_sdk_docs.sh
├── deploy-404.sh
├── format.sh
└── sort_spelling.sh
├── specification
├── grpc
│ ├── README.md
│ ├── a2a.proto
│ ├── buf.gen.yaml
│ ├── buf.lock
│ └── buf.yaml
└── json
│ ├── README.md
│ └── a2a.json
└── types
├── .gitignore
├── README.md
├── package-lock.json
├── package.json
├── src
└── types.ts
└── tsconfig.json
/.editorconfig:
--------------------------------------------------------------------------------
1 | # editorconfig.org
2 | root = true
3 |
4 | [*]
5 | end_of_line = lf
6 | charset = utf-8
7 | trim_trailing_whitespace = true
8 | insert_final_newline = true
9 |
10 | [*.sh]
11 | indent_style = space
12 | indent_size = 2
13 |
--------------------------------------------------------------------------------
/.git-blame-ignore-revs:
--------------------------------------------------------------------------------
1 | # Template taken from https://github.com/v8/v8/blob/master/.git-blame-ignore-revs.
2 | #
3 | # This file contains a list of git hashes of revisions to be ignored by git blame. These
4 | # revisions are considered "unimportant" in that they are unlikely to be what you are
5 | # interested in when blaming. Most of these will probably be commits related to linting
6 | # and code formatting.
7 | #
8 | # Instructions:
9 | # - Only large (generally automated) reformatting or renaming CLs should be
10 | # added to this list. Do not put things here just because you feel they are
11 | # trivial or unimportant. If in doubt, do not put it on this list.
12 | # - Precede each revision with a comment containing the PR title and number.
13 | # For bulk work over many commits, place all commits in a block with a single
14 | # comment at the top describing the work done in those commits.
15 | # - Only put full 40-character hashes on this list (not short hashes or any
16 | # other revision reference).
17 | # - Append to the bottom of the file (revisions should be in chronological order
18 | # from oldest to newest).
19 | # - Because you must use a hash, you need to append to this list in a follow-up
20 | # PR to the actual reformatting PR that you are trying to ignore.
21 | 0f8d9750bcb17f6b8b9f48793b46f7b8510cae24
22 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Documentation overrides
2 | /docs/** linguist-documentation=true
3 | /.mkdocs/** linguist-documentation=true
4 | /specification/json/a2a.json linguist-generated=true
5 | noxfile.py linguist-vendored=true
6 |
7 | # Merge and diff setting
8 | CHANGELOG.md merge=union
9 |
--------------------------------------------------------------------------------
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | # Code owners file.
2 | # This file controls who is tagged for review for any given pull request.
3 | #
4 | # For syntax help see:
5 | # https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners#codeowners-syntax
6 |
7 | * @a2aproject/google-a2a-eng
8 | docs/ @a2aproject/tech-writing
9 | *.md @a2aproject/tech-writing
10 | .mkdocs/ @a2aproject/tech-writing
11 | .mkdocs.yml @a2aproject/tech-writing
12 | README.md @a2aproject/tech-writing
13 | requirements-docs.txt @a2aproject/tech-writing
14 | specification/ @a2aproject/a2a-tsc
15 | types/ @a2aproject/a2a-tsc
16 | docs/specification.md @a2aproject/a2a-tsc
17 | GOVERNANCE.md @a2aproject/a2a-tsc
18 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug-report.yml:
--------------------------------------------------------------------------------
1 | name: 🐞 Bug Report
2 | description: File a bug report
3 | title: "[Bug]: "
4 | type: "Bug"
5 | body:
6 | - type: markdown
7 | attributes:
8 | value: |
9 | Thanks for stopping by to let us know something could be better!
10 | Private Feedback? Please use this [Google form](https://goo.gle/a2a-feedback)
11 | - type: textarea
12 | id: what-happened
13 | attributes:
14 | label: What happened?
15 | description: Also tell us what you expected to happen and how to reproduce the issue.
16 | placeholder: Tell us what you see!
17 | value: "A bug happened!"
18 | validations:
19 | required: true
20 | - type: textarea
21 | id: logs
22 | attributes:
23 | label: Relevant log output
24 | description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
25 | render: shell
26 | - type: checkboxes
27 | id: terms
28 | attributes:
29 | label: Code of Conduct
30 | description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/a2aproject/A2A?tab=coc-ov-file#readme)
31 | options:
32 | - label: I agree to follow this project's Code of Conduct
33 | required: true
34 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature-request.yml:
--------------------------------------------------------------------------------
1 | name: 💡 Feature Request
2 | description: Suggest an idea for this repository
3 | title: "[Feat]: "
4 | type: "Feature"
5 | body:
6 | - type: markdown
7 | attributes:
8 | value: |
9 | Thanks for stopping by to let us know something could be better!
10 | Private Feedback? Please use this [Google form](https://goo.gle/a2a-feedback)
11 | - type: textarea
12 | id: problem
13 | attributes:
14 | label: Is your feature request related to a problem? Please describe.
15 | description: A clear and concise description of what the problem is.
16 | placeholder: Ex. I'm always frustrated when [...]
17 | - type: textarea
18 | id: describe
19 | attributes:
20 | label: Describe the solution you'd like
21 | description: A clear and concise description of what you want to happen.
22 | validations:
23 | required: true
24 | - type: textarea
25 | id: alternatives
26 | attributes:
27 | label: Describe alternatives you've considered
28 | description: A clear and concise description of any alternative solutions or features you've considered.
29 | - type: textarea
30 | id: context
31 | attributes:
32 | label: Additional context
33 | description: Add any other context or screenshots about the feature request here.
34 | - type: checkboxes
35 | id: terms
36 | attributes:
37 | label: Code of Conduct
38 | description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/a2aproject/A2A?tab=coc-ov-file#readme)
39 | options:
40 | - label: I agree to follow this project's Code of Conduct
41 | required: true
42 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | # Description
2 |
3 | Thank you for opening a Pull Request!
4 | Before submitting your PR, there are a few things you can do to make sure it goes smoothly:
5 |
6 | - [ ] Follow the [`CONTRIBUTING` Guide](https://github.com/a2aproject/A2A/blob/main/CONTRIBUTING.md).
7 | - [ ] Make your Pull Request title in the specification.
8 | - [ ] Ensure the tests and linter pass (Run `nox -s format` from the repository root to format)
9 | - [ ] Appropriate docs were updated (if necessary)
10 |
11 | Fixes # 🦕
12 |
--------------------------------------------------------------------------------
/.github/actions/spelling/advice.md:
--------------------------------------------------------------------------------
1 |
2 | If the flagged items are :exploding_head: false positives
3 |
4 | If items relate to a ...
5 |
6 | - binary file (or some other file you wouldn't want to check at all).
7 |
8 | Please add a file path to the `excludes.txt` file matching the containing file.
9 |
10 | File paths are Perl 5 Regular Expressions - you can [test](https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files.
11 |
12 | `^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude `README.md` (on whichever branch you're using).
13 |
14 | - well-formed pattern.
15 |
16 | If you can write a [pattern](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns) that would match it,
17 | try adding it to the `patterns.txt` file.
18 |
19 | Patterns are Perl 5 Regular Expressions - you can [test](https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your lines.
20 |
21 | Note that patterns can't match multiline strings.
22 |
23 |
24 |
25 |
26 |
27 | :steam_locomotive: If you're seeing this message and your PR is from a branch that doesn't have check-spelling,
28 | please merge to your PR's base branch to get the version configured for your repository.
29 |
--------------------------------------------------------------------------------
/.github/actions/spelling/allow.txt:
--------------------------------------------------------------------------------
1 | AAAANSUh
2 | AAAAUA
3 | AAAGHMHc
4 | ACMRTUXB
5 | ACard
6 | AClient
7 | ACo
8 | ADK
9 | AError
10 | AIP
11 | ARequest
12 | ASED
13 | ASGI
14 | AServer
15 | AService
16 | AStarlette
17 | Autogen
18 | Blogs
19 | CAs
20 | CLIs
21 | Camry
22 | Cjava
23 | Cpzuhi
24 | DDo
25 | DGT
26 | DHDe
27 | Djq
28 | Dotnet
29 | EBFF
30 | EUR
31 | EUg
32 | FBT
33 | FHIR
34 | Fbr
35 | GAPI
36 | GAPIC
37 | GBP
38 | GVsb
39 | Gapic
40 | Gci
41 | Genkit
42 | Ghw
43 | HBz
44 | HKRMw
45 | HXo
46 | Hackathon
47 | IFdvcmxk
48 | IMPCUk
49 | INR
50 | Ikp
51 | Imh
52 | Imprd
53 | JFUz
54 | JHv
55 | JPY
56 | JWKS
57 | JWS
58 | JWTs
59 | Jhb
60 | Jra
61 | KGgo
62 | KRW
63 | LHR
64 | LJcvt
65 | LLM
66 | LLMs
67 | Lix
68 | MSIs
69 | MWpm
70 | Mapr
71 | Nszl
72 | OIDC
73 | OOa
74 | Ollama
75 | PLE
76 | PLW
77 | PMEEi
78 | PTH
79 | QFdk
80 | Qvandrcy
81 | RPCs
82 | RUF
83 | SLAs
84 | SLF
85 | Solax
86 | TJS
87 | TMDB
88 | Tful
89 | URLTo
90 | Upserting
91 | Urke
92 | VBORw
93 | Vsb
94 | WHB
95 | WQi
96 | WVw
97 | Witteveen
98 | XBs
99 | Xca
100 | YQGt
101 | YTAKFW
102 | YTT
103 | YWFh
104 | YWdlbn
105 | ZDS
106 | ZKHv
107 | ZXhhb
108 | ZXkt
109 | Zipkin
110 | Zms
111 | aab
112 | aacacac
113 | aboutasha
114 | achat
115 | aconnect
116 | adk
117 | agentcard
118 | agentic
119 | agentskill
120 | ainvoke
121 | aldridge
122 | amannn
123 | aparse
124 | aproject
125 | aprotocol
126 | arxiv
127 | askmarvin
128 | asyncclick
129 | autogen
130 | automodule
131 | autouse
132 | backstory
133 | backticks
134 | bbb
135 | bufbuild
136 | bzr
137 | cae
138 | ccc
139 | cdn
140 | ceee
141 | cfe
142 | cls
143 | coc
144 | codegen
145 | codeowner
146 | crewai
147 | datamodel
148 | datapart
149 | dbc
150 | dcda
151 | dcfa
152 | dde
153 | direnv
154 | docstrings
155 | documentai
156 | dotnet
157 | efaab
158 | efbd
159 | embeddings
160 | endblock
161 | envoyproxy
162 | euo
163 | evt
164 | excinfo
165 | faa
166 | fafd
167 | ffbb
168 | firewalls
169 | flightbook
170 | forbes
171 | fsv
172 | fyi
173 | gapic
174 | gcp
175 | genai
176 | geneknit
177 | genkit
178 | genproto
179 | georoute
180 | gettickets
181 | gle
182 | googleai
183 | googleapi
184 | googleblog
185 | gpt
186 | gstatic
187 | gweb
188 | hqdefault
189 | hughesthe
190 | iat
191 | ietf
192 | inbox
193 | inmemory
194 | iss
195 | jherr
196 | jti
197 | jwks
198 | konami
199 | kty
200 | langgraph
201 | linenums
202 | linkedin
203 | linting
204 | llm
205 | llms
206 | lng
207 | marvin
208 | mcp
209 | mesop
210 | mindsdb
211 | motherlode
212 | mozilla
213 | msword
214 | multiagent
215 | multipage
216 | myorg
217 | nearform
218 | nlp
219 | notif
220 | npush
221 | objc
222 | octicons
223 | oidc
224 | ollama
225 | oneof
226 | oreilly
227 | pqr
228 | prefecthq
229 | protoc
230 | protolint
231 | pyguide
232 | pymdownx
233 | pypackages
234 | pytype
235 | pyupgrade
236 | qwq
237 | rcm
238 | repomapr
239 | reportgen
240 | reposted
241 | rst
242 | rvelicheti
243 | sllm
244 | squidfunk
245 | srcs
246 | sse
247 | stateclass
248 | stephenh
249 | styleguide
250 | svn
251 | systemctl
252 | tagwords
253 | taskssend
254 | taskstate
255 | taskstatus
256 | textpart
257 | threadsafe
258 | toctree
259 | tok
260 | tracestate
261 | ugc
262 | undoc
263 | utm
264 | versioned
265 | vnd
266 | voa
267 | vscode
268 | weavehacks
269 | webpage
270 | whatwg
271 | wikipedia
272 | wsgi
273 | wwwwwwww
274 | xxxxx
275 | xxxxxxxx
276 | youtube
277 | yyyyyyyy
278 | zzzzzzzz
279 |
--------------------------------------------------------------------------------
/.github/actions/spelling/excludes.txt:
--------------------------------------------------------------------------------
1 | # See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes
2 | (?:^|/)(?i)COPYRIGHT
3 | (?:^|/)(?i)LICEN[CS]E
4 | (?:^|/)(?i)CODE_OF_CONDUCT.md\E$
5 | (?:^|/)(?i).gitignore\E$
6 | (?:^|/)3rdparty/
7 | (?:^|/)go\.sum$
8 | (?:^|/)package(?:-lock|)\.json$
9 | (?:^|/)Pipfile$
10 | (?:^|/)pyproject.toml
11 | (?:^|/)requirements(?:-dev|-doc|-test|)\.txt$
12 | (?:^|/)vendor/
13 | /CODEOWNERS$
14 | \.a$
15 | \.ai$
16 | \.all-contributorsrc$
17 | \.avi$
18 | \.bmp$
19 | \.bz2$
20 | \.cer$
21 | \.class$
22 | \.coveragerc$
23 | \.crl$
24 | \.crt$
25 | \.csr$
26 | \.dll$
27 | \.docx?$
28 | \.drawio$
29 | \.DS_Store$
30 | \.eot$
31 | \.eps$
32 | \.exe$
33 | \.gif$
34 | \.git-blame-ignore-revs$
35 | \.gitattributes$
36 | \.gitkeep$
37 | \.graffle$
38 | \.gz$
39 | \.icns$
40 | \.ico$
41 | \.jar$
42 | \.jks$
43 | \.jpe?g$
44 | \.key$
45 | \.lib$
46 | \.lock$
47 | \.map$
48 | \.min\..
49 | \.mo$
50 | \.mod$
51 | \.mp[34]$
52 | \.o$
53 | \.ocf$
54 | \.otf$
55 | \.p12$
56 | \.parquet$
57 | \.pdf$
58 | \.pem$
59 | \.pfx$
60 | \.png$
61 | \.psd$
62 | \.pyc$
63 | \.pylintrc$
64 | \.qm$
65 | \.s$
66 | \.sig$
67 | \.so$
68 | \.svgz?$
69 | \.sys$
70 | \.tar$
71 | \.tgz$
72 | \.tiff?$
73 | \.ttf$
74 | \.wav$
75 | \.webm$
76 | \.webp$
77 | \.woff2?$
78 | \.xcf$
79 | \.xlsx?$
80 | \.xpm$
81 | \.xz$
82 | \.zip$
83 | ^\.github/actions/spelling/
84 | ^\Q.github/workflows/spelling.yaml\E$
85 | ^\Q.github/workflows/linter.yaml\E$
86 | ^\Qlychee.toml\E$
87 | \.vscode/
88 | ^\Qdocs/partners.md\E$
89 | ^\Qspecification/json/a2a.json\E$
90 | CHANGELOG.md
91 | \.gitignore
92 | ^\Qdocs/robots.txt\E$
93 | CODE_OF_CONDUCT.md
94 |
--------------------------------------------------------------------------------
/.github/actions/spelling/line_forbidden.patterns:
--------------------------------------------------------------------------------
1 | # Should be `HH:MM:SS`
2 | \bHH:SS:MM\b
3 |
4 | # Should probably be `YYYYMMDD`
5 | \b[Yy]{4}[Dd]{2}[Mm]{2}(?!.*[Yy]{4}[Dd]{2}[Mm]{2}).*$
6 |
7 | # Should be `anymore`
8 | \bany more[,.]
9 |
10 | # Should be `cannot` (or `can't`)
11 | # See https://www.grammarly.com/blog/cannot-or-can-not/
12 | # > Don't use `can not` when you mean `cannot`. The only time you're likely to see `can not` written as separate words is when the word `can` happens to precede some other phrase that happens to start with `not`.
13 | # > `Can't` is a contraction of `cannot`, and it's best suited for informal writing.
14 | # > In formal writing and where contractions are frowned upon, use `cannot`.
15 | # > It is possible to write `can not`, but you generally find it only as part of some other construction, such as `not only . . . but also.`
16 | # - if you encounter such a case, add a pattern for that case to patterns.txt.
17 | \b[Cc]an not\b
18 |
19 | # Should be `GitHub`
20 | (?> "$GITHUB_OUTPUT"
53 | echo "a2a.json is not up-to-date with types.ts"
54 | else
55 | echo "a2a.json is up-to-date."
56 | fi
57 |
58 | - name: Commit and Push Changes (if on base repository)
59 | if: steps.git_status.outputs.changes_detected == 'true' && github.event.pull_request.head.repo.full_name == github.repository
60 | run: |
61 | git commit -m "chore: Auto-generate a2a.json from types.ts changes"
62 | git push
63 |
64 | - name: Fail on Fork PR if Changes Required
65 | if: steps.git_status.outputs.changes_detected == 'true' && github.event.pull_request.head.repo.full_name != github.repository
66 | run: |
67 | echo "::error::a2a.json is out of date."
68 | echo "Please run 'npm install' then 'npm run generate' in the 'types' directory of your branch and commit the updated 'specification/json/a2a.json' file."
69 | exit 1 # Exit with a non-zero code to fail the workflow
70 |
--------------------------------------------------------------------------------
/.github/workflows/issue-metrics.yml:
--------------------------------------------------------------------------------
1 | name: Monthly issue metrics
2 | on:
3 | workflow_dispatch:
4 | schedule:
5 | - cron: "3 2 1 * *"
6 |
7 | permissions:
8 | contents: read
9 |
10 | jobs:
11 | build:
12 | name: issue metrics
13 | runs-on: ubuntu-latest
14 | permissions:
15 | issues: write
16 | pull-requests: read
17 | steps:
18 | - name: Get dates for last month
19 | shell: bash
20 | run: |
21 | # Calculate the first day of the previous month
22 | first_day=$(date -d "last month" +%Y-%m-01)
23 |
24 | # Calculate the last day of the previous month
25 | last_day=$(date -d "$first_day +1 month -1 day" +%Y-%m-%d)
26 |
27 | # Set an environment variable with the date range
28 | echo "$first_day..$last_day"
29 | echo "last_month=$first_day..$last_day" >> "$GITHUB_ENV"
30 |
31 | - name: Run issue-metrics tool
32 | uses: github/issue-metrics@v3
33 | env:
34 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
35 | SEARCH_QUERY: 'repo:a2aproject/A2A is:issue created:${{ env.last_month }} -reason:"not planned"'
36 |
37 | - name: Create issue
38 | uses: peter-evans/create-issue-from-file@v5
39 | with:
40 | title: Monthly issue metrics report
41 | token: ${{ secrets.GITHUB_TOKEN }}
42 | content-filepath: ./issue_metrics.md
43 |
--------------------------------------------------------------------------------
/.github/workflows/links.yaml:
--------------------------------------------------------------------------------
1 | name: Links
2 |
3 | on:
4 | repository_dispatch:
5 | workflow_dispatch:
6 | schedule:
7 | - cron: "00 18 * * *"
8 |
9 | jobs:
10 | linkChecker:
11 | runs-on: ubuntu-latest
12 | if: |
13 | github.repository == 'a2aproject/A2A'
14 |
15 | steps:
16 | - uses: actions/checkout@v4
17 |
18 | - name: Link Checker
19 | id: lychee
20 | uses: lycheeverse/lychee-action@v2
21 |
22 | - name: Create Issue From File
23 | if: env.lychee_exit_code != 0
24 | uses: peter-evans/create-issue-from-file@v5
25 | with:
26 | title: Link Checker Report
27 | content-filepath: ./lychee/out.md
28 | labels: report, automated issue
29 |
--------------------------------------------------------------------------------
/.github/workflows/linter.yaml:
--------------------------------------------------------------------------------
1 | name: Lint Code Base
2 |
3 | on:
4 | pull_request:
5 | branches: [main]
6 |
7 | jobs:
8 | build:
9 | name: Lint Code Base
10 | runs-on: ubuntu-latest
11 |
12 | steps:
13 | - name: Checkout Code
14 | uses: actions/checkout@v4
15 | with:
16 | fetch-depth: 0
17 |
18 | - name: Lint Code Base
19 | uses: super-linter/super-linter/slim@v8
20 | env:
21 | DEFAULT_BRANCH: main
22 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
23 | LOG_LEVEL: WARN
24 | SHELLCHECK_OPTS: -e SC1091 -e 2086
25 | VALIDATE_ALL_CODEBASE: false
26 | FILTER_REGEX_EXCLUDE: "^(\\.github/|\\.vscode/).*|CODE_OF_CONDUCT.md|CHANGELOG.md|GOVERNANCE.md|\\.mkdocs/overrides/.*|docs/404.html"
27 | VALIDATE_PYTHON_BLACK: false
28 | VALIDATE_PYTHON_FLAKE8: false
29 | VALIDATE_PYTHON_ISORT: false
30 | VALIDATE_PYTHON_MYPY: false
31 | VALIDATE_PYTHON_PYLINT: false
32 | VALIDATE_CHECKOV: false
33 | VALIDATE_NATURAL_LANGUAGE: false
34 | MARKDOWN_CONFIG_FILE: ".markdownlint.json"
35 | VALIDATE_MARKDOWN_PRETTIER: false
36 | TYPESCRIPT_ES_CONFIG_FILE: ".eslintrc.js"
37 | VALIDATE_JAVASCRIPT_PRETTIER: false
38 | VALIDATE_JSON_PRETTIER: false
39 | VALIDATE_YAML_PRETTIER: false
40 | VALIDATE_GIT_COMMITLINT: false
41 |
--------------------------------------------------------------------------------
/.github/workflows/release-please.yml:
--------------------------------------------------------------------------------
1 | on:
2 | push:
3 | branches:
4 | - main
5 |
6 | permissions:
7 | contents: write
8 | pull-requests: write
9 |
10 | name: release-please
11 |
12 | jobs:
13 | release-please:
14 | runs-on: ubuntu-latest
15 | steps:
16 | - uses: googleapis/release-please-action@v4
17 | with:
18 | token: ${{ secrets.A2A_BOT_PAT }}
19 | release-type: simple
20 |
--------------------------------------------------------------------------------
/.github/workflows/sort-spelling-allowlist.yml:
--------------------------------------------------------------------------------
1 | name: Auto-sort and update spelling allowlist
2 |
3 | on:
4 | pull_request:
5 | paths:
6 | - ".github/actions/spelling/allow.txt"
7 | types:
8 | - opened
9 | - synchronize
10 | - reopened
11 |
12 | jobs:
13 | sort_and_commit:
14 | name: Sort and Commit Allowlist
15 | runs-on: ubuntu-latest
16 | permissions:
17 | contents: write
18 |
19 | steps:
20 | - name: Checkout Code
21 | uses: actions/checkout@v4
22 | with:
23 | repository: ${{ github.event.pull_request.head.repo.full_name }}
24 | ref: ${{ github.event.pull_request.head.ref }}
25 | persist-credentials: false
26 |
27 | - name: Sort allow.txt
28 | run: |
29 | bash scripts/sort_spelling.sh
30 |
31 | - name: Configure Git
32 | run: |
33 | git config user.name "github-actions[bot]"
34 | git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
35 |
36 | - name: Check for changes
37 | id: git_status
38 | run: |
39 | if ! git diff --quiet .github/actions/spelling/allow.txt; then
40 | echo "changes=true" >> $GITHUB_OUTPUT
41 | fi
42 |
43 | - name: Commit and push changes
44 | if: steps.git_status.outputs.changes == 'true' && github.event.pull_request.head.repo.full_name == github.repository
45 | run: |
46 | git add .github/actions/spelling/allow.txt
47 | git commit -m "ci: sort and unique allow.txt"
48 | git push
49 |
50 | - name: Fail on fork with changes
51 | if: steps.git_status.outputs.changes == 'true' && github.event.pull_request.head.repo.full_name != github.repository
52 | run: |
53 | echo "::error::The 'allow.txt' file is not sorted correctly. Please run 'bash scripts/sort_spelling.sh' and commit the changes."
54 | exit 1
55 |
--------------------------------------------------------------------------------
/.github/workflows/spelling.yaml:
--------------------------------------------------------------------------------
1 | name: Check Spelling
2 |
3 | on:
4 | pull_request:
5 | branches:
6 | - "**"
7 | types:
8 | - "opened"
9 | - "reopened"
10 | - "synchronize"
11 |
12 | jobs:
13 | spelling:
14 | name: Check Spelling
15 | permissions:
16 | contents: read
17 | actions: read
18 | security-events: write
19 | outputs:
20 | followup: ${{ steps.spelling.outputs.followup }}
21 | if: ${{ contains(github.event_name, 'pull_request') || github.event_name == 'push' }}
22 | runs-on: ubuntu-latest
23 | concurrency:
24 | group: spelling-${{ github.event.pull_request.number || github.ref }}
25 | # note: If you use only_check_changed_files, you do not want cancel-in-progress
26 | cancel-in-progress: false
27 | steps:
28 | - name: check-spelling
29 | id: spelling
30 | uses: check-spelling/check-spelling@main
31 | with:
32 | suppress_push_for_open_pull_request: ${{ github.actor != 'dependabot[bot]' && 1 }}
33 | checkout: true
34 | check_file_names: 1
35 | spell_check_this: check-spelling/spell-check-this@main
36 | post_comment: 0
37 | use_magic_file: 1
38 | report-timing: 1
39 | warnings: bad-regex,binary-file,deprecated-feature,ignored-expect-variant,large-file,limited-references,no-newline-at-eof,noisy-file,non-alpha-in-dictionary,token-is-substring,unexpected-line-ending,whitespace-in-dictionary,minified-file,unsupported-configuration,no-files-to-check,unclosed-block-ignore-begin,unclosed-block-ignore-end
40 | experimental_apply_changes_via_bot: 1
41 | dictionary_source_prefixes: '{"cspell": "https://raw.githubusercontent.com/streetsidesoftware/cspell-dicts/main/dictionaries/"}'
42 | extra_dictionaries: |
43 | cspell:aws/dict/aws.txt
44 | cspell:bash/samples/bash-words.txt
45 | cspell:companies/dict/companies.txt
46 | cspell:css/dict/css.txt
47 | cspell:data-science/dict/data-science-models.txt
48 | cspell:data-science/dict/data-science.txt
49 | cspell:data-science/dict/data-science-tools.txt
50 | cspell:en_shared/dict/acronyms.txt
51 | cspell:en_shared/dict/shared-additional-words.txt
52 | cspell:en_GB/en_GB.trie
53 | cspell:en_US/en_US.trie
54 | cspell:filetypes/src/filetypes.txt
55 | cspell:fonts/dict/fonts.txt
56 | cspell:fullstack/dict/fullstack.txt
57 | cspell:golang/dict/go.txt
58 | cspell:google/dict/google.txt
59 | cspell:html/dict/html.txt
60 | cspell:java/src/java.txt
61 | cspell:k8s/dict/k8s.txt
62 | cspell:mnemonics/dict/mnemonics.txt
63 | cspell:monkeyc/src/monkeyc_keywords.txt
64 | cspell:node/dict/node.txt
65 | cspell:npm/dict/npm.txt
66 | cspell:people-names/dict/people-names.txt
67 | cspell:python/dict/python.txt
68 | cspell:python/dict/python-common.txt
69 | cspell:shell/dict/shell-all-words.txt
70 | cspell:software-terms/dict/softwareTerms.txt
71 | cspell:software-terms/dict/webServices.txt
72 | cspell:sql/src/common-terms.txt
73 | cspell:sql/src/sql.txt
74 | cspell:sql/src/tsql.txt
75 | cspell:terraform/dict/terraform.txt
76 | cspell:typescript/dict/typescript.txt
77 | check_extra_dictionaries: ""
78 | only_check_changed_files: true
79 | longest_word: "10"
80 |
--------------------------------------------------------------------------------
/.github/workflows/stale.yaml:
--------------------------------------------------------------------------------
1 | # This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.
2 | #
3 | # You can adjust the behavior by modifying this file.
4 | # For more information, see:
5 | # https://github.com/actions/stale
6 | name: Mark stale issues and pull requests
7 |
8 | on:
9 | schedule:
10 | # Scheduled to run at 10.30PM UTC everyday (1530PDT/1430PST)
11 | - cron: "30 22 * * *"
12 | workflow_dispatch:
13 |
14 | jobs:
15 | stale:
16 | runs-on: ubuntu-latest
17 | permissions:
18 | issues: write
19 | pull-requests: write
20 | actions: write
21 |
22 | steps:
23 | - uses: actions/stale@v9
24 | with:
25 | repo-token: ${{ secrets.GITHUB_TOKEN }}
26 | days-before-issue-stale: 14
27 | days-before-issue-close: 13
28 | stale-issue-label: "status:stale"
29 | close-issue-reason: not_planned
30 | any-of-labels: "status:awaiting response,status:more data needed"
31 | stale-issue-message: >
32 | Marking this issue as stale since it has been open for 14 days with no activity.
33 | This issue will be closed if no further activity occurs.
34 | close-issue-message: >
35 | This issue was closed because it has been inactive for 27 days.
36 | Please post a new issue if you need further assistance. Thanks!
37 | days-before-pr-stale: 14
38 | days-before-pr-close: 13
39 | stale-pr-label: "status:stale"
40 | stale-pr-message: >
41 | Marking this pull request as stale since it has been open for 14 days with no activity.
42 | This PR will be closed if no further activity occurs.
43 | close-pr-message: >
44 | This pull request was closed because it has been inactive for 27 days.
45 | Please open a new pull request if you need further assistance. Thanks!
46 | # Label that can be assigned to issues to exclude them from being marked as stale
47 | exempt-issue-labels: "override-stale"
48 | # Label that can be assigned to PRs to exclude them from being marked as stale
49 | exempt-pr-labels: "override-stale"
50 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *.pyc
5 | *$py.class
6 | **/dist
7 | /tmp
8 | /out-tsc
9 | /bazel-out
10 |
11 | # C extensions
12 | *.so
13 |
14 | # Distribution / packaging
15 | .Python
16 | build/
17 | develop-eggs/
18 | dist/
19 | downloads/
20 | eggs/
21 | .eggs/
22 | lib/
23 | lib64/
24 | parts/
25 | sdist/
26 | var/
27 | wheels/
28 | pip-wheel-metadata/
29 | share/python-wheels/
30 | *.egg-info/
31 | .installed.cfg
32 | *.egg
33 | MANIFEST
34 |
35 | # PyInstaller
36 | # Usually these files are written by a python script from a template
37 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
38 | *.manifest
39 | *.spec
40 |
41 | # Installer logs
42 | pip-log.txt
43 | pip-delete-this-directory.txt
44 |
45 | # Unit test / coverage reports
46 | htmlcov/
47 | .tox/
48 | .nox/
49 | .coverage
50 | .coverage.*
51 | .cache
52 | nosetests.xml
53 | coverage.xml
54 | *.cover
55 | *.py,cover
56 | .hypothesis/
57 | .pytest_cache/
58 |
59 | # Translations
60 | *.mo
61 | *.pot
62 |
63 | # Django stuff:
64 | *.log
65 | local_settings.py
66 | db.sqlite3
67 | db.sqlite3-journal
68 |
69 | # Flask stuff:
70 | instance/
71 | .webassets-cache
72 |
73 | # Scrapy stuff:
74 | .scrapy
75 |
76 | # Sphinx documentation
77 | docs/_build/
78 |
79 | # PyBuilder
80 | target/
81 |
82 | # Jupyter Notebook
83 | .ipynb_checkpoints
84 |
85 | # IPython
86 | profile_default/
87 | ipython_config.py
88 |
89 | # pyenv
90 | .python-version
91 |
92 | # pipenv
93 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
94 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
95 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
96 | # install all needed dependencies.
97 | Pipfile.lock
98 | Pipfile
99 |
100 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow
101 | __pypackages__/
102 |
103 | # Celery stuff
104 | celerybeat-schedule
105 | celerybeat.pid
106 |
107 | # SageMath parsed files
108 | *.sage.py
109 |
110 | # Environments
111 | .env
112 | .venv
113 | .venv*
114 | env/
115 | venv/
116 | ENV/
117 | env.bak/
118 | venv.bak/
119 |
120 | # Spyder project settings
121 | .spyderproject
122 | .spyproject
123 |
124 | # Rope project settings
125 | .ropeproject
126 |
127 | # mkdocs documentation
128 | /site
129 |
130 | # mypy
131 | .mypy_cache/
132 | .dmypy.json
133 | dmypy.json
134 | .ruff_cache/
135 |
136 | # Pyre type checker
137 | .pyre/
138 |
139 | # macOS
140 | .DS_Store
141 |
142 | # PyCharm
143 | .idea
144 |
145 | # User-specific files
146 | language/examples/prompt-design/train.csv
147 | README-TOC*.md
148 |
149 | # Terraform
150 | terraform.tfstate**
151 | .terraform*
152 | .Terraform*
153 |
154 | tmp*
155 |
156 | # Node
157 | **/node_modules
158 | npm-debug.log
159 | yarn-error.log
160 |
161 | # IDEs and editors
162 | .idea/
163 | .project
164 | .classpath
165 | .c9/
166 | *.launch
167 | .settings/
168 | *.sublime-workspace
169 |
170 | # Miscellaneous
171 | **/.angular/*
172 | /.angular/cache
173 | .sass-cache/
174 | /connect.lock
175 | /coverage
176 | /libpeerconnection.log
177 | testem.log
178 | /typings
179 |
180 | # System files
181 | .DS_Store
182 | Thumbs.db
183 |
184 | # Sphinx build artifacts
185 | docs/sdk/python/_build/
186 | docs/sdk/python/api/
187 | docs/sdk/python/generated/
188 |
--------------------------------------------------------------------------------
/.mkdocs/overrides/main.html:
--------------------------------------------------------------------------------
1 | {% extends "base.html" %}
2 |
3 | {% block announce %}{% endblock %}
4 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "tabWidth": 2,
3 | "useTabs": false,
4 | "trailingComma": "es5",
5 | "bracketSameLine": true,
6 | "overrides": [
7 | {
8 | "files": "*.md",
9 | "options": {
10 | "tabWidth": 4,
11 | "useTabs": false,
12 | "trailingComma": "es5"
13 | }
14 | }
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/.ruff.toml:
--------------------------------------------------------------------------------
1 | #################################################################################
2 | #
3 | # Ruff linter and code formatter for A2A
4 | #
5 | # This file follows the standards in Google Python Style Guide
6 | # https://google.github.io/styleguide/pyguide.html
7 | #
8 | # The settings below are for the IDE configuration, and are optional.
9 | #{
10 | # "editor.formatOnSave": true,
11 | # "[python]": {
12 | # "editor.defaultFormatter": "charliermarsh.ruff",
13 | # "editor.formatOnSave": true,
14 | # "editor.codeActionsOnSave": {
15 | # "source.organizeImports": "true"
16 | # },
17 | # },
18 | # "ruff.importStrategy": "fromEnvironment",
19 | #}
20 |
21 | line-length = 80 # Google Style Guide §3.2: 80 columns
22 | indent-width = 4 # Google Style Guide §3.4: 4 spaces
23 |
24 | target-version = "py312" # Minimum Python version
25 |
26 | [lint]
27 | ignore = [
28 | "COM812",
29 | "FBT001",
30 | "FBT002",
31 | "D203",
32 | "D213",
33 | "ANN001",
34 | "ANN201",
35 | "ANN204",
36 | "D100", # Ignore Missing docstring in public module (often desired at top level __init__.py)
37 | "D102", # Ignore return type annotation in public method
38 | "D104", # Ignore Missing docstring in public package (often desired at top level __init__.py)
39 | "D107", # Ignore Missing docstring in __init__ (use class docstring)
40 | "TD002", # Ignore Missing author in TODOs (often not required)
41 | "TD003", # Ignore Missing issue link in TODOs (often not required/available)
42 | "T201", # Ignore print presence
43 | "RUF012", # Ignore Mutable class attributes should be annotated with `typing.ClassVar`
44 | "RUF013", # Ignore implicit optional
45 | ]
46 |
47 | select = [
48 | "E", # pycodestyle errors (PEP 8)
49 | "W", # pycodestyle warnings (PEP 8)
50 | "F", # Pyflakes (logical errors, unused imports/variables)
51 | "I", # isort (import sorting - Google Style §3.1.2)
52 | "D", # pydocstyle (docstring conventions - Google Style §3.8)
53 | "N", # pep8-naming (naming conventions - Google Style §3.16)
54 | "UP", # pyupgrade (use modern Python syntax)
55 | "ANN",# flake8-annotations (type hint usage/style - Google Style §2.22)
56 | "A", # flake8-builtins (avoid shadowing builtins)
57 | "B", # flake8-bugbear (potential logic errors & style issues - incl. mutable defaults B006, B008)
58 | "C4", # flake8-comprehensions (unnecessary list/set/dict comprehensions)
59 | "ISC",# flake8-implicit-str-concat (disallow implicit string concatenation across lines)
60 | "T20",# flake8-print (discourage `print` - prefer logging)
61 | "SIM",# flake8-simplify (simplify code, e.g., `if cond: return True else: return False`)
62 | "PTH",# flake8-use-pathlib (use pathlib instead of os.path where possible)
63 | "PL", # Pylint rules ported to Ruff (PLC, PLE, PLR, PLW)
64 | "PIE",# flake8-pie (misc code improvements, e.g., no-unnecessary-pass)
65 | "RUF",# Ruff-specific rules (e.g., RUF001-003 ambiguous unicode)
66 | "RET",# flake8-return (consistency in return statements)
67 | "SLF",# flake8-self (check for private member access via `self`)
68 | "TID",# flake8-tidy-imports (relative imports, banned imports - configure if needed)
69 | "YTT",# flake8-boolean-trap (checks for boolean positional arguments, truthiness tests - Google Style §3.10)
70 | "TD", # flake8-todos (check TODO format - Google Style §3.7)
71 | ]
72 |
73 | exclude = [
74 | ".bzr",
75 | ".direnv",
76 | ".eggs",
77 | ".git",
78 | ".hg",
79 | ".mypy_cache",
80 | ".nox",
81 | ".pants.d",
82 | ".pytype",
83 | ".ruff_cache",
84 | ".svn",
85 | ".tox",
86 | ".venv",
87 | "__pypackages__",
88 | "_build",
89 | "buck-out",
90 | "build",
91 | "dist",
92 | "node_modules",
93 | "venv",
94 | "*/migrations/*",
95 | ]
96 |
97 | [lint.isort]
98 | #force-sort-within-sections = true
99 | #combine-as-imports = true
100 | case-sensitive = true
101 | #force-single-line = false
102 | #known-first-party = []
103 | #known-third-party = []
104 | lines-after-imports = 2
105 | lines-between-types = 1
106 | #no-lines-before = ["LOCALFOLDER"]
107 | #required-imports = []
108 | #section-order = ["future", "standard-library", "third-party", "first-party", "local-folder"]
109 |
110 | [lint.pydocstyle]
111 | convention = "google"
112 |
113 | [lint.flake8-annotations]
114 | mypy-init-return = true
115 | allow-star-arg-any = false
116 |
117 | [lint.pep8-naming]
118 | ignore-names = ["test_*", "setUp", "tearDown", "mock_*"]
119 | classmethod-decorators = ["classmethod", "pydantic.validator", "pydantic.root_validator"]
120 | staticmethod-decorators = ["staticmethod"]
121 |
122 | [lint.flake8-tidy-imports]
123 | ban-relative-imports = "all" # Google generally prefers absolute imports (§3.1.2)
124 |
125 | [lint.flake8-quotes]
126 | docstring-quotes = "double"
127 | inline-quotes = "single"
128 |
129 | [lint.per-file-ignores]
130 | "__init__.py" = ["F401"] # Ignore unused imports in __init__.py
131 | "*_test.py" = ["D", "ANN"] # Ignore docstring and annotation issues in test files
132 | "test_*.py" = ["D", "ANN"] # Ignore docstring and annotation issues in test files
133 |
134 | [format]
135 | docstring-code-format = true
136 | docstring-code-line-length = "dynamic" # Or set to 80
137 | quote-style = "single"
138 | indent-style = "space"
139 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "editor.formatOnSave": true,
3 | "[python]": {
4 | "editor.defaultFormatter": "charliermarsh.ruff",
5 | "editor.formatOnSave": true,
6 | "editor.codeActionsOnSave": {
7 | "source.organizeImports": "explicit"
8 | }
9 | },
10 | "ruff.importStrategy": "fromEnvironment",
11 | "markdownlint.configFile": ".github/linters/.markdownlint.json",
12 | "[json]": {
13 | "editor.defaultFormatter": "vscode.json-language-features",
14 | "editor.formatOnSave": true
15 | },
16 | "files.trimTrailingWhitespace": true,
17 | "files.insertFinalNewline": true
18 | }
19 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | ## [0.3.0](https://github.com/a2aproject/A2A/compare/v0.2.6...v0.3.0) (2025-07-30)
4 |
5 |
6 | ### ⚠ BREAKING CHANGES
7 |
8 | * Add mTLS to SecuritySchemes, add oauth2 metadata url field, allow Skills to specify Security ([#901](https://github.com/a2aproject/A2A/issues/901))
9 | * Change Well-Known URI for Agent Card hosting from `agent.json` to `agent-card.json` ([#841](https://github.com/a2aproject/A2A/issues/841))
10 | * Add method for fetching extended card ([#929](https://github.com/a2aproject/A2A/issues/929))
11 |
12 | ### Features
13 |
14 | * Add `signatures` to the `AgentCard` ([#917](https://github.com/a2aproject/A2A/issues/917)) ([ef4a305](https://github.com/a2aproject/A2A/commit/ef4a30505381e99b20103724cabef024389bacef))
15 | * Add method for fetching extended card ([#929](https://github.com/a2aproject/A2A/issues/929)) ([2cd7d98](https://github.com/a2aproject/A2A/commit/2cd7d98bc8566601b9a18ca8afe92a0b4d203248))
16 | * Add mTLS to SecuritySchemes, add oauth2 metadata url field, allow Skills to specify Security ([#901](https://github.com/a2aproject/A2A/issues/901)) ([e162c0c](https://github.com/a2aproject/A2A/commit/e162c0c6c4f609d2f4eef9042466d176ec75ebda))
17 |
18 |
19 | ### Bug Fixes
20 |
21 | * **spec:** Add `SendMessageRequest.request` `json_name` mapping to `message` ([#904](https://github.com/a2aproject/A2A/issues/904)) ([2eef3f6](https://github.com/a2aproject/A2A/commit/2eef3f6113851e690cee70a1b1643e1ffd6d2a60))
22 | * **spec:** Add Transport enum to specification ([#909](https://github.com/a2aproject/A2A/issues/909)) ([e834347](https://github.com/a2aproject/A2A/commit/e834347c279186d9d7873b352298e8b19737dd5a))
23 |
24 |
25 | ### Code Refactoring
26 |
27 | * Change Well-Known URI for Agent Card hosting from `agent.json` to `agent-card.json` ([#841](https://github.com/a2aproject/A2A/issues/841)) ([0858ddb](https://github.com/a2aproject/A2A/commit/0858ddb884dc4671681fd819648dfd697176abb3))
28 |
29 | ## [0.2.6](https://github.com/a2aproject/A2A/compare/v0.2.5...v0.2.6) (2025-07-17)
30 |
31 |
32 | ### Bug Fixes
33 |
34 | * Type fix and doc clarification ([#877](https://github.com/a2aproject/A2A/issues/877)) ([6f1d17b](https://github.com/a2aproject/A2A/commit/6f1d17ba806c32f2b6fbe465be93ec13bfe7d83c))
35 | * Update json names of gRPC objects for proper transcoding ([#847](https://github.com/a2aproject/A2A/issues/847)) ([6ba72f0](https://github.com/a2aproject/A2A/commit/6ba72f0d51c2e3d0728f84e9743b6d0e88730b51))
36 |
37 | ## [0.2.5](https://github.com/a2aproject/A2A/compare/v0.2.4...v0.2.5) (2025-06-30)
38 |
39 |
40 | ### ⚠ BREAKING CHANGES
41 |
42 | * **spec:** Add a required protocol version to the agent card. ([#802](https://github.com/a2aproject/A2A/issues/802))
43 | * Support for multiple pushNotification config per task ([#738](https://github.com/a2aproject/A2A/issues/738)) ([f355d3e](https://github.com/a2aproject/A2A/commit/f355d3e922de61ba97873fe2989a8987fc89eec2))
44 |
45 |
46 | ### Features
47 |
48 | * **spec:** Add a required protocol version to the agent card. ([#802](https://github.com/a2aproject/A2A/issues/802)) ([90fa642](https://github.com/a2aproject/A2A/commit/90fa64209498948b329a7b2ac6ec38942369157a))
49 | * **spec:** Support for multiple pushNotification config per task ([#738](https://github.com/a2aproject/A2A/issues/738)) ([f355d3e](https://github.com/a2aproject/A2A/commit/f355d3e922de61ba97873fe2989a8987fc89eec2))
50 |
51 |
52 | ### Documentation
53 |
54 | * update spec & doc topic with non-restartable tasks ([#770](https://github.com/a2aproject/A2A/issues/770)) ([ebc4157](https://github.com/a2aproject/A2A/commit/ebc4157ca87ae08d1c55e38e522a1a17201f2854))
55 |
56 | ## [0.2.4](https://github.com/a2aproject/A2A/compare/v0.2.3...v0.2.4) (2025-06-30)
57 |
58 |
59 | ### Features
60 |
61 | * feat: Add support for multiple transport announcement in AgentCard ([#749](https://github.com/a2aproject/A2A/issues/749)) ([b35485e](https://github.com/a2aproject/A2A/commit/b35485e02e796d15232dec01acfab93fc858c3ec))
62 |
63 | ## [0.2.3](https://github.com/a2aproject/A2A/compare/v0.2.2...v0.2.3) (2025-06-12)
64 |
65 |
66 | ### Bug Fixes
67 |
68 | * Address some typos in gRPC annotations ([#747](https://github.com/a2aproject/A2A/issues/747)) ([f506881](https://github.com/a2aproject/A2A/commit/f506881c9b8ff0632d7c7107d5c426646ae31592))
69 |
70 | ## [0.2.2](https://github.com/a2aproject/A2A/compare/v0.2.1...v0.2.2) (2025-06-09)
71 |
72 |
73 | ### ⚠ BREAKING CHANGES
74 |
75 | * Resolve spec inconsistencies with JSON-RPC 2.0
76 |
77 | ### Features
78 |
79 | * Add gRPC and REST definitions to A2A protocol specifications ([#695](https://github.com/a2aproject/A2A/issues/695)) ([89bb5b8](https://github.com/a2aproject/A2A/commit/89bb5b82438b74ff7bb0fafbe335db7100a0ac57))
80 | * Add protocol support for extensions ([#716](https://github.com/a2aproject/A2A/issues/716)) ([70f1e2b](https://github.com/a2aproject/A2A/commit/70f1e2b0c68a3631888091ce9460a9f7fbfbdff2))
81 | * **spec:** Add an optional iconUrl field to the AgentCard ([#687](https://github.com/a2aproject/A2A/issues/687)) ([9f3bb51](https://github.com/a2aproject/A2A/commit/9f3bb51257f008bd878d85e00ec5e88357016039))
82 |
83 |
84 | ### Bug Fixes
85 |
86 | * Protocol should released as 0.2.2 ([22e7541](https://github.com/a2aproject/A2A/commit/22e7541be082c4f0845ff7fa044992cda05b437e))
87 | * Resolve spec inconsistencies with JSON-RPC 2.0 ([628380e](https://github.com/a2aproject/A2A/commit/628380e7e392bc8f1778ae991d4719bd787c17a9))
88 |
89 | ## [0.2.1](https://github.com/a2aproject/A2A/compare/v0.2.0...v0.2.1) (2025-05-27)
90 |
91 | ### Features
92 |
93 | * Add a new boolean for supporting authenticated extended cards ([#618](https://github.com/a2aproject/A2A/issues/618)) ([e0a3070](https://github.com/a2aproject/A2A/commit/e0a3070fc289110d43faf2e91b4ffe3c29ef81da))
94 | * Add optional referenceTaskIds for task followups ([#608](https://github.com/a2aproject/A2A/issues/608)) ([5368e77](https://github.com/a2aproject/A2A/commit/5368e7728cb523caf1a9218fda0b1646325f524b))
95 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as
6 | contributors and maintainers pledge to making participation in our project and
7 | our community a harassment-free experience for everyone, regardless of age, body
8 | size, disability, ethnicity, gender identity and expression, level of
9 | experience, education, socio-economic status, nationality, personal appearance,
10 | race, religion, or sexual identity and orientation.
11 |
12 | ## Our Standards
13 |
14 | Examples of behavior that contributes to creating a positive environment
15 | include:
16 |
17 | * Using welcoming and inclusive language
18 | * Being respectful of differing viewpoints and experiences
19 | * Gracefully accepting constructive criticism
20 | * Focusing on what is best for the community
21 | * Showing empathy towards other community members
22 |
23 | Examples of unacceptable behavior by participants include:
24 |
25 | * The use of sexualized language or imagery and unwelcome sexual attention or
26 | advances
27 | * Trolling, insulting/derogatory comments, and personal or political attacks
28 | * Public or private harassment
29 | * Publishing others' private information, such as a physical or electronic
30 | address, without explicit permission
31 | * Other conduct which could reasonably be considered inappropriate in a
32 | professional setting
33 |
34 | ## Our Responsibilities
35 |
36 | Project maintainers are responsible for clarifying the standards of acceptable
37 | behavior and are expected to take appropriate and fair corrective action in
38 | response to any instances of unacceptable behavior.
39 |
40 | Project maintainers have the right and responsibility to remove, edit, or reject
41 | comments, commits, code, wiki edits, issues, and other contributions that are
42 | not aligned to this Code of Conduct, or to ban temporarily or permanently any
43 | contributor for other behaviors that they deem inappropriate, threatening,
44 | offensive, or harmful.
45 |
46 | ## Scope
47 |
48 | This Code of Conduct applies both within project spaces and in public spaces
49 | when an individual is representing the project or its community. Examples of
50 | representing a project or community include using an official project e-mail
51 | address, posting via an official social media account, or acting as an appointed
52 | representative at an online or offline event. Representation of a project may be
53 | further defined and clarified by project maintainers.
54 |
55 | This Code of Conduct also applies outside the project spaces when the Project
56 | Steward has a reasonable belief that an individual's behavior may have a
57 | negative impact on the project or its community.
58 |
59 | ## Conflict Resolution
60 |
61 | We do not believe that all conflict is bad; healthy debate and disagreement
62 | often yield positive results. However, it is never okay to be disrespectful or
63 | to engage in behavior that violates the project’s code of conduct.
64 |
65 | If you see someone violating the code of conduct, you are encouraged to address
66 | the behavior directly with those involved. Many issues can be resolved quickly
67 | and easily, and this gives people more control over the outcome of their
68 | dispute. If you are unable to resolve the matter for any reason, or if the
69 | behavior is threatening or harassing, report it. We are dedicated to providing
70 | an environment where participants feel welcome and safe.
71 |
72 | Reports should be directed to [a2a-coc@googlegroups.com](mailto:a2a-coc@googlegroups.com), the
73 | Project Steward(s) for A2A. It is the Project Steward’s duty to
74 | receive and address reported violations of the code of conduct. They will then
75 | work with a committee consisting of representatives from the A2A project and leadership.
76 |
77 | We will investigate every complaint, but you may not receive a direct response.
78 | We will use our discretion in determining when and how to follow up on reported
79 | incidents, which may range from not taking action to permanent expulsion from
80 | the project and project-sponsored spaces. We will notify the accused of the
81 | report and provide them an opportunity to discuss it before any action is taken.
82 | The identity of the reporter will be omitted from the details of the report
83 | supplied to the accused. In potentially harmful situations, such as ongoing
84 | harassment or threats to anyone's safety, we may take action without notice.
85 |
86 | ## Attribution
87 |
88 | This Code of Conduct is adapted from the Contributor Covenant, version 1.4,
89 | available at
90 | https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
91 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # How to contribute
2 |
3 | We'd love to accept your patches and contributions to this project.
4 |
5 | ## Contribution process
6 |
7 | ### Code reviews
8 |
9 | All submissions, including submissions by project members, require review. We
10 | use GitHub pull requests for this purpose. Consult
11 | [GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
12 | information on using pull requests.
13 |
14 | ### Contributor Guide
15 |
16 | You may follow these steps to contribute:
17 |
18 | 1. **Fork the official repository.** This will create a copy of the official repository in your own account.
19 | 2. **Sync the branches.** This will ensure that your copy of the repository is up-to-date with the latest changes from the official repository.
20 | 3. **Work on your forked repository's feature branch.** This is where you will make your changes to the code.
21 | 4. **Commit your updates on your forked repository's feature branch.** This will save your changes to your copy of the repository.
22 | 5. **Submit a pull request to the official repository's main branch.** This will request that your changes be merged into the official repository.
23 | 6. **Resolve any linting errors.** This will ensure that your changes are formatted correctly.
24 |
25 | Here are some additional things to keep in mind during the process:
26 |
27 | - **Test your changes.** Before you submit a pull request, make sure that your changes work as expected.
28 | - **Be patient.** It may take some time for your pull request to be reviewed and merged.
29 |
--------------------------------------------------------------------------------
/GOVERNANCE.md:
--------------------------------------------------------------------------------
1 | # Agent2Agent (A2A) Governance
2 |
3 | The Agent2Agent project is governed by the Technical Steering Committee. The Committee has eight seats, each held by the following companies:
4 |
5 | | Company | Representative | Title | Contact |
6 | | :--- | :--- | :--- | :--- |
7 | | **Google** | Todd Segal | Principal Engineer | [@ToddSegal](https://github.com/ToddSegal) |
8 | | **Microsoft** | Darrel Miller | Partner API Architect | [@darrelmiller](https://github.com/darrelmiller) |
9 | | **Cisco** | Luca Muscariello | Principal Engineer | [@muscariello](https://github.com/muscariello) |
10 | | **Amazon Web Services** | Nicholas Aldridge | Principal Engineer | [@000-000-000-000-000](https://github.com/000-000-000-000-000) |
11 | | **Salesforce** | Sam Sharaf | Sr. Director Product Management | [@samuelsharaf](https://github.com/samuelsharaf) |
12 | | **ServiceNow** | Sean Hughes | AI Ecosystem Director | [@hughesthe1st](https://github.com/hughesthe1st) |
13 | | **SAP** | Sivakumar N. | Vice President | [LinkedIn](https://www.linkedin.com/in/siva-kumar-n/) |
14 | | **IBM Research** | Kate Blair | Director of Incubation | [@geneknit](https://github.com/geneknit) |
15 |
16 | ## Mission and Scope of the Project
17 |
18 | 1. The mission of the Project is to help AI agents across different ecosystems communicate with each other. The Project includes collaborative development of the following components:
19 |
20 | 1. the Agent2Agent Protocol (the "Protocol");
21 |
22 | 2. a SDK for designing implementations of the Protocol and related software components; and
23 |
24 | 3. documentation and other artifacts related to the Project.
25 |
26 | 2. The scope of the Project includes collaborative development under the Project License (as defined herein) supporting the mission, including documentation, testing, integration and the creation of other artifacts that aid the development, deployment, operation or adoption of the open source project.
27 |
28 | ## Technical Steering Committee
29 |
30 | 1. The Technical Steering Committee (the "TSC") will be responsible for all technical oversight of the open source Project.
31 | 2. **TSC Composition**
32 |
33 | a. **"Startup Phase."** At the inception of the Project, each organization listed in the [`GOVERNANCE`](GOVERNANCE.md) file in the governance repository of the Project will have the right to appoint (and remove and replace) one employee to serve as a voting member of the TSC.
34 |
35 | b. **"Steady State."** The TSC will decide upon a "steady state" composition of the TSC (whether by election, sub-project technical leads, or other method as determined by the TSC) for composition of the TSC from the date that is 18 months following the inception of the Project, or at such other point as determined by the TSC.
36 |
37 | c. The TSC may choose an alternative approach for determining the voting members of the TSC, and any such alternative approach will be documented in the GOVERNANCE file. Any meetings of the Technical Steering Committee are intended to be open to the public, and can be conducted electronically, via teleconference, or in person.
38 |
39 | 3. TSC projects generally will involve Contributors and Maintainers. The TSC may adopt or modify roles so long as the roles are documented in the CONTRIBUTING file. Unless otherwise documented:
40 |
41 | a. **Contributors** include anyone in the technical community that contributes code, documentation, or other technical artifacts to the Project;
42 |
43 | b. **Maintainers** are Contributors who have earned the ability to modify ("commit") source code, documentation or other technical artifacts in a project's repository; and
44 |
45 | c. A Contributor may become a Maintainer by a vote of the TSC. A Maintainer may be removed by a vote of the TSC.
46 |
47 | d. Participation in the Project through becoming a Contributor and Maintainer is open to anyone so long as they abide by the terms of this Charter.
48 | 4. The TSC may:
49 | 1. establish work flow procedures for the submission, approval, and closure/archiving of projects,
50 | 2. set requirements for the promotion of Contributors to Maintainer status, as applicable, and
51 | 3. amend, adjust, refine and/or eliminate the roles of Contributors, and Maintainer, and create new roles, and publicly document any TSC roles, as it sees fit.
52 | 5. The TSC may elect a TSC Chair, who will preside over meetings of the TSC and will serve until their resignation or replacement by the TSC.
53 | 6. **Responsibilities:** The TSC will be responsible for all aspects of oversight relating to the Project, which may include:
54 | 1. coordinating the technical direction of the Project;
55 | 2. approving project or system proposals (including, but not limited to, incubation, deprecation, and changes to a sub-project's scope);
56 | 3. organizing sub-projects and removing sub-projects;
57 | 4. creating sub-committees or working groups to focus on cross-project technical issues and requirements;
58 | 5. appointing representatives to work with other open source or open standards communities;
59 | 6. establishing community norms, workflows, issuing releases, and security issue reporting policies;
60 | 7. approving and implementing policies and processes for contributing (to be published in the [`CONTRIBUTING`](CONTRIBUTING.md) file) and coordinating with the series manager of the Project (as provided for in the Series Agreement, the "Series Manager") to resolve matters or concerns that may arise as set forth in Section 7 of this Charter;
61 | 8. discussions, seeking consensus, and where necessary, voting on technical matters relating to the code base that affect multiple projects; and
62 | 9. coordinating any marketing, events, or communications regarding the Project.
63 |
64 | ### TSC Voting
65 |
66 | While the Project aims to operate as a consensus-based community, if any TSC decision requires a vote to move the Project forward, the voting members of the TSC will vote on a one vote per voting member basis.
67 |
68 | Quorum for TSC meetings requires at least fifty percent of all voting members of the TSC to be present. The TSC may continue to meet if quorum is not met but will be prevented from making any decisions at the meeting. Except as provided in Section 7.c. and 8.a, decisions by vote at a meeting require a majority vote of those in attendance, provided quorum is met. Decisions made by electronic vote without a meeting require a majority vote of all voting members of the TSC.
69 |
70 | ### TSC Meetings
71 |
72 | Our hope is that the first TSC meeting will be held in August 2025. Once the TSC representatives are finalized, scheduling will begin. In the interim we have drafted a [working doc for TSC Meeting Agendas](https://docs.google.com/document/d/1Dx6qYfCjSChHKRMwLJcvtDjq6igYTAKFW9Vg1IMPCUk/view).
73 |
74 | ## Project Communications
75 |
76 | The A2A project utilizes Discord for chat conversations about the project. All are welcome and encouraged to join the [A2A Discord](http://discord.gg/a2aprotocol). Discussion is encouraged however we do remind the community that chat is ephemeral, and not all members of the project are active in chat at the same time.
77 |
78 | Therefore, any discussions about feature proposals, significant changes to the project architecture or governance, etc. should be held in GitHub with adequate notice and time for comment. Look for specifics on that timing coming soon as the TSC ramps up. Just keep in mind - our goal is that GitHub is the source of truth for significant project decisions.
79 |
80 | Additional communication avenues will likely be added - stay tuned.
81 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Agent2Agent (A2A) Protocol
2 |
3 | [](https://pypi.org/project/a2a-sdk)
4 | [](LICENSE)
5 | [](https://repomapr.com/a2aproject/A2A)
6 |
7 | 
8 |
9 | **An open protocol enabling communication and interoperability between opaque agentic applications.**
10 |
11 | The Agent2Agent (A2A) protocol addresses a critical challenge in the AI landscape: enabling gen AI agents, built on diverse frameworks by different companies running on separate servers, to communicate and collaborate effectively - as agents, not just as tools. A2A aims to provide a common language for agents, fostering a more interconnected, powerful, and innovative AI ecosystem.
12 |
13 | With A2A, agents can:
14 |
15 | - Discover each other's capabilities.
16 | - Negotiate interaction modalities (text, forms, media).
17 | - Securely collaborate on long running tasks.
18 | - Operate without exposing their internal state, memory, or tools.
19 |
20 | ## Intro to A2A Video
21 |
22 | [](https://goo.gle/a2a-video)
23 |
24 | ## Why A2A?
25 |
26 | As AI agents become more prevalent, their ability to interoperate is crucial for building complex, multi-functional applications. A2A aims to:
27 |
28 | - **Break Down Silos:** Connect agents across different ecosystems.
29 | - **Enable Complex Collaboration:** Allow specialized agents to work together on tasks that a single agent cannot handle alone.
30 | - **Promote Open Standards:** Foster a community-driven approach to agent communication, encouraging innovation and broad adoption.
31 | - **Preserve Opacity:** Allow agents to collaborate without needing to share internal memory, proprietary logic, or specific tool implementations, enhancing security and protecting intellectual property.
32 |
33 | ### Key Features
34 |
35 | - **Standardized Communication:** JSON-RPC 2.0 over HTTP(S).
36 | - **Agent Discovery:** Via "Agent Cards" detailing capabilities and connection info.
37 | - **Flexible Interaction:** Supports synchronous request/response, streaming (SSE), and asynchronous push notifications.
38 | - **Rich Data Exchange:** Handles text, files, and structured JSON data.
39 | - **Enterprise-Ready:** Designed with security, authentication, and observability in mind.
40 |
41 | ## Getting Started
42 |
43 | - 📚 **Explore the Documentation:** Visit the [Agent2Agent Protocol Documentation Site](https://a2a-protocol.org) for a complete overview, the full protocol specification, tutorials, and guides.
44 | - 📝 **View the Specification:** [A2A Protocol Specification](https://a2a-protocol.org/latest/specification/)
45 | - Use the SDKs:
46 | - [🐍 A2A Python SDK](https://github.com/a2aproject/a2a-python) `pip install a2a-sdk`
47 | - [🧑💻 A2A JS SDK](https://github.com/a2aproject/a2a-js) `npm install @a2a-js/sdk`
48 | - [☕️ A2A Java SDK](https://github.com/a2aproject/a2a-java) using maven
49 | - [🔷 A2A .NET SDK](https://github.com/a2aproject/a2a-dotnet) using [NuGet](https://www.nuget.org/packages/A2A) `dotnet add package A2A`
50 | - 🎬 Use our [samples](https://github.com/a2aproject/a2a-samples) to see A2A in action
51 |
52 | ## Contributing
53 |
54 | We welcome community contributions to enhance and evolve the A2A protocol!
55 |
56 | - **Questions & Discussions:** Join our [GitHub Discussions](https://github.com/a2aproject/A2A/discussions).
57 | - **Issues & Feedback:** Report issues or suggest improvements via [GitHub Issues](https://github.com/a2aproject/A2A/issues).
58 | - **Contribution Guide:** See our [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to contribute.
59 | - **Private Feedback:** Use this [Google Form](https://goo.gle/a2a-feedback).
60 | - **Partner Program:** Google Cloud customers can join our partner program via this [form](https://goo.gle/a2a-partner).
61 |
62 | ## What's next
63 |
64 | ### Protocol Enhancements
65 |
66 | - **Agent Discovery:**
67 | - Formalize inclusion of authorization schemes and optional credentials directly within the `AgentCard`.
68 | - **Agent Collaboration:**
69 | - Investigate a `QuerySkill()` method for dynamically checking unsupported or unanticipated skills.
70 | - **Task Lifecycle & UX:**
71 | - Support for dynamic UX negotiation _within_ a task (e.g., agent adding audio/video mid-conversation).
72 | - **Client Methods & Transport:**
73 | - Explore extending support to client-initiated methods (beyond task management).
74 | - Improvements to streaming reliability and push notification mechanisms.
75 |
76 | ## About
77 |
78 | The A2A Protocol is an open-source project by Google LLC, under the [Apache License 2.0](LICENSE), and is open to contributions from the community.
79 |
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | To report a security issue, please use [g.co/vulnz](https://g.co/vulnz).
4 |
5 | The Google Security Team will respond within 5 working days of your report on g.co/vulnz.
6 |
7 | We use g.co/vulnz for our intake, and do coordination and disclosure here using GitHub Security Advisory to privately discuss and fix the issue.
8 |
--------------------------------------------------------------------------------
/docs/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Redirecting...
7 |
40 |
41 |
42 |
43 |
A2A - Page Not Found
44 |
We are attempting to redirect you to the latest version of this page.
45 |
If you are not redirected automatically, please navigate to the A2A project homepage.
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/docs/README.md:
--------------------------------------------------------------------------------
1 | # A2A Docs
2 |
3 |
4 |
5 | ## Developing A2A docs
6 |
7 | 1. Clone this repository and `cd` into the repository directory
8 | 2. Run `pip install -r requirements-docs.txt`
9 | 3. Run `mkdocs serve`, edit `.md` files, and live preview
10 | 4. Contribute docs changes as usual
11 |
12 | ## How it works
13 |
14 | - The A2A docs use [mkdocs](https://www.mkdocs.org/) and the
15 | [mkdocs-material theme](https://squidfunk.github.io/mkdocs-material/)
16 | - All of the source documentation / Markdown files related to the A2A docs are
17 | in the `docs/` directory in the A2A repository
18 | - `mkdocs.yml` in the repository root contains all of the docs config, including
19 | the site navigation and organization
20 | - There is a GitHub Action in `.github/workflows/docs.yml` that builds and
21 | publishes the docs and pushes the built assets to the `gh-pages` branch in
22 | this repository using `mkdocs gh-deploy --force`. This happens automatically for all
23 | commits / merges to `main`.
24 | - The A2A documentation is hosted in GitHub pages, and the settings for this are
25 | in the A2A repository settings in GitHub.
26 |
27 | ## Building the Python SDK Documentation
28 |
29 | The Python SDK documentation is built using [Sphinx](https://www.sphinx-doc.org/).
30 |
31 | ### Prerequisites
32 |
33 | Ensure you have installed the documentation dependencies:
34 |
35 | ```bash
36 | pip install -r ../../requirements-docs.txt
37 | ```
38 |
39 | ### Building the Docs
40 |
41 | 1. Navigate to the `docs/sdk/python` directory.
42 | 2. Run the following command to build the HTML documentation:
43 |
44 | ```bash
45 | sphinx-build -b html docs/sdk/python docs/sdk/python/api
46 | ```
47 |
48 | 3. The generated HTML files will be in the `_build/html` directory. You can open `_build/html/index.html` in your browser to view the documentation.
49 |
--------------------------------------------------------------------------------
/docs/assets/a2a-actors.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-a2a/A2A/64f1064598e3b33cf06c40981e47aba5fb82f1e3/docs/assets/a2a-actors.png
--------------------------------------------------------------------------------
/docs/assets/a2a-banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-a2a/A2A/64f1064598e3b33cf06c40981e47aba5fb82f1e3/docs/assets/a2a-banner.png
--------------------------------------------------------------------------------
/docs/assets/a2a-logo-black.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/docs/assets/a2a-logo-white.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/docs/assets/a2a-main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-a2a/A2A/64f1064598e3b33cf06c40981e47aba5fb82f1e3/docs/assets/a2a-main.png
--------------------------------------------------------------------------------
/docs/assets/a2a-mcp-readme.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-a2a/A2A/64f1064598e3b33cf06c40981e47aba5fb82f1e3/docs/assets/a2a-mcp-readme.png
--------------------------------------------------------------------------------
/docs/assets/a2a-mcp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google-a2a/A2A/64f1064598e3b33cf06c40981e47aba5fb82f1e3/docs/assets/a2a-mcp.png
--------------------------------------------------------------------------------
/docs/assets/adk.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/docs/assets/ag2-black.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
41 |
--------------------------------------------------------------------------------
/docs/assets/langgraph-color.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/docs/community.md:
--------------------------------------------------------------------------------
1 | ---
2 | hide:
3 | - navigation
4 | ---
5 |
6 | # Welcome to the A2A Community
7 |
8 | The **Agent2Agent (A2A) protocol** is generating significant buzz across the
9 | tech world, and for good reason! This open interoperability protocol is designed
10 | to enable **seamless collaboration between AI agents across diverse frameworks
11 | and vendors**. By standardizing communication, A2A aims to unlock complex
12 | workflows, enhance productivity, and foster a new era of **"Agent
13 | Interoperability"**. Don't just take our word for it – see what the community is
14 | saying!
15 |
16 | ## The Word on the Street: Social Highlights
17 |
18 | The launch of A2A has sparked lively discussions and positive reactions on various social platforms. Here's a glimpse of the excitement:
19 |
20 | - **Rapid Interest and Adoption:** The A2A [GitHub repository](https://github.com/a2aproject/A2A) has seen an **explosive surge in popularity**. This rapid interest underscores the industry's eagerness for a standardized agent communication protocol, with many companies collaborating and contributing.
21 |
22 | - **Microsoft's interest via Semantic Kernel:** [Asha Sharma](https://www.linkedin.com/in/aboutasha/), Head of AI Platform Product at Microsoft, [announced on LinkedIn](https://www.linkedin.com/posts/aboutasha_a2a-ugcPost-7318649411704602624-0C_8) that "**Semantic Kernel now speaks A2A: a lightweight JSON-RPC protocol that lets agents swap context, not code or credentials, over plain HTTP. Drop it into your Foundry stack for instant, secure, async interoperability with any A2A-compliant agent, regardless of modality**". The post received numerous positive reactions, including "**A2A support in Semantic Kernel is a key unlock — context-level interoperability without sharing code or creds is how agent ecosystems scale securely across clouds**".
23 |
24 | - **Matt Pocock's Diagramming Intent:** [Matt Pocock](https://x.com/mattpocockuk), a well-known developer educator, [shared on X](https://x.com/mattpocockuk/status/1910002033018421400) "**I've just been reading the Agent2Agent technical docs - Google's new protocol for agent to agent communication. You know what that means. Let's diagram them:**". This tweet, liked and reposted hundreds of times, includes some great diagrams explaining the A2A protocol.
25 |
26 | - **Craig McLuckie's "Hot Take":** [Craig McLuckie](https://www.linkedin.com/in/craigmcluckie/) shared his initial thoughts on [LinkedIn](https://www.linkedin.com/posts/craigmcluckie_hot-take-on-agent2agent-vs-mcp-google-just-activity-7315939233792176128-4rGQ) "**Hot take on Agent2Agent vs MCP**". His post highlighted Google's careful positioning of A2A as focused on interactions _between_ agentic systems, rather than agents interacting with resources (the focus of MCP). This distinction is crucial for improving models' ability to understand expectations from other agents. McLuckie also pointed out the potential for A2A to enable systems to **advertise specific capabilities and specialities**, which is seen as "**sensible**".
27 |
28 | ## Community deep dive videos
29 |
30 | - [Zachary Huang](https://www.youtube.com/@ZacharyLLM) explains in his [YouTube video](https://www.youtube.com/watch?v=wrCF8MoXC_I), A2A "**complements**" MCP. While MCP acts as a "**USB-C port for AI applications**" connecting agents to tools, A2A acts as a communication standard **between the intelligent agents themselves**. This layered approach allows for building powerful systems where agents use A2A to coordinate and MCP to access necessary tools.
31 | - [Jack Herrington](https://www.youtube.com/@jherr) on his [YouTube video](https://www.youtube.com/watch?v=voaKr_JHvF4) walks through some of the provided examples and closes with his opinion that **"Having a specific protocol for agents to talk to other agents is valuable"** and reiterates, **"LLM plus tools are agents. MCP gives agents those tools. So that's why A2A and MCP play really nicely together**".
32 | - [Cole Medin](https://www.youtube.com/@ColeMedin) suggested on his [YouTube video](https://www.youtube.com/watch?v=ywMWpmOOaSo) that "**A2A was released very recently but it's already looking like it's going to follow a similar path**" to MCP in terms of growing interest. He also demonstrates the samples step by step and provides a summary of core concepts.
33 | - [Sam Witteveen](https://www.youtube.com/@samwitteveenai) covered A2A on his [YouTube video](https://www.youtube.com/watch?v=rAeqTaYj_aI) immediately after Google Cloud Next, discussing the value of making protocols open and not ending up with conflicting protocols.
34 |
35 | ## Community Contributions to A2A
36 |
37 | - Python Quickstart Tutorial [PR\#202](https://github.com/a2aproject/A2A/pull/202)
38 | - LlamaIndex submitted a sample implementation [PR\#179](https://github.com/a2aproject/A2A/pull/179)
39 | - Autogen sample server [PR\#232](https://github.com/a2aproject/A2A/pull/232)
40 | - AG2 \+ MCP example [PR\#230](https://github.com/a2aproject/A2A/pull/230)
41 | - PydanticAI example [PR\#127](https://github.com/a2aproject/A2A/pull/127)
42 | - Go example [PR\#52](https://github.com/a2aproject/A2A/pull/52)
43 | - Daytona sandbox running agent [PR\#170](https://github.com/a2aproject/A2A/pull/170)
44 |
45 | ## What is Driving This Excitement?
46 |
47 | The enthusiasm surrounding A2A stems from its potential to address key challenges in building sophisticated AI applications:
48 |
49 | - **Breaking Down Silos:** A2A aims to overcome the limitations of siloed AI systems by providing a **universal framework for agents built on different platforms to communicate and collaborate securely**.
50 |
51 | - **Enabling Complex Collaboration:** For tasks that require the expertise of multiple specialized agents, A2A provides a standardized way for them to **delegate tasks, exchange information, and coordinate actions**. This mirrors how human teams work together, distributing responsibilities for greater efficiency.
52 |
53 | - **Dynamic Agent Discovery:** A key feature of A2A is the ability for agents to **discover the capabilities of other agents** through standardized "**Agent Cards**". This dynamic discovery allows for more flexible and adaptable multi-agent systems.
54 |
55 | - **Complementary to MCP:** As stated on our [A2A ❤️ MCP topic page](topics/a2a-and-mcp.md) and affirmed by many community, A2A "**complements**" MCP. MCP acts as a communication standard between models and resources, providing tools for agents. A2A acts as a communication standard **between the intelligent agents themselves**. This layered approach allows for building powerful systems where agents use A2A to coordinate and MCP to access necessary tools.
56 |
57 | - **Open and Community-Driven:** Google has released A2A as **open source**, inviting contributions from the broader community to refine and expand its functionality. This commitment to open collaboration fosters innovation and broad adoption.
58 |
59 | ## The Future is Interoperable
60 |
61 | The social media buzz surrounding Google's A2A protocol clearly indicates a strong interest and belief in its potential to revolutionize the development of multi-agent AI systems. By providing a standardized way for AI agents to communicate and collaborate, A2A is poised to unlock new levels of automation, efficiency, and innovation. As enterprises increasingly adopt AI agents for a wide range of tasks, A2A represents a crucial step towards realizing the full power of interconnected AI ecosystems.
62 |
63 | Stay tuned for more updates and join the growing community building the future of AI interoperability with A2A!
64 |
--------------------------------------------------------------------------------
/docs/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | hide:
3 | - navigation
4 | - toc
5 | ---
6 |
7 | # Agent2Agent (A2A) Protocol
8 |
9 |
10 | {width="70%"}
11 |
12 | The Agent2Agent (A2A) Protocol is an open standard
13 | designed to enable seamless communication and collaboration between AI agents.
14 | In a world where agents are built using diverse frameworks and by different vendors,
15 | A2A provides a common language, breaking down silos and fostering interoperability.
16 |
17 |
18 |
19 | !!! abstract ""
20 | Build with
21 | **[{class="twemoji lg middle"} ADK](https://google.github.io/adk-docs/)** _(or any framework)_,
22 | equip with **MCP** _(or any tool)_,
23 | and communicate with
24 | **{class="twemoji sm middle"} A2A**,
25 | to remote agents, local agents, and humans.
26 |
27 |
28 |
29 | - :material-lightbulb-outline:{ .lg .middle } **A2A** Announcements
30 |
31 | Ramp up quickly
32 |
33 | [:octicons-arrow-right-24: Announcing the A2A Protocol (Apr)](https://developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/)
34 | our initial blog
35 |
36 | [:octicons-arrow-right-24: Agents are not tools (Jun)](https://www.googlecloudcommunity.com/gc/Community-Blogs/Agents-are-not-tools/ba-p/922716)
37 | our TL thought piece
38 |
39 | [:octicons-arrow-right-24: Google Cloud donates A2A to Linux Foundation (Jun)](https://developers.googleblog.com/en/google-cloud-donates-a2a-to-linux-foundation/)
40 | covered by [Forbes](https://www.forbes.com/sites/janakirammsv/2025/06/25/key-tech-firms-unite-as-google-donates-a2a-to-linux-foundation/)
41 |
42 | Dive deep with end to end examples
43 |
44 | [:octicons-arrow-right-24: Designing with A2A (O'Reilly)](https://www.oreilly.com/radar/designing-collaborative-multi-agent-systems-with-the-a2a-protocol/)
45 |
46 | [:octicons-arrow-right-24: Start the Python Tutorial](tutorials/python/1-introduction.md)
47 |
48 | - :material-play-circle:{ .lg .middle } **Video** Intro in <8 min
49 |
50 |
51 |
52 |
60 |
61 | - :material-account-group-outline:{ .lg .middle } **Interoperability**
62 |
63 | Connect agents built on different platforms (LangGraph, CrewAI, Semantic Kernel, custom solutions) to create powerful, composite AI systems.
64 |
65 | - :material-lan-connect:{ .lg .middle } **Complex Workflows**
66 |
67 | Enable agents to delegate sub-tasks, exchange information, and coordinate actions to solve complex problems that a single agent cannot.
68 |
69 | - :material-shield-key-outline:{ .lg .middle } **Secure & Opaque**
70 |
71 | Agents interact without needing to share internal memory, tools, or proprietary logic, ensuring security and preserving intellectual property.
72 |
73 |
74 |
75 | ---
76 |
77 | ## A2A and MCP: Complementary Protocols
78 |
79 | {width="60%"}
80 | {style="text-align: center; margin-bottom:1em; margin-top:1em;"}
81 |
82 | A2A and the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) are complementary standards for building robust agentic applications:
83 |
84 | - **MCP (Model Context Protocol):** Connects agents to **tools, APIs, and resources** with structured inputs/outputs. Think of it as the way agents access their capabilities.
85 | - **A2A (Agent2Agent Protocol):** Facilitates **dynamic, multimodal communication between different agents** as peers. It's how agents collaborate, delegate, and manage shared tasks.
86 |
87 | [Learn more about A2A and MCP](./topics/a2a-and-mcp.md)
88 |
89 | ---
90 |
91 | ## Get Started with A2A
92 |
93 |
94 |
95 | - :material-book-open:{ .lg .middle } **Read the Introduction**
96 |
97 | Understand the core ideas behind A2A.
98 |
99 | [:octicons-arrow-right-24: What is A2A?](./topics/what-is-a2a.md)
100 |
101 | [:octicons-arrow-right-24: Key Concepts](./topics/key-concepts.md)
102 |
103 | - :material-file-document-outline:{ .lg .middle } **Dive into the Specification**
104 |
105 | Explore the detailed technical definition of the A2A protocol.
106 |
107 | [:octicons-arrow-right-24: Protocol Specification](./specification.md)
108 |
109 | - :material-application-cog-outline:{ .lg .middle } **Follow the Tutorials**
110 |
111 | Build your first A2A-compliant agent with our step-by-step Python quickstart.
112 |
113 | [:octicons-arrow-right-24: Python Tutorial](./tutorials/python/1-introduction.md)
114 |
115 | - :material-code-braces:{ .lg .middle } **Explore Code Samples**
116 |
117 | See A2A in action with sample clients, servers, and agent framework integrations.
118 |
119 | [:fontawesome-brands-github: GitHub Samples](https://github.com/a2aproject/a2a-samples)
120 |
121 | - :material-code-braces:{ .lg .middle } **Download a SDK**
122 |
123 | [:octicons-arrow-right-24: A2A Python SDK](https://github.com/a2aproject/a2a-python)
124 | [:octicons-arrow-right-24: A2A JS SDK](https://github.com/a2aproject/a2a-js)
125 | [:octicons-arrow-right-24: A2A Java SDK](https://github.com/a2aproject/a2a-java)
126 | [:octicons-arrow-right-24: A2A .NET SDK](https://github.com/a2aproject/a2a-dotnet)
127 |
128 |
129 |
--------------------------------------------------------------------------------
/docs/partners.md:
--------------------------------------------------------------------------------
1 | ---
2 | hide:
3 | - navigation
4 | ---
5 |
6 | # Partners
7 |
8 | Below is a list of partners (and a link to their A2A announcement or blog post,
9 | if available) who are part of the A2A community and are helping build, codify,
10 | and adopt A2A as the standard protocol for AI agents to communicate and
11 | collaborate effectively with each other and with users.
12 |
13 | !!! note
14 |
15 | If you're interested in becoming a partner of A2A and getting your listing added to or updated on this page, let us know by [submitting this form](https://goo.gle/a2a-partner-form), and we'll contact you soon!
16 |
17 | - [Accelirate Inc](https://www.accelirate.com)
18 | - [Accenture](https://www.accenture.com)
19 | - [Activeloop](https://www.activeloop.ai/)
20 | - [Adobe](https://www.adobe.com)
21 | - [AI21 Labs](https://www.ai21.com/)
22 | - [AI71](https://ai71.ai/)
23 | - [Aisera](https://aisera.com/)
24 | - [Almawave.it](http://www.almawave.it)
25 | - [AliCloud](http://www.alibabacloud.com)
26 | - [ArcBlock](http://www.arcblock.io)
27 | - [Arize](https://arize.com/blog/arize-ai-and-future-of-agent-interoperability-embracing-googles-a2a-protocol/)
28 | - [Articul8](https://www.articul8.ai/news/unleashing-the-next-frontier-of-enterprise-ai-introducing-model-mesh-dock-and-inter-lock-and-our-a2-a-partnership-with-google)
29 | - [ask-ai.com](https://ask-ai.com)
30 | - [Atlassian](https://www.atlassian.com)
31 | - [Auth0](https://auth0.com/blog/auth0-google-a2a/)
32 | - [Autodesk](https://www.autodesk.com)
33 | - [AWS](https://aws.amazon.com/)
34 | - [Beekeeper](http://beekeeper.io)
35 | - [BCG](https://www.bcg.com)
36 | - [Block Inc](https://block.xyz/)
37 | - [Bloomberg LP](http://techatbloomberg.com/)
38 | - [BLUEISH Inc](https://www.blueish.co.jp/)
39 | - [BMC Software Inc](https://www.bmc.com/it-solutions/bmc-helix.html)
40 | - [Boomi](https://boomi.com/)
41 | - [Box](https://www.box.com)
42 | - [Bridge2Things Automation Process GmbH](http://bridge2things.at)
43 | - [Cafe 24](https://www.cafe24corp.com/en/company/about)
44 | - [C3 AI](https://c3.ai)
45 | - [Capgemini](https://www.capgemini.com)
46 | - [Chronosphere](https://chronosphere.io)
47 | - [Cisco](https://www.cisco.com/)
48 | - [Codimite PTE LTD](https://codimite.ai/)
49 | - [Cognigy](https://www.cognigy.com/)
50 | - [Cognizant](https://www.cognizant.com)
51 | - [Cohere](https://cohere.com)
52 | - [Collibra](https://www.collibra.com)
53 | - [Confluent](https://developer.confluent.io)
54 | - [Contextual](https://contextual.ai)
55 | - [Cotality](https://cotality.com) (fka Corelogic)
56 | - [Crubyt](https://www.crubyt.com)
57 | - [Cyderes](http://www.cyderes.com)
58 | - [Datadog](https://www.datadoghq.com)
59 | - [DataRobot](https://www.datarobot.com)
60 | - [DataStax](https://www.datastax.com)
61 | - [Decagon.ai](https://decagon.ai)
62 | - [Deloitte](https://www.prnewswire.com/news-releases/deloitte-expands-alliances-with-google-cloud-and-servicenow-to-accelerate-agentic-ai-adoption-in-the-enterprise-302423941.html)
63 | - [Devnagri](https://devnagri.com)
64 | - [Deutsche Telekom](https://www.telekom.com/en)
65 | - [Dexter Tech Labs](http://www.dextertechlabs.com)
66 | - [Distyl.ai](https://distyl.ai)
67 | - [Elastic](https://www.elastic.co)
68 | - [Ema.co](https://ema.co)
69 | - [EPAM](https://www.epam.com)
70 | - [Eviden (Atos Group)](https://atos.net/)
71 | - [fractal.ai](https://fractal.ai/new)
72 | - [GenAI Nebula9.ai Solutions Pvt Ltd](http://nebula9.ai)
73 | - [Glean](https://www.glean.com)
74 | - [Global Logic](https://www.globallogic.com/)
75 | - [Gravitee](https://www.gravitee.io/)
76 | - [GrowthLoop](https://growthloop.com)
77 | - [Guru](http://www.getguru.com)
78 | - [Harness](https://harness.io)
79 | - [HCLTech](https://www.hcltech.com)
80 | - [Headwaters](https://www.headwaters.co.jp)
81 | - [Hellotars](https://hellotars.com)
82 | - [Hexaware](https://hexaware.com/)
83 | - [HUMAN](https://www.humansecurity.com/)
84 | - [Incorta](https://www.incorta.com)
85 | - [Infinitus](https://www.infinitus.ai/)
86 | - [InfoSys](https://www.infosys.com)
87 | - [Intuit](https://www.intuit.com)
88 | - [Iron Mountain](https://www.ironmountain.com/)
89 | - [JetBrains](https://www.jetbrains.com)
90 | - [JFrog](https://jfrog.com)
91 | - [Kakao](https://www.kakaocorp.com)
92 | - [King's College London](https://www.kcl.ac.uk/informatics)
93 | - [KPMG](https://kpmg.com/us/en/media/news/kpmg-google-cloud-alliance-expansion-agentspace-adoption.html)
94 | - [Kyndryl](http://www.kyndryl.com)
95 | - [LabelBox](https://labelbox.com)
96 | - [LangChain](https://www.langchain.com)
97 | - [LG CNS](http://www.lgcns.com)
98 | - [Livex.ai](https://livex.ai)
99 | - [LlamaIndex](https://x.com/llama_index/status/1912949446322852185)
100 | - [LTIMindTtree](https://www.ltimindtree.com)
101 | - [Lumeris](https://www.lumeris.com/)
102 | - [Lyzr.ai](https://lyzr.ai)
103 | - [Magyar Telekom](https://www.telekom.hu/)
104 | - [Microsoft](https://www.microsoft.com/en-us/microsoft-cloud/blog/2025/05/07/empowering-multi-agent-apps-with-the-open-agent2agent-a2a-protocol/)
105 | - [MindsDB](https://mindsdb.com/blog/mindsdb-now-supports-the-agent2agent-(a2a)-protocol)
106 | - [McKinsey](https://www.mckinsey.com)
107 | - [MongoDB](https://www.mongodb.com)
108 | - [Monite](https://monite.com/)
109 | - [Neo4j](https://neo4j.com)
110 | - [New Relic](https://newrelic.com)
111 | - [Nisum](http://www.nisum.com)
112 | - [Noorle Inc](http://www.noorle.com)
113 | - [Optimizely Inc](https://www.optimizely.com/)
114 | - [Oracle / NetSuite](https://www.oracle.com/netsuite)
115 | - [Palo Alto Networks](https://www.paloaltonetworks.com/)
116 | - [PancakeAI](https://www.pancakeai.tech/)
117 | - [Pendo](https://www.pendo.io)
118 | - [PerfAI.ai](https://perfai.ai)
119 | - [Personal AI](https://personal.ai)
120 | - [Poppulo](https://www.poppulo.com/blog/poppulo-google-a2a-the-future-of-workplace-communication)
121 | - [Productive Edge](https://www.productiveedge.com/)
122 | - [Proofs](https://proofs.io)
123 | - [Publicis Sapient](https://www.publicissapient.com/)
124 | - [PWC](https://www.pwc.com)
125 | - [Quantiphi](https://www.quantiphi.com)
126 | - [Radix](https://radix.website/)
127 | - [RagaAI Inc](https://raga.ai/)
128 | - [Red Hat](https://www.redhat.com)
129 | - [Reltio Inc](http://www.reltio.com)
130 | - [S&P](https://www.spglobal.com)
131 | - [Sage](https://www.sage.com/en-us/)
132 | - [Salesforce](https://www.salesforce.com)
133 | - [SAP](https://news.sap.com/2025/04/sap-google-cloud-enterprise-ai-open-agent-collaboration-model-choice-multimodal-intelligence/)
134 | - [Sayone Technologies](https://www.sayonetech.com/)
135 | - [ServiceNow](https://www.servicenow.com)
136 | - [Siemens AG](https://siemens.com/)
137 | - [SoftBank Corp](https://www.softbank.jp/en//)
138 | - [Solace](https://solace.com/products/agent-mesh/)
139 | - [Solo.io](https://www.solo.io/)
140 | - [Stacklok, Inc](https://stacklok.com)
141 | - [Supertab](https://www.supertab.co/post/supertab-connect-partners-with-google-cloud-to-enable-ai-agents)
142 | - [Suzega](https://suzega.com/)
143 | - [TCS](https://www.tcs.com)
144 | - [Tech Mahindra](https://www.techmahindra.com/)
145 | - [Telefonica](https://www.telefonica.com/)
146 | - [Test Innovation Technology](https://www.test-it.com)
147 | - [the artinet project](https://artinet.io/)
148 | - [Think41](http://www.think41.com)
149 | - [Thoughtworks](https://www.thoughtworks.com/)
150 | - [Tredence](http://www.tredence.com)
151 | - [Two Tall Totems Ltd. DBA TTT Studios](https://ttt.studio)
152 | - [Typeface](https://typeface.ai)
153 | - [UKG](https://www.ukg.com)
154 | - [UiPath](https://www.uipath.com/newsroom/uipath-launches-first-enterprise-grade-platform-for-agentic-automation)
155 | - [Upwork, Inc.](https://www.upwork.com/)
156 | - [Ushur, Inc.](http://ushur.ai)
157 | - [Valle AI](http://www.valleai.com.br)
158 | - [Valtech](https://www.valtech.com/)
159 | - [Vervelo](https://www.vervelo.com/)
160 | - [VoltAgent](https://voltagent.dev/)
161 | - [Weights & Biases](https://wandb.ai/wandb_fc/product-announcements-fc/reports/Powering-Agent-Collaboration-Weights-Biases-Partners-with-Google-Cloud-on-Agent2Agent-Interoperability-Protocol---VmlldzoxMjE3NDg3OA)
162 | - [Wipro](https://www.wipro.com)
163 | - [Workday](https://www.workday.com)
164 | - [Writer](https://writer.com)
165 | - [Zenity](https://zenity.io)
166 | - [Zeotap](https://www.zeotap.com)
167 | - [Zocket Technologies , Inc.](https://zocket.ai)
168 | - [Zoom](https://www.zoom.us)
169 | - [zyprova](http://www.zyprova.com)
170 |
--------------------------------------------------------------------------------
/docs/roadmap.md:
--------------------------------------------------------------------------------
1 | # A2A protocol roadmap
2 |
3 | **Last updated:** Jul 16, 2025
4 |
5 | ## Near-term initiatives
6 |
7 | - Release `0.3` version of the protocol which we intend to keep supported and without breaking changes for a significant amount of time with backward compatibility of the SDKs starting at version `0.3`. As part of this release there are a few known breaking changes including:
8 | - Update the `/.well-known/agent.json` path for hosting Agent Cards to `/.well-known/agent-card.json` based on feedback from IANA.
9 | - Refactor class fields to be more Pythonic and adopt `snake_case`. [PR 199](https://github.com/a2aproject/a2a-python/pull/199)
10 | - Solidify the support for [A2A extensions](topics/extensions.md) with SDK support (starting with the Python SDK) and publishing sample extensions.
11 | - Introduce support for signed Agent Cards [Discussion 199](https://github.com/a2aproject/A2A/discussions/199#discussioncomment-13770576) to allow verifying the integrity of Agent Card content.
12 | - Enhance the client side support in SDK (starting with Python) to expose ready-to-use A2A clients, streamlined auth handling and improved handling of tasks.
13 |
14 | To review recent protocol changes see [Release Notes](https://github.com/a2aproject/A2A/releases).
15 |
16 | ## Longer term (3-6 month period) roadmap
17 |
18 | ### Governance
19 |
20 | The protocol has been [donated](https://www.linuxfoundation.org/press/linux-foundation-launches-the-agent2agent-protocol-project-to-enable-secure-intelligent-communication-between-ai-agents) to the Linux Foundation. The TSC is working on implementing a governance structure that prioritizes community-led development with standardized processes for contributing to the specification, SDKs and tooling. As part of the effort there will be dedicated working groups created for specific areas of the protocol.
21 |
22 | ### Agent Registry
23 |
24 | Agent Registry enables the discovery of agents and is a critical component of a multi-agent system. There is an active and ongoing discussion in the community around the latest [Discussion 741](https://github.com/a2aproject/A2A/discussions/741).
25 |
26 | ### Validation
27 |
28 | As the A2A ecosystem matures, it becomes critical for the A2A community to have tools to validate their agents. The community has launched two efforts to help with validation which the group will continue to enhance in the coming months. Learn more about [A2A Inspector](https://github.com/a2aproject/a2a-inspector) and the [A2A Protocol Technology Compatibility Kit](https://github.com/a2aproject/a2a-tck) (TCK).
29 |
30 | ### SDKs
31 |
32 | A2A Project currently hosts SDKs in four languages (Python, JS, Java, .NET) and contributors are adding more including Go (in progress).
33 |
34 | ### Community best practices
35 |
36 | As companies and individuals deploy A2A systems at an increasing pace, we are looking to accelerate the learning of the community by collecting and sharing the best practices and success stories that A2A enabled.
37 |
--------------------------------------------------------------------------------
/docs/sdk/python/conf.py:
--------------------------------------------------------------------------------
1 | # -- Project information -----------------------------------------------------
2 |
3 | project = 'a2a-sdk'
4 | copyright = '2025, Google LLC'
5 | author = 'Google LLC'
6 |
7 | # -- General configuration ---------------------------------------------------
8 |
9 | extensions = [
10 | 'sphinx.ext.autodoc',
11 | 'sphinx.ext.autosummary', # Automatically generate summaries
12 | 'sphinx.ext.napoleon', # Support for Google-style docstrings
13 | 'myst_parser', # For Markdown support
14 | ]
15 |
16 | # Tell autosummary to generate stub files
17 | autosummary_generate = True
18 |
19 | templates_path = ['_templates']
20 | exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
21 |
22 | # -- Options for HTML output -------------------------------------------------
23 |
24 | html_theme = 'furo'
25 |
26 | autodoc_member_order = 'alphabetical'
27 |
--------------------------------------------------------------------------------
/docs/sdk/python/index.rst:
--------------------------------------------------------------------------------
1 | A2A Python SDK Reference
2 | ========================
3 |
4 | This page contains the SDK documentation for the ``a2a-sdk`` Python package.
5 |
6 | .. code-block:: sh
7 |
8 | pip install a2a-sdk
9 |
10 | .. toctree::
11 | :maxdepth: 4
12 |
13 | a2a
14 |
--------------------------------------------------------------------------------
/docs/stylesheets/custom.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright 2025 Google LLC
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | /* Index page styling */
18 |
19 | .md-grid {
20 | max-width: 80%;
21 | }
22 |
23 | .footer {
24 | padding-bottom: 30vh;
25 | }
26 |
27 | .centered-logo-text-group {
28 | display: inline-flex;
29 | align-items: center;
30 | gap: 1.5em;
31 | margin-bottom: 0.5em;
32 | vertical-align: middle;
33 | }
34 |
35 | .centered-logo-text-group img {
36 | height: auto;
37 | }
38 |
39 | .centered-logo-text-group h1 {
40 | margin: 0;
41 | text-align: left;
42 | }
43 |
44 | .install-command-container {
45 | max-width: 600px;
46 | margin: 2.5em auto;
47 | padding: 1.5em 2em;
48 | background-color: var(--md-code-bg-color, #f5f5f5);
49 | border-radius: 8px;
50 | text-align: center;
51 | box-shadow: 0 3px 6px rgb(0 0 0 / 5%);
52 | border-left: 5px solid var(--md-primary-fg-color, #526cfe);
53 | margin-top: 30px;
54 | }
55 |
56 | .install-command-container p {
57 | font-size: 1.1em;
58 | color: var(--md-default-fg-color);
59 | margin-bottom: -10px;
60 | margin-top: -10px;
61 | }
62 |
63 | .install-command-container p code {
64 | font-size: 1.1em;
65 | font-weight: 600;
66 | padding: 0.3em 0.6em;
67 | background-color: var(--md-code-fg-color--light);
68 | border-radius: 4px;
69 | display: inline-block;
70 | line-height: 1.4;
71 | }
72 |
73 | .announce .md-button {
74 | font-size: 0.8em;
75 | padding: 0.3em 1em;
76 | margin-left: 0.5em;
77 | }
78 |
79 | h1#agent2agent-a2a-protocol {
80 | display: none;
81 | }
82 |
83 | figure.hero {
84 | margin-top: 0;
85 | margin-bottom: 10px;
86 | }
87 |
88 | figure.hero figcaption {
89 | max-width: 100%;
90 | width: 100%;
91 | margin-bottom: 0;
92 | text-align: left;
93 | }
94 |
--------------------------------------------------------------------------------
/docs/topics/a2a-and-mcp.md:
--------------------------------------------------------------------------------
1 | # A2A and MCP: Complementary Protocols for Agentic Systems
2 |
3 | ## A2A ❤️ MCP
4 |
5 | In the landscape of AI agent development, two key types of protocols are emerging to facilitate interoperability: those for connecting agents to **tools and resources**, and those for enabling **agent-to-agent collaboration**. The Agent2Agent (A2A) Protocol and the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) address these distinct but related needs.
6 |
7 | **TL;DR;** Agentic applications need both A2A and MCP. We recommend MCP for tools and A2A for agents.
8 |
9 | ## Why Different Protocols?
10 |
11 | The distinction arises from the nature of what an agent interacts with:
12 |
13 | - **Tools & Resources:**
14 |
15 | - These are typically primitives with well-defined, structured inputs and outputs. They perform specific, often stateless, functions (e.g., a calculator, a database query API, a weather lookup service).
16 | - Their behavior is generally predictable and transactional.
17 | - Interaction is often a single request-response cycle.
18 |
19 | - **Agents:**
20 | - These are more autonomous systems. They can reason, plan, use multiple tools, maintain state over longer interactions, and engage in complex, often multi-turn dialogues to achieve novel or evolving tasks.
21 | - Their behavior can be emergent and less predictable than a simple tool.
22 | - Interaction often involves ongoing tasks, context sharing, and negotiation.
23 |
24 | Agentic applications need to leverage both: agents use tools to gather information and perform actions, and agents collaborate with other agents to tackle broader, more complex goals.
25 |
26 | ## Model Context Protocol (MCP)
27 |
28 | - **Focus:** MCP standardizes how AI models and agents connect to and interact with **tools, APIs, data sources, and other external resources.**
29 | - **Mechanism:** It defines a structured way to describe tool capabilities (akin to function calling in Large Language Models), pass inputs to them, and receive structured outputs.
30 | - **Use Cases:**
31 | - Enabling an LLM to call an external API (e.g., fetch current stock prices).
32 | - Allowing an agent to query a database with specific parameters.
33 | - Connecting an agent to a set of predefined functions or services.
34 | - **Ecosystem:** MCP aims to create an ecosystem where tool providers can easily expose their services to various AI models and agent frameworks, and agent developers can easily consume these tools in a standardized way.
35 |
36 | ## Agent2Agent Protocol (A2A)
37 |
38 | - **Focus:** A2A standardizes how independent, often opaque, **AI agents communicate and collaborate with each other as peers.**
39 | - **Mechanism:** It provides an application-level protocol for agents to:
40 | - Discover each other's high-level skills and capabilities (via Agent Cards).
41 | - Negotiate interaction modalities (text, files, structured data).
42 | - Manage shared, stateful, and potentially long-running tasks.
43 | - Exchange conversational context, instructions, and complex, multi-part results.
44 | - **Use Cases:**
45 | - A customer service agent delegating a complex billing inquiry to a specialized billing agent, maintaining context of the customer interaction.
46 | - A travel planning agent coordinating with separate flight, hotel, and activity booking agents, managing a multi-stage booking process.
47 | - Agents exchanging information and status updates for a collaborative project that evolves over time.
48 | - **Key Difference from Tool Interaction:** A2A allows for more dynamic, stateful, and potentially multi-modal interactions than typically seen with simple tool calls. Agents using A2A communicate _as agents_ (or on behalf of users) rather than just invoking a discrete function.
49 |
50 | ## How A2A and MCP Complement Each Other
51 |
52 | A2A and MCP are not mutually exclusive; they are highly complementary and address different layers of an agentic system's interaction needs.
53 |
54 |
55 |
56 | {width="80%"}
57 |
58 | _An agentic application might use A2A to communicate with other agents, while each agent internally uses MCP to interact with its specific tools and resources._
59 |
60 |