-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Reorganizing Crashlytics MCP Tools #9594
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?
Conversation
Summary of ChangesHello @maxl0rd, 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 significantly refactors the Crashlytics MCP tools by streamlining report generation into a single, unified function and externalizing detailed instructions into comprehensive resource guides. This change aims to enhance the system's scalability, improve the user experience for various MCP clients, and provide more robust error handling and guidance for developers interacting with Crashlytics data. Highlights
Using Gemini Code AssistThe 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 by creating a comment using either
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 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
|
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 is a great refactoring of the Crashlytics MCP tools. Consolidating the report-fetching tools into a single crashlytics_get_report tool is a significant improvement, making it more extensible. Moving the large prompt content into separate guide resources is also an excellent change for modularity and maintainability. The error handling has been improved across the tools, providing more context to the agent. I've found a few minor issues, including some typos in user-facing text, a small bug in output formatting, and opportunities for code simplification. Overall, this is a high-quality change.
97e8d00 to
89c8cdd
Compare
src/crashlytics/filters.ts
Outdated
| "from GoogleService-Info.plist. If neither is available, ask the user to " + | ||
| "provide the app id.", | ||
| ); | ||
| .describe("Firebase App Id. Leave blank if unknown to receive instructions for finding it."); |
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.
Should we instruct it to use read_resource here rather than telling it to leave it blank?
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.
Decided that the lib isn't the place for mcp instructions to live...
| Only relevant for iOS, iPadOS and MacOS applications.`, | ||
| name: "get_report", | ||
| description: | ||
| `Use this to request numerical reports from Crashlytics. Reports contain aggregated metrics describing the number of crash events and number of impacted end users. The reports are grouped by different dimensions such as issue, version or device. |
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.
Should we make mention of the guide in the tool description?
| nock.cleanAll(); | ||
| }); | ||
|
|
||
| it("should resolve with the response body on success", async () => { |
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.
Can we add some tests around the different validation cases we expect with the error responses?
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.
Evaluating that is a good idea. But it doesn't make sense to test the tool behavior in this file's unit test.
| export const RESOURCE_CONTENT = ` | ||
| ### Instructions for Working with Firebase Crashlytics Tools | ||
| Only ask the user one question at a time. Do not proceed without user instructions. Upon receiving user instructions, refer to the relevant resources for guidance. |
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.
Is this a strong enough statement? I've seen it ignore this pretty readily without emphasis - asking multiple questions at a time being the main thing it tries to do.
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.
I actually think we might want to remove this entirely and let the agent and developer determine the working agreement. What if the agent is meant to be autonomous?
| ### Check That You Are Connected | ||
| Verify that you can read the app's Crashlytics data by getting the topVersions report. This report will tell you which app versions have the most events. |
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.
We didn't have this step before - how has this played out in your testing? My one concern here is that it increases token consumption by default without interaction from the user. That happens not infrequently anyway, but curious if it happens more with this instruction.
| if (!appId) { | ||
| result.isError = true; | ||
| result.content.push({ type: "text", text: "Must specify 'appId' parameter" }); | ||
| result.content.push({ type: "text", text: forceAppIdGuide }); |
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.
We don't return the issue guide here. At some iteration, I feel like we were doing that. If we were, why did we pull it back?
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.
I removed it because there wasn't a good error case in which to include it.
| ); | ||
| if (!report) { | ||
| result.isError = true; | ||
| result.content.push({ type: "text", text: `Error: ${REPORT_ERROR_CONTENT}` }); |
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.
Same question here - why not reference reading the guide in the error response?
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.
I found that this error case never happens so it doesn't really matter what we do here lol.
Description
crashlytics_get_*tools into a single toolcrashlytics_get_report. This will enable the set of supported reports to expand without adding additional tools.crashlytics:connectprompt to guide resources. This provides better support for the many MCP clients without support for prompts.