https://github.com/jackwotherspoon/currency-agent
A sample agent demonstrating A2A + ADK + MCP working together.
https://github.com/jackwotherspoon/currency-agent
a2a adk mcp
Last synced: 2 months ago
JSON representation
A sample agent demonstrating A2A + ADK + MCP working together.
- Host: GitHub
- URL: https://github.com/jackwotherspoon/currency-agent
- Owner: jackwotherspoon
- License: apache-2.0
- Created: 2025-05-23T01:54:37.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-09-09T19:33:38.000Z (10 months ago)
- Last Synced: 2025-09-09T23:22:00.738Z (10 months ago)
- Topics: a2a, adk, mcp
- Language: Python
- Homepage:
- Size: 652 KB
- Stars: 11
- Watchers: 1
- Forks: 9
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 💵💱💶 Currency Agent (A2A + ADK + MCP)
[![Open In Codelab][codelab-badge]][codelab]
[](https://www.python.org/)
[](https://github.com/google/adk-python)
[](LICENSE)
[codelab-badge]: https://img.shields.io/badge/Open%20In%20Codelab-blue?labelColor=grey&style=flat&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAyVBMVEX////////////////////////+8/L0oZrrTkHqQzXzlY13yKEPnVgdo2KHzqvw+fX4xMDtWk604MssqWz73NnvcWdKtYHS7eD85+ZowpayncOWapvVS0360MzD5tWW1LZxo/dChfSLaKHfR0FMhe2rY4TyiYBlm/bQ4Pz+7sD7xCPPthRJpkegwvl9q/fn8P7+9+D80VL7vASisCQsoU4spV393YHPwDm40ftNjPX7wBP95qHz9/7/++/b6P3+8tD8zUKIsvj81WJbutStAAAABnRSTlMAIKDw/zDiNY+eAAAA+klEQVR4AbzRRYICMRRF0VB5QLlrO+7uDvvfVKfSv91mnGlunDFWUDh+xJUCE4ocv+JFMZ/jD7zAFPxJYRx/4gz/uGpQKquaDsEwLdv5HrieJriAbwqB/yUII00qA7YpxcmHoKRrJAUSk2QOKLi5vdMk7x7CQ0CF9fgSPFUqlWpN09QyiG1REsugkqs3miW8cTIqHApyrTbedLq9vgzkCoMKGY4gjSdTYTY3F74M0G5VyADCckpWnbd3WG+oaAMdGt7uPj7UfvC2BC2wPIACMspvuzkCp60YPo9/+M328LKHcHiek6EmnRMMAUAw2RPMOASzHsHMSzD7AwCdmyeTDUqFKQAAAABJRU5ErkJggg==
[codelab]: https://codelabs.developers.google.com/codelabs/currency-agent
A sample agent demonstrating A2A + ADK + MCP working together. It leverages the new **Agent2Agent (A2A) Python SDK** ([`a2a-sdk`](https://github.com/google-a2a/a2a-python)) and **v1.0.0+** of Google's **Agent Development Kit (ADK)**, [`google-adk`](https://github.com/google/adk-python).
Both were [announced at Google I/O 2025](https://developers.googleblog.com/en/agents-adk-agent-engine-a2a-enhancements-google-io/).

## Overview
The sample aims at laying out a foundation and showcasing the capabilities
of A2A + ADK + MCP. It is a currency converter agent that can convert between different
countries' currencies.
###
Model Context Protocol (MCP)
> MCP is an open protocol that standardizes how applications provide context to LLMs. Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect your devices to various peripherals and accessories, MCP provides a standardized way to connect AI models to different data sources and tools. - [Anthropic](https://modelcontextprotocol.io/introduction)
The MCP server in this example exposes a tool `get_exchange_rate` that can be used to get the exchange rate between two currencies such as USD and EUR. It leverages the [Frankfurter](https://www.frankfurter.dev/) API to get the currency exchange rate. Our agent uses an MCP client to invoke this tool when needed.
###
Agent Development Kit (ADK)
> ADK is a flexible and modular framework for developing and deploying AI agents. While optimized for Gemini and the Google ecosystem, ADK is model-agnostic, deployment-agnostic, and is built for compatibility with other frameworks. - [ADK](https://github.com/google/adk-python)
ADK (v1.0.0) is used as the orchestration framework for creating our currency agent in this sample. It handles the conversation with the user and invokes our MCP tool when needed.
###
Agent2Agent (A2A)
> 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. - [A2A](https://github.com/a2aproject/A2A)
The new [A2A Python SDK](https://github.com/google-a2a/a2a-python) is used to create an A2A server that advertises and executes our ADK agent. We then run an A2A client that connects to our A2A server and invokes our ADK agent.
## Getting Started
### Prerequisites
- Python 3.10+
- Git, for cloning the repository.
### Installation
1. Clone the repository:
```bash
git clone https://github.com/jackwotherspoon/currency-agent.git
cd currency-agent
```
2. Install [uv](https://docs.astral.sh/uv/getting-started/installation) (used to manage dependencies):
```bash
# macOS and Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (uncomment below line)
# powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
```
> [!NOTE]
> You may need to restart or open a new terminal after installing `uv`.
3. Configure environment variables (via `.env` file):
There are two different ways to call Gemini models:
- Calling the Gemini API directly using an API key created via Google AI Studio.
- Calling Gemini models through Vertex AI APIs on Google Cloud.
> [!TIP]
> An API key from Google AI Studio is the quickest way to get started.
>
> Existing Google Cloud users may want to use Vertex AI.
Gemini API Key
Get an API Key from Google AI Studio: https://aistudio.google.com/apikey
Create a `.env` file by running the following (replace `` with your API key):
```sh
echo "GOOGLE_API_KEY=" >> .env \
&& echo "GOOGLE_GENAI_USE_VERTEXAI=FALSE" >> .env
```
Vertex AI
To use Vertex AI, you will need to [create a Google Cloud project](https://developers.google.com/workspace/guides/create-project) and [enable Vertex AI](https://cloud.google.com/vertex-ai/docs/start/cloud-environment).
Authenticate and enable Vertex AI API:
```bash
gcloud auth login
# Replace with your project ID
gcloud config set project
gcloud services enable aiplatform.googleapis.com
```
Create a `.env` file by running the following (replace `` with your project ID):
```sh
echo "GOOGLE_GENAI_USE_VERTEXAI=TRUE" >> .env \
&& echo "GOOGLE_CLOUD_PROJECT=" >> .env \
&& echo "GOOGLE_CLOUD_LOCATION=us-central1" >> .env
```
Now you are ready for the fun to begin!
## Local Deployment
### MCP Server
In a terminal, start the MCP Server (it starts on port 8080):
```bash
uv run mcp-server/server.py
```
### A2A Server
In a separate terminal, start the A2A Server (it starts on port 10000):
```bash
uv run uvicorn currency_agent.agent:a2a_app --host localhost --port 10000
```
### A2A Client
In a separate terminal, run the A2A Client to run some queries against our A2A server:
```bash
uv run currency_agent/test_client.py
```
## 🤝 Contributing
Contributions are welcome! Please feel free to submit pull requests or open issues.
## 📄 License
This project is licensed under the Apache 2.0 License - see the [LICENSE file](LICENSE) for details.