-
Notifications
You must be signed in to change notification settings - Fork 1.9k
GitHub agent example #2826
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
GitHub agent example #2826
Conversation
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Summary of Changes
Hello @ThomasCantuti, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!
This pull request adds a new example application that showcases how to build a conversational agent for GitHub. The agent utilizes Google's Agent Development Kit (ADK) and the Model Context Protocol (MCP) to interact with GitHub APIs, powered by a local Large Language Model. The primary goal is to provide a practical demonstration of integrating ADK with external services like GitHub using a flexible, tool-based approach.
Highlights
- New GitHub Agent Example: Introduces a new example project demonstrating a conversational AI agent capable of interacting with GitHub repositories using the Google Agent Development Kit (ADK) and the Model Context Protocol (MCP).
- Local LLM Integration: The agent is configured to connect with local Large Language Models (LLMs) via
litellm
and Ollama, specifically using a Qwen3 model, allowing for offline or self-hosted LLM operations. - Dynamic Tooling for GitHub: Leverages ADK's
MCPToolset
to provide the agent with dynamic tools for querying GitHub APIs, enabling it to explore repository structures, analyze code, review issues, and more. - Comprehensive Setup and Usage Guide: Includes a detailed
README.md
file that outlines prerequisites, installation steps, environment variable configuration (for GitHub Token), and instructions for running and interacting with the agent.
Using Gemini Code Assist
The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.
Invoking Gemini
You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command>
or @gemini-code-assist <command>
. Below is a summary of the supported commands.
Feature | Command | Description |
---|---|---|
Code Review | /gemini review |
Performs a code review for the current pull request in its current state. |
Pull Request Summary | /gemini summary |
Provides a summary of the current pull request in its current state. |
Comment | @gemini-code-assist | Responds in comments when explicitly tagged, both in issue comments and review comments. |
Help | /gemini help |
Displays a list of available commands. |
Customization
To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/
folder in the base of the repository. Detailed instructions can be found here.
Limitations & Feedback
Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.
You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.
Footnotes
-
Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩
Response from ADK Triaging Agent Hello @ThomasCantuti, thank you for creating this PR! To help us review your contribution, could you please address the following points from our contribution guidelines:
You can find more details in our contribution guidelines. Thanks! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code Review
This pull request introduces a valuable example of a GitHub agent using the Google ADK and MCP protocol. The implementation is a great starting point. I've identified a few critical issues related to module imports and environment variable handling that will prevent the code from running as is. Additionally, I've included several suggestions to improve code quality, maintainability, and adherence to best practices, such as refining the authentication setup, improving configuration management, and making the code more robust. Addressing these points will make the example more reliable and easier for others to use.
github_auth_scheme, github_auth_credential = token_to_scheme_credential( | ||
token_type='apikey', | ||
location='header', | ||
name="GitHub-Token", | ||
credential_value=GITHUB_TOKEN | ||
) | ||
return MCPToolset( | ||
connection_params=StreamableHTTPConnectionParams( | ||
url="https://api.githubcopilot.com/mcp/", | ||
headers={ | ||
"Authorization": "Bearer " + GITHUB_TOKEN, | ||
}, | ||
), | ||
auth_credential=github_auth_credential, | ||
auth_scheme=github_auth_scheme, | ||
# tool_filter=["get_me", "list_pull_requests", "request_copilot_review", "merge_pull_request"] | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The authentication setup here is incorrect and confusing for a few reasons:
-
Incorrect Auth Scheme: You're using
token_type='apikey'
withname="GitHub-Token"
. However, the GitHub Copilot MCP API expects a bearer token in theAuthorization
header. The auth scheme declared to the model should match the actual auth mechanism. You should usetoken_type='oauth2Token'
. -
Redundant Header: The
Authorization
header is hardcoded inStreamableHTTPConnectionParams
. The ADK's authentication framework is designed to handle this automatically via theauth_scheme
andauth_credential
you pass to the toolset. This redundancy is confusing and can lead to errors. You should remove the hardcoded header and rely on the framework's auth handling.
Here is a corrected version that addresses both issues.
github_auth_scheme, github_auth_credential = token_to_scheme_credential(
token_type='oauth2Token',
credential_value=GITHUB_TOKEN
)
return MCPToolset(
connection_params=StreamableHTTPConnectionParams(
url="https://api.githubcopilot.com/mcp/",
),
auth_credential=github_auth_credential,
auth_scheme=github_auth_scheme,
# tool_filter=["get_me", "list_pull_requests", "request_copilot_review", "merge_pull_request"]
)
Example of Google ADK agent using MCP protocol to connect with GitHub server