{"id":28674504,"url":"https://github.com/jackwotherspoon/currency-agent","last_synced_at":"2026-04-28T01:32:52.885Z","repository":{"id":294990219,"uuid":"988730812","full_name":"jackwotherspoon/currency-agent","owner":"jackwotherspoon","description":"A sample agent demonstrating A2A + ADK + MCP working together.","archived":false,"fork":false,"pushed_at":"2025-09-09T19:33:38.000Z","size":668,"stargazers_count":11,"open_issues_count":0,"forks_count":9,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-09T23:22:00.738Z","etag":null,"topics":["a2a","adk","mcp"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jackwotherspoon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-23T01:54:37.000Z","updated_at":"2025-09-09T19:33:41.000Z","dependencies_parsed_at":null,"dependency_job_id":"6802e745-aa59-4610-bfa6-a5ff907ec68b","html_url":"https://github.com/jackwotherspoon/currency-agent","commit_stats":null,"previous_names":["jackwotherspoon/currency-agent"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jackwotherspoon/currency-agent","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackwotherspoon%2Fcurrency-agent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackwotherspoon%2Fcurrency-agent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackwotherspoon%2Fcurrency-agent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackwotherspoon%2Fcurrency-agent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jackwotherspoon","download_url":"https://codeload.github.com/jackwotherspoon/currency-agent/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackwotherspoon%2Fcurrency-agent/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32362781,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-27T20:07:02.737Z","status":"ssl_error","status_checked_at":"2026-04-27T20:07:00.910Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["a2a","adk","mcp"],"created_at":"2025-06-13T21:30:32.092Z","updated_at":"2026-04-28T01:32:52.880Z","avatar_url":"https://github.com/jackwotherspoon.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 💵💱💶 Currency Agent (A2A + ADK + MCP)\n\n[![Open In Codelab][codelab-badge]][codelab]\n[![Python](https://img.shields.io/badge/Python-3.x-blue.svg)](https://www.python.org/)\n[![Framework](https://img.shields.io/badge/Framework-ADK-4285F4.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAhGVYSWZNTQAqAAAACAAFARIAAwAAAAEAAQAAARoABQAAAAEAAABKARsABQAAAAEAAABSASgAAwAAAAEAAgAAh2kABAAAAAEAAABaAAAAAAAAAEgAAAABAAAASAAAAAEAA6ABAAMAAAABAAEAAKACAAQAAAABAAAADqADAAQAAAABAAAADgAAAABOylT5AAAACXBIWXMAAAsTAAALEwEAmpwYAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgoZXuEHAAACRUlEQVQoFXVSS2gTQRj+Z3aziUlF1ISkRqqpVpCaixgkkEOaUGktBopuRQXxKF68pIdCpSsYH4gWxINHT8ZmVUR7MaRND4pUFBFfB7GXqt1iAlGS5rn7O7NpFg/6HeZ/zPfN/PMxAOtQFKSd/L8RFYtDOEmWUVBVovM8fgHDDc+iv+I9VxcgAAhdEtUbP16dTL80uRlZUMdUnXREPBb3/7pDm65g1f3iS9094QRjOwBZWwO09REQ3++kD86qY6DLTAydEWOXy8lYqpzjp/4LB+4fzYVmjiXNPTYyVRRi8IIgRijqk4eua65YqnJLzqDA+wPXijdOALpbzocTaHRFeA+IYliPZaVGCD2cHfdVCJRT6lj7zS1dupoGUhCrsREgVc0Ucm1UQXFBIa3IlVJvU5ceiQTmNyPmddR9DbAZur28Wt1xJi4YjiFq2Eeen7q3FM1HGY2DGQPM1dM3C/5izZ6sGdA9Jzm1YAOc2xzfNj3bNfUJ9t2dhj74DRkQgBlk6vhSy+49b8zBG1wBD69xD4wiQI+Zg/dIHUL97Twq8mi9UaSfo03snSXd8HMlkbitBYbGPxyftHHS99HdW0qDkC4MhOIEFlqoALWEhuGoEVia5UQbLCdoffVdcObSV15v1EpPmfdbkWDbVdazhJQ2KwSlx7gIAfeTtz1EEv3F+MFBLqw7nVNIYNoz//oiG5+Cwj4UIpgGYR58tayQwJzLy8kcODxs53E5HN7AI4fy12WW2Nxhy0e5X+rk7Ia286yBMvtq6/gDb7bjW6TkRnEAAAAASUVORK5CYII=)](https://github.com/google/adk-python)\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)\n\n[codelab-badge]: https://img.shields.io/badge/Open%20In%20Codelab-blue?labelColor=grey\u0026style=flat\u0026logo=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==\n[codelab]: https://codelabs.developers.google.com/codelabs/currency-agent\n\nA 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).\n\nBoth were [announced at Google I/O 2025](https://developers.googleblog.com/en/agents-adk-agent-engine-a2a-enhancements-google-io/).\n\n![Architecture Overview](images/architecture.png)\n\n## Overview\n\nThe sample aims at laying out a foundation and showcasing the capabilities\nof A2A + ADK + MCP. It is a currency converter agent that can convert between different\ncountries' currencies.\n\n### \u003cimg height=\"20\" width=\"20\" src=\"images/mcp-favicon.ico\" alt=\"MCP Logo\" /\u003e Model Context Protocol (MCP)\n\n\u003e 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)\n\nThe 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.\n\n### \u003cimg height=\"20\" width=\"20\" src=\"images/adk-favicon.ico\" alt=\"ADK Logo\" /\u003e Agent Development Kit (ADK)\n\n\u003e 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)\n\nADK (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.\n\n### \u003cimg height=\"20\" width=\"20\" src=\"https://a2aproject.github.io/A2A/v0.2.5/assets/a2a-logo-white.svg\" alt=\"A2A Logo\" /\u003e Agent2Agent (A2A)\n\n\u003e 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)\n\nThe 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. \n\n## Getting Started\n\n### Prerequisites\n\n- Python 3.10+\n- Git, for cloning the repository.\n\n### Installation\n\n1. Clone the repository:\n\n```bash\ngit clone https://github.com/jackwotherspoon/currency-agent.git\ncd currency-agent\n```\n\n2. Install [uv](https://docs.astral.sh/uv/getting-started/installation) (used to manage dependencies):\n\n```bash\n# macOS and Linux\ncurl -LsSf https://astral.sh/uv/install.sh | sh\n\n# Windows (uncomment below line)\n# powershell -ExecutionPolicy ByPass -c \"irm https://astral.sh/uv/install.ps1 | iex\"\n```\n\n\u003e [!NOTE]\n\u003e You may need to restart or open a new terminal after installing `uv`.\n\n3. Configure environment variables (via `.env` file):\n\nThere are two different ways to call Gemini models:\n\n- Calling the Gemini API directly using an API key created via Google AI Studio.\n- Calling Gemini models through Vertex AI APIs on Google Cloud.\n\n\u003e [!TIP] \n\u003e An API key from Google AI Studio is the quickest way to get started.\n\u003e \n\u003e Existing Google Cloud users may want to use Vertex AI.\n\n\u003cdetails open\u003e\n\u003csummary\u003eGemini API Key\u003c/summary\u003e \n\nGet an API Key from Google AI Studio: https://aistudio.google.com/apikey\n\nCreate a `.env` file by running the following (replace `\u003cyour_api_key_here\u003e` with your API key):\n\n```sh\necho \"GOOGLE_API_KEY=\u003cyour_api_key_here\u003e\" \u003e\u003e .env \\\n\u0026\u0026 echo \"GOOGLE_GENAI_USE_VERTEXAI=FALSE\" \u003e\u003e .env\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eVertex AI\u003c/summary\u003e\n\nTo 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).\n\nAuthenticate and enable Vertex AI API:\n\n```bash\ngcloud auth login\n# Replace \u003cyour_project_id\u003e with your project ID\ngcloud config set project \u003cyour_project_id\u003e\ngcloud services enable aiplatform.googleapis.com\n```\n\nCreate a `.env` file by running the following (replace `\u003cyour_project_id\u003e` with your project ID):\n```sh\necho \"GOOGLE_GENAI_USE_VERTEXAI=TRUE\" \u003e\u003e .env \\\n\u0026\u0026 echo \"GOOGLE_CLOUD_PROJECT=\u003cyour_project_id\u003e\" \u003e\u003e .env \\\n\u0026\u0026 echo \"GOOGLE_CLOUD_LOCATION=us-central1\" \u003e\u003e .env\n```\n\n\u003c/details\u003e\n\nNow you are ready for the fun to begin!\n\n## Local Deployment\n\n### MCP Server\n\nIn a terminal, start the MCP Server (it starts on port 8080):\n\n```bash\nuv run mcp-server/server.py\n```\n\n### A2A Server\n\nIn a separate terminal, start the A2A Server (it starts on port 10000):\n\n```bash\nuv run uvicorn currency_agent.agent:a2a_app --host localhost --port 10000\n```\n\n### A2A Client\n\nIn a separate terminal, run the A2A Client to run some queries against our A2A server:\n\n```bash\nuv run currency_agent/test_client.py\n```\n\n## 🤝 Contributing\n\nContributions are welcome! Please feel free to submit pull requests or open issues.\n\n## 📄 License\n\nThis project is licensed under the Apache 2.0 License - see the [LICENSE file](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjackwotherspoon%2Fcurrency-agent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjackwotherspoon%2Fcurrency-agent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjackwotherspoon%2Fcurrency-agent/lists"}