From 821f751b5ad9b53c52bbdff045c714d33032bfce Mon Sep 17 00:00:00 2001 From: "Xiang (Sean) Zhou" Date: Mon, 2 Jun 2025 13:41:15 -0700 Subject: [PATCH] chore: add agent for testing Notion MCP server PiperOrigin-RevId: 766325293 --- .../samples/mcp_stdio_notion_agent/README.md | 20 ++++++++ .../mcp_stdio_notion_agent/__init__.py | 15 ++++++ .../samples/mcp_stdio_notion_agent/agent.py | 48 +++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 contributing/samples/mcp_stdio_notion_agent/README.md create mode 100755 contributing/samples/mcp_stdio_notion_agent/__init__.py create mode 100644 contributing/samples/mcp_stdio_notion_agent/agent.py diff --git a/contributing/samples/mcp_stdio_notion_agent/README.md b/contributing/samples/mcp_stdio_notion_agent/README.md new file mode 100644 index 0000000..f53bd2f --- /dev/null +++ b/contributing/samples/mcp_stdio_notion_agent/README.md @@ -0,0 +1,20 @@ +# Notion MCP Agent + +This is an agent that is using Notion MCP tool to call Notion API. And it demonstrate how to pass in the Notion API key. + +Follow below instruction to use it: + +* Follow the installation instruction in below page to get an API key for Notion API: +https://www.npmjs.com/package/@notionhq/notion-mcp-server + +* Set the environment variable `NOTION_API_KEY` to the API key you obtained in the previous step. + +```bash +export NOTION_API_KEY= +``` + +* Run the agent in ADK Web UI + +* Send below queries: + * What can you do for me ? + * Seach `XXXX` in my pages. diff --git a/contributing/samples/mcp_stdio_notion_agent/__init__.py b/contributing/samples/mcp_stdio_notion_agent/__init__.py new file mode 100755 index 0000000..c48963c --- /dev/null +++ b/contributing/samples/mcp_stdio_notion_agent/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from . import agent diff --git a/contributing/samples/mcp_stdio_notion_agent/agent.py b/contributing/samples/mcp_stdio_notion_agent/agent.py new file mode 100644 index 0000000..bfb385a --- /dev/null +++ b/contributing/samples/mcp_stdio_notion_agent/agent.py @@ -0,0 +1,48 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import json +import os + +from dotenv import load_dotenv +from google.adk.agents.llm_agent import LlmAgent +from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset +from google.adk.tools.mcp_tool.mcp_toolset import StdioServerParameters + +load_dotenv() + +NOTION_API_KEY = os.getenv("NOTION_API_KEY") +NOTION_HEADERS = json.dumps({ + "Authorization": f"Bearer {NOTION_API_KEY}", + "Notion-Version": "2022-06-28", +}) + +root_agent = LlmAgent( + model="gemini-2.0-flash", + name="notion_agent", + instruction=( + "You are my workspace assistant. " + "Use the provided tools to read, search, comment on, " + "or create Notion pages. Ask clarifying questions when unsure." + ), + tools=[ + MCPToolset( + connection_params=StdioServerParameters( + command="npx", + args=["-y", "@notionhq/notion-mcp-server"], + env={"OPENAPI_MCP_HEADERS": NOTION_HEADERS}, + ) + ) + ], +)