Memstate + Google ADK
Give Google ADK agents persistent, structured memory via MCP.
Google's Agent Development Kit (ADK) supports MCP natively via McpToolset. Memstate plugs in as a local stdio MCP server, giving Gemini-powered agents versioned, project-scoped memory that persists across sessions.
Requirements
- Python 3.10+
- Node.js 18+ (for npx @memstate/mcp)
- Google AI API key — aistudio.google.com
- Memstate API key — get one free
1
Install Google ADK
Terminal
pip install google-adk2
Set environment variables
Shell
export GOOGLE_API_KEY="AIza..." # or GOOGLE_GENAI_API_KEY
export MEMSTATE_API_KEY="mst_..."3
Connect Memstate via MCP
Add McpToolset to your agent's tools list. The MCP server is spawned automatically as a subprocess when the agent runs.
agent.py
"""
Memstate AI + Google ADK
Requires: pip install google-adk
Env: GOOGLE_API_KEY (or GOOGLE_GENAI_API_KEY), MEMSTATE_API_KEY
"""
import asyncio
import os
from google.adk.agents import LlmAgent
from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
from google.adk.tools.mcp_tool import McpToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StdioConnectionParams
from google.genai import types
from mcp import StdioServerParameters
APP_NAME = "memstate_demo"
USER_ID = "user_1"
SESSION_ID = "session_1"
def create_agent() -> LlmAgent:
return LlmAgent(
model="gemini-2.5-flash",
name="memstate_agent",
instruction=(
"You are a helpful assistant with persistent memory via Memstate. "
"Use memstate_get before tasks and memstate_remember after tasks."
),
tools=[
McpToolset(
connection_params=StdioConnectionParams(
server_params=StdioServerParameters(
command="npx",
args=["-y", "@memstate/mcp"],
env={
**os.environ,
"MEMSTATE_API_KEY": os.environ["MEMSTATE_API_KEY"],
},
)
),
)
],
)
async def main() -> None:
agent = create_agent()
session_service = InMemorySessionService()
await session_service.create_session(
app_name=APP_NAME, user_id=USER_ID, session_id=SESSION_ID
)
runner = Runner(
agent=agent, app_name=APP_NAME, session_service=session_service
)
prompt = (
'Save a memory: memstate_remember(project_id="demo", '
'content="## Google ADK\\nMemstate connected via Google ADK MCP.", '
'source="agent"). Then call memstate_get(project_id="demo").'
)
content = types.Content(role="user", parts=[types.Part(text=prompt)])
async for event in runner.run_async(
user_id=USER_ID, session_id=SESSION_ID, new_message=content
):
if event.is_final_response() and event.content:
for part in event.content.parts:
if part.text:
print(part.text)
if __name__ == "__main__":
asyncio.run(main())✓
Test it — run the onboarding prompt
Onboarding prompt
I'm onboarding Memstate AI memory for this project. Please:
1. Analyze this codebase and write a concise high-level architecture overview in markdown.
2. Save it with: memstate_remember(project_id="<your_project>", content="<the markdown>", source="agent")
3. Then call memstate_get(project_id="<your_project>") and show me the memory tree.