Skip to main content
Glama
ascentkorea

Hubble MCP Server

by ascentkorea

crawl_google_trends

Retrieve Google Trends interest scores for up to three keywords in South Korea or Japan. Compare search interest over recent timeframes.

Instructions

구글 트렌드 수집 요청
최근 며칠 이내의 키워드 트렌드 추이를 0~100 사이의 값으로 표현 됩니다.
(검색량은 아니고, 검색 관심도를 나타냅니다. 해당 수치는 0~100 사이의 값으로 표현 됩니다.)
trends: 기간을 기준으로 차트에서 가장 높은 지점 대비 검색 관심도를 나타냅니다. 
값은 검색 빈도가 가장 높은 검색어의 경우 100, 검색 빈도가 그 절반 정도인 검색어의 경우 50, 
해당 검색어에 대한 데이터가 충분하지 않은 경우 0으로 나타납니다.
키워드 하나에 대한 검색 관심도 추이를 알수 있으며, 최대 3개 키워드를 비교 할수 있습니다.
특정 키워드하나를 입력했을때, 특정 기간의 최대값이 100 이라고 했을때,
키워드 여러개 입력시에는 검색관심도가 가장 큰 키워드는 0~100 사이값으로 표현되고, 나머지는 적절히 스케일링 되므로 
비교시에 특정 키워드의 최대값은 100이 아닐수 있습니다.
따라서, 키워드간 관심도 비교시에 4개 이상의 키워드를 비교 하기 위해서는 
우선 3개를 비교 하고, 이후 가장 높은 관심도가 있는 키워드를 계속 같이 추가해야 각 수치간에 비교가 가능해집니다.
args:
    keywords: List[str], 키워드 리스트
    location: Literal['South Korea', 'Japan'],
    timeframe: Literal['now 1-H', 'now 7-d', 'today 1-m'],
    gl: Literal['kr', 'jp']
returns:
    dict[Any] | None: 구글 트렌드 수집 결과

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
req_paramYes

Implementation Reference

  • GoogleTrendsParameters: Pydantic model defining the input schema for crawl_google_trends. Accepts keywords (list of 1-3 strings), location (South Korea/Japan), timeframe (now 1-H/now 7-d/today 1-m), and gl (kr/jp).
    class GoogleTrendsParameters(BaseModel):
        keywords: List[str] = Field(
            min_items=1,
            max_items=3,
        )
        location: Literal['South Korea', 'Japan']
        timeframe: Literal['now 1-H', 'now 7-d', 'today 1-m']
        gl: Literal['kr', 'jp']
  • data_api.py:463-464 (registration)
    The @mcp.tool() decorator registers crawl_google_trends as an MCP tool in the 'hubble' FastMCP server. Also decorated with @async_retry for resilience (2 tries, 0.3s delay).
    @mcp.tool()
    @async_retry(exceptions=(Exception), tries=2, delay=0.3)
  • Handler function for crawl_google_trends. Makes an HTTP POST request to the Hubble API endpoint /google_trend with the GoogleTrendsParameters payload. Returns the response text containing Google Trends data (0-100 search interest scores) for up to 3 keywords.
    async def crawl_google_trends(
            req_param: GoogleTrendsParameters) -> dict[Any] | None:
        '''
        구글 트렌드 수집 요청
        최근 며칠 이내의 키워드 트렌드 추이를 0~100 사이의 값으로 표현 됩니다.
        (검색량은 아니고, 검색 관심도를 나타냅니다. 해당 수치는 0~100 사이의 값으로 표현 됩니다.)
        trends: 기간을 기준으로 차트에서 가장 높은 지점 대비 검색 관심도를 나타냅니다. 
        값은 검색 빈도가 가장 높은 검색어의 경우 100, 검색 빈도가 그 절반 정도인 검색어의 경우 50, 
        해당 검색어에 대한 데이터가 충분하지 않은 경우 0으로 나타납니다.
        키워드 하나에 대한 검색 관심도 추이를 알수 있으며, 최대 3개 키워드를 비교 할수 있습니다.
        특정 키워드하나를 입력했을때, 특정 기간의 최대값이 100 이라고 했을때,
        키워드 여러개 입력시에는 검색관심도가 가장 큰 키워드는 0~100 사이값으로 표현되고, 나머지는 적절히 스케일링 되므로 
        비교시에 특정 키워드의 최대값은 100이 아닐수 있습니다.
        따라서, 키워드간 관심도 비교시에 4개 이상의 키워드를 비교 하기 위해서는 
        우선 3개를 비교 하고, 이후 가장 높은 관심도가 있는 키워드를 계속 같이 추가해야 각 수치간에 비교가 가능해집니다.
        args:
            keywords: List[str], 키워드 리스트
            location: Literal['South Korea', 'Japan'],
            timeframe: Literal['now 1-H', 'now 7-d', 'today 1-m'],
            gl: Literal['kr', 'jp']
        returns:
            dict[Any] | None: 구글 트렌드 수집 결과
        '''
        async with httpx.AsyncClient() as client:
            headers = {"X-API-Key": HUBBLE_API_KEY}
            response = await client.post(
                f"{HUBBLE_API_URL}/google_trend",
                headers=headers,
                json=req_param.model_dump(),
                timeout=30.0)
            response.raise_for_status()
            return response.text
Behavior4/5

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

Since no annotations are provided, the description carries the full burden. It explains that values are scaled relative to the highest point, that it's search interest not volume, and that comparing more than three keywords requires a workaround. This is adequate behavioral disclosure.

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 verbose and repeats information about the 0-100 scale and scaling behavior. While it is structured with paragraphs and an args section, it could be more concise without losing clarity.

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

Completeness4/5

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

Given the absence of output schema and annotations, the description covers purpose, parameters, usage behavior, and return type (dict or None). It is sufficiently complete for an agent to understand and use the tool correctly.

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

Parameters4/5

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

The schema has 0% description coverage, so the description must compensate. It lists all parameters: keywords (list), location (with examples), timeframe (with examples), and gl (with examples). It also explains the constraints (max 3 keywords). This adds significant meaning beyond the schema.

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

Purpose5/5

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

The description clearly states that the tool collects Google Trends data, explaining the 0-100 search interest scale, keyword comparison up to three, and how to handle more than three keywords. It differentiates from sibling tools like crawl_google_serp (search results) and crawl_google_suggest (suggestions).

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

Usage Guidelines4/5

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

The description provides guidance on when to use the tool: for keyword trends over recent periods, comparing up to three keywords directly, and a method for more than three. It does not explicitly state when not to use it or mention alternatives, but the context is clear.

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