occirank/Haloscan-mcp-server
If you are the rightful owner of Haloscan-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
A Model Context Protocol (MCP) server for interacting with the Haloscan SEO API, enabling seamless integration with various MCP-compatible clients.
Haloscan MCP Server
A Model Context Protocol (MCP) server for interacting with the Haloscan SEO API. This server allows easy integration with Claude for Desktop, N8N, and other MCP-compatible clients.
Features
- Exposes Haloscan SEO API functionality through MCP tools
- Provides prompts for common SEO tasks
- Easy integration with workflow automation tools like N8N
Tools
1. User Tools
- get_user_credit
- Retrieves the remaining credit for the user identified by the provided API key.
- Retrieves the remaining credit for the user identified by the provided API key.
2. Keyword Explorer Tools
-
get_keywords_overview
- Retrieves an overview of a specific keyword, providing key performance indicators such as search volume, competition level, and trends over time.
- Inputs:
keyword
(string): Requested keyword.requested_data
(string[]): Any combination of [keyword_match, related_search, related_question, similar_category, similar_serp, top_sites, similar_highlight, categories, metrics, volume_history, serp ].
It is mandatory to specify at least one of the requested data. Here is what they mean:
keyword_match
: Top 10 (wrt search volume) keywords that include the provided keyword in their search query (exact match).related_search
: Top 10 (wrt search volume) keywords that appear in SERP's "Related Searches" section for the provided keyword.related_question
: Top 10 (wrt search volume) keywords that appear in SERP's "People Also Ask" (or in "Related Searches if the keyword is obviously a question) section for the provided keyword.similar_category
: Top 10 (wrt search volume) keywords that have the same "Products & Services" category tree as the provided keyword. Careful, fetching this data significantly increases response time.similar_serp
: Top 10 (wrt SERP similarity) keywords that have a similar organic SERP as the provided keyword.top_sites
: Top 10 (wrt visibility) websites that rank for the provided keyword and similar ones.similar_highlight
: Top 10 (wrt search volume) keywords for which similar terms are highlighted in SERP result pages.categories
: List of Products & Services categories the provided keyword belongs to.metrics
: List of metrics for the provided keyword. Those metrics include:
- Ads metrics: volume, competition, CPC. Your usual ads data.
- SEO metrics: corrected search volume, keyword match count, allintitle, KGR, KVI (Keyword Visibility Index).
- Ads metrics: volume, competition, CPC. Your usual ads data.
volume_history
: Up to 2 years of search volume history for the provided keyword.serp
: Last organic SERP for the provided keyword.
- Retrieves an overview of a specific keyword, providing key performance indicators such as search volume, competition level, and trends over time.
-
get_keywords_match
- Retrieves keywords/expressions including the provided keyword as a substring.
- Input:
keyword
(string): Requested keyword.
- Retrieves keywords/expressions including the provided keyword as a substring.
-
get_keywords_highlights
- Retrieves keywords/expressions for which similar terms are highlighted in SERP result pages.
- Input:
keyword
(string): Requested keyword.
- Retrieves keywords/expressions for which similar terms are highlighted in SERP result pages.
-
get_keywords_related
- Retrieves keywords/expressions that appear in SERP's "Related Searches" section for the provided keyword.
- Input:
keyword
(string): Requested keyword.
- Retrieves keywords/expressions that appear in SERP's "Related Searches" section for the provided keyword.
-
get_keywords_questions
- Retrieves keywords/expressions that appear in SERP's "People Also Ask" (or in "Related Searches if the keyword is obviously a question) section for the provided keyword.
- Input:
keyword
(string): Requested keyword.
- Retrieves keywords/expressions that appear in SERP's "People Also Ask" (or in "Related Searches if the keyword is obviously a question) section for the provided keyword.
-
get_keywords_find
- Retrieves comprehensive data for a given keyword OR list of keywords, including SEO metrics & ads metrics. This endpoint is a wrapper to call
get_keywords_match
,get_keywords_related
,get_keywords_questions
,get_keywords_highlights
together. - Inputs:
keyword
(string): Requested keyword.keywords
(string[]): Requested keywords. Ignored ifkeyword
is provided.keywords_sources
(string[]): Which strategies to use to find keywords from input (Any combination of [match, serp, related, highlights, questions]).
At least one is required. Here is what they mean:
match
: Keywords/expressions that include the provided keyword in their search query (exact match).serp
: Keywords/expressions that have a similar organic SERP as the provided keyword.related
: Keywords/expressions that appear in SERP's "Related Searches" section for the provided keyword.highlights
: Keywords/expressions for which similar terms are highlighted in SERP result pages.questions
: Keywords/expressions that appear in SERP's "People Also Ask" (or in "Related Searches if the keyword is obviously a question) section for the provided keyword.
- Retrieves comprehensive data for a given keyword OR list of keywords, including SEO metrics & ads metrics. This endpoint is a wrapper to call
-
get_keywords_site_structure
- Clustering endpoint. You can use it either in bulk (then provide a value for
keywords
) or in single request (then provide a value forkeyword
). - Input:
keyword
(string): Requested keyword. Ignored ifkeywords
is provided. If you only provide a value forkeyword
(withoutkeywords
), then an equivalent ofget_keywords_find
will run first, to fetch keywords to group.keywords
(string[]): Requested keywords.mode
(string): Clustering mode. Eithermanual
ormulti
. Inmanual
mode, keywords are grouped based on SERP similarity. Inmulti
mode, hierarchical groups are made, based on graph link density.
- Clustering endpoint. You can use it either in bulk (then provide a value for
-
get_keywords_serp_compare
- Compares a given keyword/expression's SERP at 2 different dates.
- Inputs:
keyword
(string): Requested keyword/expression.period
(string): The comparison period for SERPs (1 month, 3 months, 6 months, 12 months, custom).first_date
(string): Date in YYYY-MM-DD format. Ignored ifperiod
is notcustom
. This date must be a valid date for the given keyword/expression. Valid search dates are returned inavailable_search_dates
item in call response, or as a response forget_keywords_serp_available_dates
.second_date
(string): Date in YYYY-MM-DD format. Ignored ifperiod
is notcustom
. This date must be a valid date for the given keyword/expression. Valid search dates are returned inavailable_search_dates
item in call response, or as a response forget_keywords_serp_available_dates
.
- Compares a given keyword/expression's SERP at 2 different dates.
-
get_keywords_serp_availableDates
- Retrieves the available dates for historical SERP data for a given keyword.
- Input:
keyword
(string): Requested keyword.
- Retrieves the available dates for historical SERP data for a given keyword.
-
get_keywords_serp_pageEvolution
- Retrieves the evolution of SERP rankings of a given URL for a specific keyword over time. All parameters are mandatory.
- Inputs:
keyword
(string): Requested keyword/expression.first_date
(string): Date in YYYY-MM-DD format.second_date
(string): Date in YYYY-MM-DD format.url
(string): URL to track rankings for.
- Retrieves the evolution of SERP rankings of a given URL for a specific keyword over time. All parameters are mandatory.
-
get_keywords_bulk
- Retrieves keyword data (SEO metrics, ads metrics, etc.) for multiple keywords at once in a bulk request.
- Input:
keywords
(string[]): Array containing the requested keywords.
- Retrieves keyword data (SEO metrics, ads metrics, etc.) for multiple keywords at once in a bulk request.
-
get_keywords_scrap
- Ask Haloscan to scrape the search engine results pages (SERP) for a given keyword/expression. The scrap will take around 24h to be completed.
- Input:
keywords
(string[]): Array containing the requested keywords.
- Ask Haloscan to scrape the search engine results pages (SERP) for a given keyword/expression. The scrap will take around 24h to be completed.
3. Site Explorer Tools
-
get_domains_overview
- Retrieves a comprehensive SEO performance summary for a specific domain.
- Inputs:
input
(string): Target url, domain or root domain.mode
(string): Any of (auto
,root
,domain
,url
). How to interpret the input. Usually, you want to useroot
to get data about the root domain.requested_data
(string[]): At least one of (metrics
,positions_breakdown
,traffic_value
,categories
,best_keywords
,best_pages
,gmb_backlinks
,visibility_index_history
,positions_breakdown_history
,positions_and_pages_history
). Which data to fetch among:
metrics
: SEO metrics for the given domain (VI, position count, keyword count, traffic, page count, ranks, etc.).positions_breakdown
: Search engine ranking positions for the given domain.traffic_value
: Traffic value for the given domain (may take a while to compute for large domains).categories
: Categories for the given domain (may take a while to compute for large domains).best_keywords
: Top-performing keywords for the given domain (may take a while to compute for large domains).best_pages
: Top-performing pages for the given domain (may take a while to compute for large domains).gmb_backlinks
: GMB backlinks for the given domain.visibility_index_history
: Visibility index history for the given domain.positions_breakdown_history
: Search engine ranking positions breakdown history for the given domain.positions_and_pages_history
: Search engine ranking positions and pages history for the given domain.
- Retrieves a comprehensive SEO performance summary for a specific domain.
-
get_domains_positions
- Retrieves the search engine ranking positions of a specified domain.
- Input:
input
(string): Target url, domain or root domain.mode
(string): Any of (auto
,root
,domain
,url
). How to interpret the input. Usually, you want to useroot
to get data about the root domain.
- Retrieves the search engine ranking positions of a specified domain.
-
get_domains_top_pages
- Retrieves the top-performing pages of a specified domain based on aggregated organic search metrics such as traffic, number of ranking keywords.
- Input:
input
(string): Target url, domain or root domain.mode
(string): Any of (auto
,root
,domain
,url
). How to interpret the input. Usually, you want to useroot
to get data about the root domain.
- Retrieves the top-performing pages of a specified domain based on aggregated organic search metrics such as traffic, number of ranking keywords.
-
get_domains_history_positions
- Retrieves historical ranking positions for a specific domain, between 2 specified dates. Very useful if you want to find lost positions.
- Inputs:
input
(string): Target url or domain.mode
(string): Any of (auto
,root
,domain
,url
). How to interpret the input. Usually, you want to useroot
to get data about the root domain.date_from
(string): Date in YYYY-MM-DD format.date_to
(string): Date in YYYY-MM-DD format.
- Retrieves historical ranking positions for a specific domain, between 2 specified dates. Very useful if you want to find lost positions.
-
get_domains_history_pages
- Retrieves page-wise historical SEO performance data for a specified domain between 2 specified dates.
- Inputs:
input
(string): Target url or domain.mode
(string): Any of (auto
,root
,domain
,url
). How to interpret the input. Usually, you want to useroot
to get data about the root domain.date_from
(string): Date in YYYY-MM-DD format.date_to
(string): Date in YYYY-MM-DD format.
- Retrieves page-wise historical SEO performance data for a specified domain between 2 specified dates.
-
get_page_best_keywords
- Retrieves the top-performing keywords for a specific URL, showing which search queries drive the most traffic and visibility to that page.
- Input:
input
(string[]): Target urls.mode
(string): Any of (auto
,root
,domain
,url
). How to interpret the input. Usually, you want to useroot
to get data about the root domain.strategy
(string): Any of (both
,only_active
,only_lost
). Whether to return all positioned keywords, only active ones or only lost ones.
- Retrieves the top-performing keywords for a specific URL, showing which search queries drive the most traffic and visibility to that page.
-
get_domains_keywords
- Retrieves current positions of a given domain for a list of given keywords.
- Inputs:
input
(string): Target url or domain.mode
(string): Any of (auto
,root
,domain
,url
). How to interpret the input. Usually, you want to useroot
to get data about the root domain.keywords
(string[]): Mandatory array containing the requested keywords.
- Retrieves current positions of a given domain for a list of given keywords.
-
get_domains_bulk
- Retrieves SEO performance metrics for multiple domains in a single request.
- Input:
inputs
(string[]): Array containing the requested urls or domains.mode
(string): Any of (auto
,root
,domain
,url
). How to interpret the input. Usually, you want to useroot
to get data about the root domains.
- Retrieves SEO performance metrics for multiple domains in a single request.
-
get_domains_competitors
- Retrieves a list of organic search competitors for a given domain based on overlapping keywords (may take a while to compute for large domains).
- Input:
input
(string): Target url or domain.mode
(string): Any of (auto
,root
,domain
,url
). How to interpret the input. Usually, you want to useroot
to get data about the root domain.
- Retrieves a list of organic search competitors for a given domain based on overlapping keywords (may take a while to compute for large domains).
-
get_domains_competitors_keywords_diff
- Compares the keyword differences between a given domain and its competitors, highlighting keywords that one domain ranks for but the other does not (may take a while to compute for large domains).
- Inputs:
input
(string): Target url or domain.mode
(string): Any of (auto
,root
,domain
,url
). How to interpret the input. Usually, you want to useroot
to get data about the root domain.competitors
(string[]): Mandatory list of (up to 20) competitors to compare the input to.exclusive
(boolean): Whether to include positions where only the search input is positioned, and none of the requested competitors is.missing
(boolean): Whether to include positions where the search input is not positioned, and at least one of the requested competitors is.bested
(boolean): Whether to include positions where the search input is positioned, and better positioned than at least one of the requested competitors.besting
(boolean): Whether to include positions where the search input is positioned, but at least one of the requested competitors is positioned better.
- Compares the keyword differences between a given domain and its competitors, highlighting keywords that one domain ranks for but the other does not (may take a while to compute for large domains).
-
get_domains_competitors_best_pages
- Retrieves the best-performing pages of (specified) competitors of a given domain (may take a while to compute for large domains).
- Inputs:
input
(string): Target url or domain.mode
(string): Any of (auto
,root
,domain
,url
). How to interpret the input. Usually, you want to useroot
to get data about the root domain.competitors
(string[]): Mandatory list of (up to 20) competitors to compare the input to.
- Retrieves the best-performing pages of (specified) competitors of a given domain (may take a while to compute for large domains).
-
get_domains_competitors_keywords_best_positions
- Retrieves the best-ranking positions for a given list of domains on a given list of keywords.
- Inputs:
competitors
(string[]): List of competitor domains or root domains.keywords
(string[]): Mandatory list of keywords to look for.
- Retrieves the best-ranking positions for a given list of domains on a given list of keywords.
-
get_domains_visibility_trends
- Retrieves the visibility trend for a specific domain over time, showing how its search engine visibility has evolved.
- Input:
input
(string[]): Array containing the requested urls or domains.mode
(string): Any of (auto
,root
,domain
,url
). How to interpret the input. Usually, you want to useroot
to get data about the root domain.type
(string): Any of (first
,highest
,trends
,index
). Should data be scaled, and how. Useindex
to get the raw visibility index.
- Retrieves the visibility trend for a specific domain over time, showing how its search engine visibility has evolved.
-
get_domains_expired
- Returns a list of available domains. Domains are returned without their url unless you have already revealed them (in which case root_domain is filled), and a call to domains/expired/reveal is required to reveal domains you are interested in.
- Input:
keyword
(string): Optional keyword on which the expired domain should have been positioned.
- Returns a list of available domains. Domains are returned without their url unless you have already revealed them (in which case root_domain is filled), and a call to domains/expired/reveal is required to reveal domains you are interested in.
Configuration
- Sign up for an Haloscan account.
- Choose a plan.
- Generate your API key from Configuration API page.
- Use the API key for the Haloscan server in the Claude Desktop configuration file.
Usage with Claude Desktop
Add this server to your Claude Desktop configuration file claude_desktop_config.json
:
NPX
{
"mcpServers": {
"haloscan": {
"command": "npx",
"args": [
"-y",
"@occirank/haloscan-server",
"start"
],
"env": {
"HALOSCAN_API_KEY": "YOUR API KEY"
}
}
}
}
License
MIT