Skip to main content
Glama
commit_feattools-enhance-definitions-with-pydantic-models_2431280.md4.69 kB
# Documentation for Commit 2431280 **Commit Hash:** 2431280df40e878a0a256dfc7463ace387fcdb62 **Commit Message:** feat(tools): enhance definitions with Pydantic models and type annotations **Generated:** Thu Oct 16 20:26:26 EDT 2025 **Repository:** geminiAgentMCP --- ### **Technical Documentation: MCP Server Tooling Refactor** This document details a significant refactor of the Model Context Protocol (MCP) server tools, focusing on improving type safety, API clarity, and tool metadata. --- ### 1. Summary This update introduces Pydantic models for all tool outputs, replacing generic dictionaries with strongly-typed data structures. It also enhances tool function signatures with `typing.Annotated` for better parameter descriptions and adds metadata annotations to the `@mcp.tool` decorator. These changes provide a more robust, self-documenting, and predictable tool interface for the Gemini Agent. ### 2. Detailed Changes #### a. Pydantic Model Integration for Tool Outputs All tools have been updated to return Pydantic `BaseModel` instances instead of dictionaries. This ensures that the data returned by each tool is structured, validated, and typed. **New Pydantic Models:** * `GeminiResponse` * `GitHubIssueResponse` * `GitHubPrResponse` * `DocstringResponse` * `DependencyInfo` & `DependencyReport` * `LintingReport` **Example:** The `create_github_pr` tool now returns a `GitHubPrResponse` object. * **Before:** ```python def create_github_pr(...) -> dict: # ... return {"pr_url": "https://..."} ``` * **After:** ```python class GitHubPrResponse(BaseModel): pr_url: str def create_github_pr(...) -> GitHubPrResponse: # ... return GitHubPrResponse(pr_url="https://...") ``` #### b. Enhanced Type Hinting with `Annotated` Function parameters for all tools now use `typing.Annotated` to provide descriptive context directly within the signature. This improves readability and provides richer information for developers and automated tooling. * **Before:** ```python def create_github_issue(repo_owner: str, repo_name: str, title: str, body: str = ''): ``` * **After:** ```python from typing import Annotated def create_github_issue( repo_owner: Annotated[str, "The owner of the GitHub repository."], repo_name: Annotated[str, "The name of the GitHub repository."], # ... ): ``` #### c. Tool Metadata Annotations The `@mcp.tool` decorator now accepts an `annotations` argument. This provides metadata to the MCP framework about the tool's behavior, such as whether it interacts with the external world (`openWorldHint`) or modifies local state (`readOnlyHint`). ```python @mcp.tool(annotations={"readOnlyHint": True}) def lint_code(...): ``` #### d. New Resource: `get_greeting` A new example resource, `get_greeting`, has been added to demonstrate the `@mcp.resource` functionality. ```python @mcp.resource("greeting://{name}") def get_greeting(name: str) -> str: """Get a personalized greeting""" return f"Hello, {name}!" ``` ### 3. Impact * **Improved Type Safety:** Pydantic's validation prevents malformed data from being returned by tools, reducing the likelihood of runtime errors in client code. * **Enhanced API Clarity:** The new models and `Annotated` hints make the tool signatures self-documenting, making it easier to understand what each tool requires and returns. * **Better Agent Interaction:** The new tool annotations provide crucial hints to the Gemini Agent, potentially leading to more intelligent and appropriate tool usage. ### 4. Breaking Changes **The return types of all tools have changed from `dict` to Pydantic `BaseModel` instances.** This is a **critical breaking change**. Any client code that consumes the output of these tools will need to be updated. Accessing data via dictionary key lookup (e.g., `result['key']`) will no longer work and will raise an error. ### 5. Migration Notes To adapt to these changes, developers must update their client code to interact with Pydantic model attributes instead of dictionary keys. **Migration Example:** If your existing code processes the output of `create_github_pr` like this: * **Old Code:** ```python result = create_github_pr(...) pr_url = result['pr_url'] ``` You must update it to use attribute access: * **New Code:** ```python result = create_github_pr(...) # result is now a GitHubPrResponse instance pr_url = result.pr_url ``` Additionally, update any type hints in your client code from `dict` to the corresponding Pydantic model (e.g., `GitHubPrResponse`).

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/LeeSinLiang/GeminiAgentMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server