Skip to main content
Glama
ascentkorea

Hubble MCP Server

by ascentkorea

hubble_mcp

⚠️ Caution

Currently available only in on-premise VPN environments.

Since the API may occasionally fail, you need to check whether the data response was received normally.
(If you click on the message that Claude used as a tool, you can check the API response message.)

set-up-your-environment

Related MCP server: PostHog MCP Server

Setting up the claude_desktop_config.json file

  • Claude Desktop > File > Preferences (Ctrl + ,) > Developer > Edit Preferences

    • After modifying the json file, you need to restart Claude Desktop > File > Exit!

  • If you are on Mac, you need the absolute path to the uv executable file, see the Mac sample below.

{
  "mcpServers": {
    "hubble": {
      "command": "uv",
      "args": [
          "--directory",
          "<Hubble MCP Server 다운로드후 zip 파일 압축 해제후 data_api.py 파일 있는 경로>",
          "run",
          "data_api.py"
      ],
      "env": {
        "HUBBLE_API_KEY": "<HUBBLE_API_KEY>"
      }
    }
  }
}

Sample Windows Settings File

{
  "mcpServers": {
    "hubble": {
      "command": "uv",
      "args": [
          "--directory",
          "C:\\Users\\XXXX\\Documents\\hubble\\hubble_mcp",
          "run",
          "data_api.py"
      ],
      "env": {
        "HUBBLE_API_KEY": "xxx-xxxx-xxxx-xxx"
      }
    }
  }
}

Sample MacOS/Linux configuration file

{
  "mcpServers": {
    "hubble": {
      "command": "/Users/XXX/.local/bin/uv",
      "args": [
          "--directory",
          "/Users/XXX/workspace/hubble/hubble_mcp",
          "run",
          "data_api.py"
      ],
      "env": {
        "HUBBLE_API_KEY": "xxx-xxxx-xxxx-xxx"
      }
    }
  }
}

Description of tools (functions) provided ( https://hubble-data-api.ascentlab.io/ )

  • get_search_path: Search Path API

  • get_keyword_info: Search volume for the keyword (monthly search volume), summary of feature types appearing in Google SERP, search intent (INCT), gender/age ratio for Korea

  • get_graph_info: Relationship information between keywords

  • crawl_google_serp: Google SERP API

  • crawl_web_page: General web page collection API

  • crawl_google_suggest_extension: Google Suggest API

  • crawl_google_trends: Google Trends API

Available Tools

7 tools
crawl_google_serpD

구글 SERP API 요청

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordYes
glNokr

TDQS

D1.8/5.0
Behavior1/5

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

No annotations are provided, so the description must fully disclose behavior. The phrase 'API 요청' (API request) is vague and does not describe whether the tool returns raw HTML, structured data, handles pagination, requires authentication, or has rate limits. Zero 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.

Conciseness2/5

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

The description is extremely short (5 words), which might be considered concise, but it achieves conciseness by omitting critical information. It is under-specified, not efficiently compact. Every word is present, but it does not earn its place due to lack of substance.

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 (2 parameters, no output schema, no annotations), the description is completely inadequate. It fails to explain return values, parameter behavior, or usage context. The agent cannot reliably select or invoke this tool based solely on this description.

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

Parameters1/5

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

Schema description coverage is 0%, meaning the schema lacks descriptions for both parameters. The tool description does not compensate; it does not mention the parameters at all. No explanation of keyword (required) or gl (optional with enum values) is given, leaving the agent without hints beyond the schema itself.

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

Purpose3/5

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

The description '구글 SERP API 요청' indicates it requests Google SERP (search results page). It specifies a verb ('crawl' from tool name) and resource (SERP), but does not detail what is returned or how it differs from siblings like crawl_google_suggest or crawl_google_trends. Purpose is somewhat clear but lacks specificity.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. No context about prerequisites, best use cases, or situations where it should be avoided. This leaves the agent without decision support.

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

crawl_google_suggestC
입력된 키워드에 대해 구글 서제스트에 나타난 키워드 수집 요청
args:
    keyword: str, 키워드
    gl: Literal['kr', 'us', 'jp'] = "kr", 국가 코드
returns:
    dict[Any] | None: 구글 서제스트 수집 결과
키워드 suggestions
한국 (gl: kr)
미국 (gl: us)
일본 (gl: jp)
ParametersJSON Schema
NameRequiredDescriptionDefault
qYes
glNokr

TDQS

C2.4/5.0
Behavior2/5

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

The description indicates it's a read operation collecting suggestions, but lacks details on rate limits, potential blocking, or response structure. The return type 'dict[Any] | None' is vague and insufficient for an agent to understand what to expect.

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 relatively short but contains a docstring-like structure (args, returns). However, there is redundancy in listing the country codes twice, and the parameter mismatch adds confusion. Could be more concise.

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

Completeness2/5

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

Given no output schema, the description should explain the return format in detail. It only says 'dict[Any] | None', which is insufficient. Additionally, the parameter mismatch and lack of behavioral detail make the tool description incomplete for effective use.

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?

The schema has 0% description coverage. The description redundantly lists 'keyword' and 'gl' but inaccurately uses 'keyword' while the schema has 'q'. It adds minimal meaning by listing country labels for the 'gl' enum, but does not clearly explain the parameters' purposes.

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

Purpose3/5

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

The description states it collects Google Suggest keywords for a given keyword, which is clear. However, there is a mismatch between the parameter name in the description ('keyword') and the actual schema name ('q'), which could confuse an AI agent.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus its siblings (e.g., crawl_google_serp, crawl_google_trends). The description simply explains what the tool does without usage context.

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

crawl_web_pageC
웹 페이지 크롤링
args:
    url_list: List[str], 크롤링할 웹 페이지 리스트
returns:
    dict[Any] | None: 크롤링 결과
ParametersJSON Schema
NameRequiredDescriptionDefault
url_listYes

TDQS

C2.6/5.0
Behavior2/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. It only states 'crawl web page' without disclosing error handling, rate limits, authentication needs, or what happens with non-accessible pages. The behavioral profile is completely opaque.

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 short and structured with args and returns, but it is overly minimal. It is not wasteful, but it lacks necessary detail. Better structuring with examples or clearer formatting would improve it.

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

Completeness2/5

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

Given that there is no output schema and no annotations, the description is incomplete. The return value is vaguely described as 'dict[Any] | None', leaving the agent unsure about the structure. Critical behavioral aspects like error handling are missing.

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?

The schema has 0% description coverage, and the description adds no meaningful information beyond the schema. It rephrases the parameter as 'list of web pages to crawl' which adds no new constraints or formatting details. The return type is mentioned as 'dict[Any] | None' without further clarification.

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

Purpose4/5

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

The description states 'Crawl web page' which is a clear verb+resource. However, it does not differentiate from sibling tools like crawl_google_serp, which also crawl web pages but with specific Google scope. The generic name implies any URL, but the description fails to explicitly state that.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, typical use cases, or when not to use it. The sibling tools (e.g., crawl_google_serp) are not referenced for comparison.

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

get_graph_infoA
키워드 관계 정보(리스닝마인드의 클러스터 파인더의 결과 조회, 키워드 관계 정보 조회)
모든 키워드는 소문자로 변환하여 요청
args:
    req_param: ClusterParameters, 키워드 관계 정보 조회 요청 파라미터
returns:
    dict[ClusterResponse, Any] | None: 키워드 관계 정보 조회 결과
ClusterResponse 는 아래와 같은 정보를 포함합니다:  

nodes: 조회한 키워드의 앞과 뒤로 2혹은 2hop 거리 안에서 검색된 모든 키워드(노드) 리스트
nodes_count: 키워드(노드) 수
rels: 관계 리스트
rels_count: 관계 수
closeness: 관계에서 키워드가 출현한 위치.
distance: 모든 관계에서 키워드가 출현한 위치.
type: PEOPLE_ALSO_SEARCH_FOR | RELATED_SEARCHES | REFINEMENTS | PEOPLE_ALSO_ASK_FOR  
ParametersJSON Schema
NameRequiredDescriptionDefault
req_paramYes

TDQS

A3.5/5.0
Behavior4/5

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

In absence of annotations, the description discloses the lowercase normalization of keywords and details the return structure (nodes, rels, etc.). However, it does not mention read-only nature or permissions, which are implied but not explicit.

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 with repetition (e.g., '키워드 관계 정보 조회' twice) and includes a docstring format. It is structured but could be more concise.

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?

Without an output schema, the description adequately explains the return fields and types. It covers the main aspects of the tool, though it omits edge cases and interpretation guidance.

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 input schema has detailed descriptions for nested properties, but the top-level 'req_param' lacks a description (0% coverage). The description adds value by specifying the lowercase normalization and explaining the return type, compensating for the schema gap.

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

Purpose4/5

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

The description states that it queries keyword relationship information and cluster finder results, but it does not clearly distinguish from sibling tools like get_keyword_info. The verb and resource are specific but somewhat redundant.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. The description only states what it does without providing context about suitable scenarios or when not to use it.

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

get_keyword_infoA
    키워드 정보 조회 (최대 1000개 키워드 조회 가능)
    모든 키워드는 소문자로 변환하여 요청
    키워드 정보 조회 결과는 키워드 정보 조회 결과 형식에 따라 반환됩니다.
    args:
        req_param: KeywordParameters, 키워드 정보 조회 요청 파라미터
    returns:
        dict[KeywordResponse, Any] | None: 키워드 정보 조회 결과
KeywordResponse 는 아래와 같은 정보를 포함합니다:
ads_metrics:
    - competition: 경쟁도 수준 (LOW: 0-33, MEDIUM: 34-66, HIGH: 67-100)
    - competition_index: 구글 검색광고 경쟁도 (0-100)
    - cpc: 클릭당 비용
    - volume_avg: 최근 3개월 월평균 검색량
    - volume_total: 최근 12개월 총 검색량
    - volume_trend: 3개월 전 대비 검색량 증감율
    - gg_volume_avg: 구글 최근 3개월 월평균 검색량
    - gg_volume_total: 구글 최근 12개월 총 검색량 
    - gg_volume_trend: 구글 검색량 증감율
    - nv_volume_avg: 네이버 최근 3개월 월평균 검색량
    - nv_volume_total: 네이버 최근 12개월 총 검색량
    - nv_volume_trend: 네이버 검색량 증감율
intents:
    - I: Informational - 잠재 소비자가 제품 자체 정보나 제품이 포함된 카테고리 등에 대한 정보를 얻기 위한 검색
    - N: Navigational - 잠재 소비자가 특정 웹사이트나 브랜드 혹은 매장 위치를 찾기 위한 검색
    - C: Commercial - 구매 전 단계에서 비교, 리뷰, 추천 등의 구매 의사 결정에 도움이 되는 정보를 구하려는 목적의 검색
    - T: Transactional - 구매를 목적으로 하는 검색
monthly_volume:
    - month: 해당 월
    - gg: 구글 검색량
    - nv: 네이버 검색량
    - total: 구글 + 네이버 검색량
ParametersJSON Schema
NameRequiredDescriptionDefault
req_paramYes

TDQS

A4.1/5.0
Behavior4/5

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

Without annotations, the description compensates by detailing the return structure (ads_metrics, intents, monthly_volume) and a preprocessing requirement (lowercase conversion). It does not mention side effects, but the read-only nature is implied by the tool name and known terms.

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

Conciseness4/5

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

The description is structured with a clear purpose first, then behavioral notes, then a detailed return format. While lengthy, the detail is justified by the absence of an output schema. It remains front-loaded and logically organized.

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 complexity of the return data (multiple nested objects), the description thoroughly documents each field. It lacks an output schema but compensates fully. It does not cover error handling, but the tool's behavior is sufficiently described for effective use.

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 input schema provides descriptions for both parameters ('요청 키워드' and '국가 코드') and enums for gl. The description adds no new parameter details but reinforces the request format. Since schema coverage is adequate, the description is satisfactory.

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 '키워드 정보 조회' (keyword information inquiry) with a maximum of 1000 keywords. It distinguishes itself from sibling tools that focus on crawling or graph information by focusing on keyword metrics and intent analysis.

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

Usage Guidelines3/5

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

The description explains what the tool does but does not provide explicit guidance on when to use it versus alternative tools. It implies usage for retrieving keyword analytics but lacks when-not-to-use or comparisons.

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

get_search_pathB

Make a request to the Path Finder API of Hubble with proper error handling. Args: keyword: str, 검색 키워드(모든 키워드는 소문자로 변환하여 요청) gl: str, 지역 코드 한국 일본(kr, jp) limit: int, 검색 경로 분석 결과 최대 개수(기본값 300) Returns: dict[str, Any] | None: 검색 키워드의 검색 경로 분석 결과

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordYes
glNokr
limitNo

TDQS

B3/5.0
Behavior2/5

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

With no annotations, the description should fully disclose behavioral traits. It mentions lowercase conversion and error handling, but omits side effects, authentication, rate limits, and mutation status. The 'dict or None' return type is stated but no details on failure modes.

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 uses a docstring format ('Args:', 'Returns:') which is not ideal for MCP. It is moderately concise but front-loads an irrelevant implementation detail ('proper error handling') instead of the core purpose.

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

Completeness3/5

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

Given no output schema and no annotations, the description explains the core behavior and return type but lacks details on return structure, error scenarios, constraints, and potential side effects. It partially completes the picture.

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?

Schema coverage is 0%, so the description is crucial. It provides type, role, and default for all three parameters (keyword lowercase, gl enum, limit as int with default 300), adding significant value beyond the schema types.

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

Purpose4/5

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

The description states the tool makes a request to the Path Finder API and returns search path analysis results, which is clear but not a concise verb+resource. It distinguishes from siblings (crawl_* tools) but could be more specific.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives. Sibling tools (crawl_*, get_graph_info, get_keyword_info) are not referenced for comparison, leaving the agent to infer usage.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 6 tool updatesv1.0.0
    • Addedcrawl_google_serp
    • Addedcrawl_google_suggest
    • Removedcrawl_google_suggest_extensions
    • Changedcrawl_google_trends7 fields changed
      • addedInput schema / $defs
        Added value: +{
        +  "GoogleTrendsParameters": {
        +    "properties": {
        +      "gl": {
        +        "enum": [
        +          "kr",
        +          "jp"
        +        ],
        +        "title": "Gl",
        +        "type": "string"
        +      },
        +      "keywords": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "maxItems": 3,
        +        "minItems": 1,
        +        "title": "Keywords",
        +        "type": "array"
        +      },
        +      "location": {
        +        "enum": [
        +          "South Korea",
        +          "Japan"
        +        ],
        +        "title": "Location",
        +        "type": "string"
        +      },
        +      "timeframe": {
        +        "enum": [
        +          "now 1-H",
        +          "now 7-d",
        +          "today 1-m"
        +        ],
        +        "title": "Timeframe",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "keywords",
        +      "location",
        +      "timeframe",
        +      "gl"
        +    ],
        +    "title": "GoogleTrendsParameters",
        +    "type": "object"
        +  }
        +}
      • removedInput schema / properties / gl
        Removed value: -{
        -  "enum": [
        -    "kr",
        -    "jp"
        -  ],
        -  "title": "Gl",
        -  "type": "string"
        -}
      • removedInput schema / properties / keywords
        Removed value: -{
        -  "items": {
        -    "type": "string"
        -  },
        -  "title": "Keywords",
        -  "type": "array"
        -}
      • removedInput schema / properties / location
        Removed value: -{
        -  "enum": [
        -    "South Korea",
        -    "Japan"
        -  ],
        -  "title": "Location",
        -  "type": "string"
        -}
      • addedInput schema / properties / req_param
        Added value: +{
        +  "$ref": "#/$defs/GoogleTrendsParameters"
        +}
      • removedInput schema / properties / timeframe
        Removed value: -{
        -  "enum": [
        -    "now 1-H",
        -    "now 7-d",
        -    "today 1-m"
        -  ],
        -  "title": "Timeframe",
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "keywords",
        -  "location",
        -  "timeframe",
        -  "gl"
        -]New value: +[
        +  "req_param"
        +]
    • Changedget_search_path1 field changed
      • changedInput schema / properties / limit / default
        Previous value: -200New value: +300
    • Removedget_serp_info
  2. 7 tool updates
    • First observedcrawl_google_suggest_extensions
    • First observedcrawl_google_trends
    • First observedcrawl_web_page
    • First observedget_graph_info
    • First observedget_keyword_info
    • First observedget_search_path
    • First observedget_serp_info

TDQS

B3.2/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: SERP, suggestions, trends, web page crawling, keyword graph info, keyword details, and search path. No overlap or ambiguity.

Naming Consistency4/5

All tool names use snake_case and follow a verb_noun pattern (crawl_*, get_*). The two verb prefixes are consistent with their functionality, though they differ from each other.

Tool Count5/5

7 tools is well-scoped for a keyword research and analysis server. Each tool covers a distinct aspect of SEO/keyword research without redundancy.

Completeness4/5

The set covers the main workflow: data collection (SERP, suggestions, trends, web pages) and analysis (graph, keyword info, search path). Minor gaps (e.g., no export or comparison tool) but core functionality is solid.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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