A Python package that combines Google's Gemma language model with MCP (Model Content Protocol) server integration, enabling powerful function calling capabilities across both local functions and remote MCP tools.
- Seamless integration with Google's Gemma language model
- Support for both local Python functions and remote MCP tools
- Automatic tool discovery and registration from MCP servers
- Python-style function calling syntax
- Proper resource management with async context managers
- Support for multiple MCP servers
- Easy testing through test server support
uv add gemma-mcp # or pip install gemma-mcp if you love the old way
- Python 3.10+
google-genai
: Google Generative AI Python SDKFastMCP
MCP utilities
from gemma_mcp import GemmaMCPClient
# a standard MCP configuration
mcp_config = {
"mcpServers": {
"weather": {
"url": "https://weather-api.example.com/mcp"
},
"assistant": {
"command": "python",
"args": ["./assistant_server.py"]
}
}
}
# Initialize client with MCP support
async with GemmaMCPClient(mcp_config=mcp_config).managed() as client:
# Chat with automatic function execution
response = await client.chat(
"What's the weather like in London?",
execute_functions=True
)
print(response)
You can add local functions in three ways:
- Using a callable:
async def my_function(param1: str, param2: int = 0):
"""Function description."""
return {"result": param1 + str(param2)}
client.add_function(my_function)
- Using a dictionary:
function_def = {
"name": "my_function",
"description": "Function description",
"parameters": {
"type": "object",
"properties": {
"param1": {"type": "string"},
"param2": {"type": "integer", "default": 0}
},
"required": ["param1"]
}
}
client.add_function(function_def)
- Using a FunctionDefinition object:
from gemma_mcp import FunctionDefinition
function_def = FunctionDefinition(
name="my_function",
description="Function description",
parameters={
"type": "object",
"properties": {
"param1": {"type": "string"},
"param2": {"type": "integer", "default": 0}
},
"required": ["param1"]
},
required=["param1"]
)
client.add_function(function_def)
The MCP configuration supports multiple server types:
- servers with SSE transport:
mcp_config = {
"mcpServers": {
"server_name": {
"url": "https://server-url/mcp"
}
}
}
- servers with STDIO transport:
mcp_config = {
"mcpServers": {
"server_name": {
"command": "python",
"args": ["./server.py"]
}
}
}
The package includes support for testing with in-memory MCP servers:
from fastmcp import FastMCP
from gemma_mcp import GemmaMCPClient
# Create test server
mcp = FastMCP("Test Server")
# Initialize client with test server
client = GemmaMCPClient()
client.mcp_client.add_test_server(mcp)
# Use the client as normal
async with client.managed():
response = await client.chat("Test message", execute_functions=True)
The main client class that handles both Gemma model interactions and MCP tool integration.
api_key
(str, optional): Gemini API key. If not provided, will look for GEMINI_API_KEY env varmodel
(str): Model to use, defaults to "gemma-3-27b-it"temperature
(float): Generation temperature, defaults to 0.7system_prompt
(str, optional): Custom system promptmcp_config
(dict, optional): MCP configuration dictionary
add_function(function)
: Add a function definitionchat(message, execute_functions=False)
: Send a message and get responseinitialize()
: Initialize the client and all componentscleanup()
: Clean up all resources
A dataclass for representing function definitions.
name
(str): Function namedescription
(str): Function descriptionparameters
(dict): Function parameters schemarequired
(list): List of required parameterscallable
(callable, optional): The actual callable function
MIT License
Contributions are welcome! Please feel free to submit a Pull Request.