Setup/Google ADK
Google ADK

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

1

Install Google ADK

Terminal
pip install google-adk
2

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.