Skip to main content
Glama
ascentkorea

Hubble MCP Server

by ascentkorea

crawl_google_serp

Fetch Google search results for specific keywords and regions using Hubble MCP Server's API integration.

Instructions

구글 SERP API 요청

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
keywordYes
glNokr

Implementation Reference

  • The core handler function for the 'crawl_google_serp' MCP tool, registered via the @mcp.tool() decorator. Includes an async retry wrapper. Proxies parameters to an internal Hubble API endpoint '/google_serp' and returns the raw text response typed against SerpResponse schema.
    @mcp.tool()
    @async_retry(exceptions=(Exception), tries=2, delay=0.3)
    async def crawl_google_serp(
            keyword: str,
            gl: Literal['kr', 'us', 'jp'] = "kr") -> dict[SerpResponse, Any] | None:
        '''
        구글 SERP API 요청
        '''
        async with httpx.AsyncClient() as client:
            payload = {
                "keyword": keyword,
                "gl": gl
            }
            headers = {"X-API-Key": HUBBLE_API_KEY}
            response = await client.post(
                f"{HUBBLE_API_URL}/google_serp",
                headers=headers,
                json=payload,
                timeout=30.0)
            response.raise_for_status()
            return response.text
  • Pydantic BaseModel defining the structure of the SERP response (output schema for the tool), inheriting from BaseResponse. Includes request details, cost, credits, and data list.
    class SerpResponse(BaseResponse):
        """SERP 응답 형식
        """
        request_detail: SerpParameters = Field(description="요청 받았던 파라미터")
        cost: int = Field(default=0, title="", description="")
        remain_credits: int = Field(default=-1, title="", description="")
        data: Optional[List[dict]] = Field(default=None, title="", description="")
  • data_api.py:381-381 (registration)
    The @mcp.tool() decorator registers the crawl_google_serp function as an MCP tool.
    @mcp.tool()
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states it's an API request, with no information on whether it's read-only, destructive, requires authentication, has rate limits, returns structured data, or handles errors. This is inadequate for a tool with potential complexity like web crawling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single phrase, which is concise but under-specified rather than efficiently informative. It's front-loaded but lacks substance, making it more of a placeholder than a helpful summary. While not verbose, it doesn't earn its place with useful content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a web crawling tool with 2 parameters, no annotations, and no output schema, the description is severely incomplete. It doesn't explain what the tool returns (e.g., SERP data, rankings), how to interpret results, or any behavioral traits. This leaves critical gaps for an AI agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for undocumented parameters. It adds no meaning beyond the schema—no explanation of what 'keyword' is used for (e.g., search query) or 'gl' (e.g., country code for localization). The description fails to clarify parameter roles or usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description '구글 SERP API 요청' (Google SERP API request) restates the tool name 'crawl_google_serp' in different words, making it tautological. It doesn't specify what the tool actually does (e.g., fetch search results, extract rankings) or distinguish it from siblings like 'crawl_web_page' or 'get_keyword_info'. The purpose is vague beyond the basic domain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. It doesn't mention scenarios like needing search results versus trends (crawl_google_trends) or suggestions (crawl_google_suggest), nor does it specify prerequisites or exclusions. The description provides zero usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ascentkorea/hubble_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server