From 09666c31472b44d548da8e29071479de35714ea4 Mon Sep 17 00:00:00 2001 From: Kristopher Overholt Date: Mon, 17 Nov 2025 12:12:49 -0600 Subject: [PATCH 1/4] Add ScrapeGraphAI to third-party tools --- docs/assets/tools-scrapegraphai.png | Bin 0 -> 38839 bytes docs/tools/index.md | 10 +++ docs/tools/third-party/index.md | 10 +++ docs/tools/third-party/scrapegraphai.md | 80 ++++++++++++++++++++++++ 4 files changed, 100 insertions(+) create mode 100644 docs/assets/tools-scrapegraphai.png create mode 100644 docs/tools/third-party/scrapegraphai.md diff --git a/docs/assets/tools-scrapegraphai.png b/docs/assets/tools-scrapegraphai.png new file mode 100644 index 0000000000000000000000000000000000000000..130f761f8cb0229fb3e63e22832fa40869247389 GIT binary patch literal 38839 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≪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ȳ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 + +
+ ScrapeGraphAI +
+
+

ScrapeGraphAI

+

AI-powered web scraping, crawling, and data extraction

+
+
+
Tavily diff --git a/docs/tools/third-party/index.md b/docs/tools/third-party/index.md index 60969c64e0..44f878693f 100644 --- a/docs/tools/third-party/index.md +++ b/docs/tools/third-party/index.md @@ -89,6 +89,16 @@ Check out the following third-party tools that you can use with ADK agents:
+ +
+ ScrapeGraphAI +
+
+

ScrapeGraphAI

+

AI-powered web scraping, crawling, and data extraction

+
+
+
Tavily diff --git a/docs/tools/third-party/scrapegraphai.md b/docs/tools/third-party/scrapegraphai.md new file mode 100644 index 0000000000..8a2eb262c8 --- /dev/null +++ b/docs/tools/third-party/scrapegraphai.md @@ -0,0 +1,80 @@ +# ScrapeGraphAI + +The +[ScrapeGraphAI MCP Server](https://github.com/ScrapeGraphAI/scrapegraph-mcp) +connects your ADK agent to [ScrapeGraphAI](https://scrapegraphai.com/). This +integration enables your agent to extract structured data using natural language +prompts, handle dynamic content like infinite scrolling, and convert complex +webpages into clean, usable JSON or Markdown. + +## Use cases + +- **Scalable Extraction & Crawling**: Extract structured data from single pages + or crawl entire websites, leveraging AI to handle dynamic content, infinite + scrolling, and large-scale asynchronous operations. + +- **Research and Summarization**: Execute AI-powered web searches to research + topics, aggregate data from multiple sources, and summarize findings. + +- **Agentic Workflows**: Run advanced agentic scraping workflows with + customizable steps, complex navigation (like authentication), and structured + output schemas. + +## Prerequisites + +- Create an [API Key](https://dev.agentql.com/sign-in) in AgentQL. Refer to the + [documentation](https://docs.agentql.com/quick-start) for more information. + +## Use with agent + +=== "Local MCP Server" + + ```python + from google.adk.agents import Agent + from google.adk.tools.mcp_tool.mcp_session_manager import StdioConnectionParams + from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset + from mcp import StdioServerParameters + + SCRAPEGRAPHAI_API_KEY = "YOUR_SCRAPEGRAPHAI_API_KEY" + + root_agent = Agent( + model="gemini-2.5-pro", + name="agentql_agent", + instruction="Help users get information from AgentQL", + tools=[ + MCPToolset( + connection_params=StdioConnectionParams( + server_params = StdioServerParameters( + command="npx", + args=[ + "-y", + "@scrapegraphai/mcp-server", + ], + env={ + "SGAI_API_KEY": SCRAPEGRAPHAI_API_KEY, + } + ), + timeout=300, + ), + ) + ], + ) + ``` + +## Available tools + +Tool | Description +---- | ----------- +`markdownify` | Transform any webpage into clean, structured markdown format +`smartscraper` | Leverage AI to extract structured data from any webpage with support for infinite scrolling +`searchscraper` | Execute AI-powered web searches with structured, actionable results +`scrape` | Basic scraping endpoint to fetch page content with optional heavy JavaScript rendering +`sitemap` | Extract sitemap URLs and structure for any website +`smartcrawler_initiate` | Initiate intelligent multi-page web crawling (asynchronous operation) +`smartcrawler_fetch_results` | Retrieve results from asynchronous crawling operations +`agentic_scrapper` | Run advanced agentic scraping workflows with customizable steps and structured output schemas + +## Additional resources + +- [ScrapeGraphAI MCP Server Documentation](https://docs.scrapegraphai.com/services/mcp-server) +- [ScrapeGraphAI MCP Server Repository](https://github.com/ScrapeGraphAI/scrapegraph-mcp) From 633e25a06db75c09d6c3e04ce6c0b0e5dd2fb805 Mon Sep 17 00:00:00 2001 From: Kristopher Overholt Date: Mon, 17 Nov 2025 12:13:15 -0600 Subject: [PATCH 2/4] Add ScrapeGraphAI to nav --- mkdocs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/mkdocs.yml b/mkdocs.yml index 0346188a21..a37ebbe1cd 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -185,6 +185,7 @@ nav: - GitHub: tools/third-party/github.md - Hugging Face: tools/third-party/hugging-face.md - Notion: tools/third-party/notion.md + - ScrapeGraphAI: tools/third-party/scrapegraphai.md - Tavily: tools/third-party/tavily.md - Agentic UI (AG-UI): tools/third-party/ag-ui.md - Custom Tools: From 669be109a1da3f83238baba609cb679c25c8b972 Mon Sep 17 00:00:00 2001 From: Kristopher Overholt Date: Wed, 19 Nov 2025 13:32:17 -0600 Subject: [PATCH 3/4] Update sample code --- docs/tools/third-party/scrapegraphai.md | 34 +++++++++++++++---------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/docs/tools/third-party/scrapegraphai.md b/docs/tools/third-party/scrapegraphai.md index 8a2eb262c8..c981c98c41 100644 --- a/docs/tools/third-party/scrapegraphai.md +++ b/docs/tools/third-party/scrapegraphai.md @@ -24,6 +24,13 @@ webpages into clean, usable JSON or Markdown. - Create an [API Key](https://dev.agentql.com/sign-in) in AgentQL. Refer to the [documentation](https://docs.agentql.com/quick-start) for more information. +- Install the [ScrapeGraphAI MCP server + package](https://pypi.org/project/scrapegraph-mcp/) (requires Python 3.13 or + higher): + + ```console + pip install scrapegraph-mcp + ``` ## Use with agent @@ -31,32 +38,33 @@ webpages into clean, usable JSON or Markdown. ```python from google.adk.agents import Agent - from google.adk.tools.mcp_tool.mcp_session_manager import StdioConnectionParams from google.adk.tools.mcp_tool.mcp_toolset import MCPToolset + from google.adk.tools.mcp_tool.mcp_session_manager import StdioConnectionParams from mcp import StdioServerParameters - SCRAPEGRAPHAI_API_KEY = "YOUR_SCRAPEGRAPHAI_API_KEY" + SGAI_API_KEY = "YOUR_SCRAPEGRAPHAI_API_KEY" root_agent = Agent( model="gemini-2.5-pro", - name="agentql_agent", - instruction="Help users get information from AgentQL", + name="scrapegraph_assistant_agent", + instruction="""Help the user with web scraping and data extraction using + ScrapeGraph AI. You can convert webpages to markdown, extract + structured data using AI, perform web searches, crawl + multiple pages, and automate complex scraping workflows.""", tools=[ MCPToolset( connection_params=StdioConnectionParams( - server_params = StdioServerParameters( - command="npx", - args=[ - "-y", - "@scrapegraphai/mcp-server", - ], + server_params=StdioServerParameters( + command="scrapegraph-mcp", ## Available from `pip install scrapegraph-mcp` env={ - "SGAI_API_KEY": SCRAPEGRAPHAI_API_KEY, - } + "SGAI_API_KEY": SGAI_API_KEY, + }, ), timeout=300, ), - ) + # Optional: Filter which tools from the MCP server are exposed + # tool_filter=["markdownify", "smartscraper", "searchscraper"] + ), ], ) ``` From 5c8d05a8d3c0f93500450f400801a657f0ca0d64 Mon Sep 17 00:00:00 2001 From: Kristopher Overholt Date: Wed, 19 Nov 2025 13:46:10 -0600 Subject: [PATCH 4/4] Update links --- docs/tools/third-party/scrapegraphai.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/docs/tools/third-party/scrapegraphai.md b/docs/tools/third-party/scrapegraphai.md index c981c98c41..7f1d821ee6 100644 --- a/docs/tools/third-party/scrapegraphai.md +++ b/docs/tools/third-party/scrapegraphai.md @@ -22,8 +22,9 @@ webpages into clean, usable JSON or Markdown. ## Prerequisites -- Create an [API Key](https://dev.agentql.com/sign-in) in AgentQL. Refer to the - [documentation](https://docs.agentql.com/quick-start) for more information. +- Create an [API Key](https://dashboard.scrapegraphai.com/register/) in + ScrapeGraphAI. Refer to the + [documentation](https://docs.scrapegraphai.com/api-reference/introduction) for more information. - Install the [ScrapeGraphAI MCP server package](https://pypi.org/project/scrapegraph-mcp/) (requires Python 3.13 or higher): @@ -55,7 +56,9 @@ webpages into clean, usable JSON or Markdown. MCPToolset( connection_params=StdioConnectionParams( server_params=StdioServerParameters( - command="scrapegraph-mcp", ## Available from `pip install scrapegraph-mcp` + # The following CLI command is available + # from `pip install scrapegraph-mcp` + command="scrapegraph-mcp", env={ "SGAI_API_KEY": SGAI_API_KEY, }, @@ -71,7 +74,7 @@ webpages into clean, usable JSON or Markdown. ## Available tools -Tool | Description +Tool | Description ---- | ----------- `markdownify` | Transform any webpage into clean, structured markdown format `smartscraper` | Leverage AI to extract structured data from any webpage with support for infinite scrolling