Wincher MCP by usefulapi
Read Wincher keyword rankings, SERPs, competitors and history; add keywords, groups and notes.
我该使用它吗
质量与安全性
发现(4)
- LOW在 wincher_get_keyword_ranking_history 中
- LOW在 wincher_get_ranking_history_bulk 中
- LOW在 wincher_list_competitor_ranking_summaries 中
- LOW在 wincher_list_competitor_keyword_positions 中
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"wincher": {
"url": "https://wincher.usefulapi.io/mcp"
}
}
}远程端点
https://wincher.usefulapi.io/mcpstreamable-http它能做什么
工具清单
工具(22)
🟢wincher_get_account
The Wincher account behind the token: id, timezone and the plan limits with current usage (websites, users, keywords, keyword lookups, map-tracking credits, history days). Check keyword usage here before adding keywords. GET /account.
输入模式
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢wincher_get_user
The Wincher user the token belongs to: id, role, state, project access and profile (name, email, language). GET /user.
输入模式
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢wincher_list_search_engines
The search engines Wincher can track (id, domain such as google.com, country, languages, default location). GET /search-engines.
输入模式
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢wincher_search_locations(search, country)
Search the locations Wincher can track rankings for (code, name, country), most popular first, at most 100. Both are required by the API: an ISO country code and a free-text search (at least 3 characters). GET /locations.
输入模式
{
"type": "object",
"properties": {
"search": {
"type": "string",
"minLength": 3,
"maxLength": 100,
"description": "Free text, at least 3 characters, e.g. 'new york' (required by the Wincher API)."
},
"country": {
"type": "string",
"pattern": "^[A-Za-z]{2}$",
"description": "ISO 3166-1 alpha-2 country code, e.g. US (required by the Wincher API)."
}
},
"required": [
"search",
"country"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢wincher_list_projects(order_by, limit, offset, include_ranking, start, ...)
List projects (folders that group websites): id, name, website_ids, user_ids, and optionally the ranking summary for a period. GET /projects.
输入模式
{
"type": "object",
"properties": {
"order_by": {
"description": "Field to order by; prefix with '-' for descending, e.g. 'keyword' or '-created_at'.",
"type": "string",
"pattern": "^-?[a-z][a-z0-9_.]{0,59}$"
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"offset": {
"description": "Skip this many results (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"include_ranking": {
"description": "Include ranking data (slower and larger). Default false.",
"type": "boolean"
},
"start": {
"description": "Start of the period (date or ISO date-time, UTC).",
"type": "string"
},
"end": {
"description": "End of the period (date or ISO date-time, UTC).",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢wincher_list_websites(order_by, limit, offset, include_ranking, include_serp_features, ...)
List the websites tracked in Wincher: id, domain, display name, search engine, location, language, mobile flag, keyword/group/competitor counts, competitors and brand keywords. Optionally with the ranking summary for a period. GET /websites.
输入模式
{
"type": "object",
"properties": {
"order_by": {
"description": "Field to order by; prefix with '-' for descending, e.g. 'keyword' or '-created_at'.",
"type": "string",
"pattern": "^-?[a-z][a-z0-9_.]{0,59}$"
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"offset": {
"description": "Skip this many results (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"include_ranking": {
"description": "Include ranking data (slower and larger). Default false.",
"type": "boolean"
},
"include_serp_features": {
"description": "Include serp_features in the ranking data. Default true; false makes replies much smaller and faster.",
"type": "boolean"
},
"start": {
"description": "Start of the period (date or ISO date-time, UTC).",
"type": "string"
},
"end": {
"description": "End of the period (date or ISO date-time, UTC).",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢wincher_get_website(website_id, include_ranking, include_serp_features, segment_id, start, ...)
One tracked website with its settings, competitors, brand keywords, counts and (for the period) ranking summary. GET /websites/{website_id}.
输入模式
{
"type": "object",
"properties": {
"website_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Wincher website id (from wincher_list_websites)."
},
"include_ranking": {
"description": "Include ranking data (slower and larger). Default false.",
"type": "boolean"
},
"include_serp_features": {
"description": "Include serp_features in the ranking data. Default true; false makes replies much smaller and faster.",
"type": "boolean"
},
"segment_id": {
"description": "Filter by a saved or temporary segment id (see wincher_list_segments).",
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,100}$"
},
"start": {
"description": "Start of the period (date or ISO date-time, UTC).",
"type": "string"
},
"end": {
"description": "End of the period (date or ISO date-time, UTC).",
"type": "string"
}
},
"required": [
"website_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢wincher_list_keywords(website_id, order_by, limit, offset, include_ranking, ...)
List the keywords tracked for a website with groups, volume, CPC, difficulty, competition, search intents and, with include_ranking, the latest position, traffic, ranking pages, SERP features and best position in the period. Positions are tracked down to the top 30. GET /websites/{website_id}/keywords.
输入模式
{
"type": "object",
"properties": {
"website_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Wincher website id (from wincher_list_websites)."
},
"order_by": {
"description": "Field to order by; prefix with '-' for descending, e.g. 'keyword' or '-created_at'.",
"type": "string",
"pattern": "^-?[a-z][a-z0-9_.]{0,59}$"
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"offset": {
"description": "Skip this many results (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"include_ranking": {
"description": "Include ranking data (slower and larger). Default false.",
"type": "boolean"
},
"segment_id": {
"description": "Filter by a saved or temporary segment id (see wincher_list_segments).",
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,100}$"
},
"start": {
"description": "Start of the period (date or ISO date-time, UTC).",
"type": "string"
},
"end": {
"description": "End of the period (date or ISO date-time, UTC).",
"type": "string"
}
},
"required": [
"website_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢wincher_get_keyword(website_id, keyword_id, include_ranking, start, end)
One tracked keyword with its groups, volume, CPC, difficulty and (default) ranking for the period. GET /websites/{website_id}/keywords/{keyword_id}.
输入模式
{
"type": "object",
"properties": {
"website_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Wincher website id (from wincher_list_websites)."
},
"keyword_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Wincher keyword id (from wincher_list_keywords)."
},
"include_ranking": {
"description": "Include ranking data. Default true; false is faster.",
"type": "boolean"
},
"start": {
"description": "Start of the period (date or ISO date-time, UTC).",
"type": "string"
},
"end": {
"description": "End of the period (date or ISO date-time, UTC).",
"type": "string"
}
},
"required": [
"website_id",
"keyword_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢wincher_get_keyword_serps(website_id, keyword_id)
The most recent search result pages Wincher stored for a keyword (up to 30): date, search volume, SERP features and the ranking results (position, URL, domain, traffic). GET /websites/{website_id}/keywords/{keyword_id}/serps.
输入模式
{
"type": "object",
"properties": {
"website_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Wincher website id (from wincher_list_websites)."
},
"keyword_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Wincher keyword id (from wincher_list_keywords)."
}
},
"required": [
"website_id",
"keyword_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢wincher_get_keyword_ranking_history(website_id, keyword_id, start, end, metric, ...)
Historical position (or estimated traffic) for ONE keyword as time series, optionally split per ranking page or per competitor. GET /websites/{website_id}/keyword/{keyword_id}/ranking-history.
输入模式
{
"type": "object",
"properties": {
"website_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Wincher website id (from wincher_list_websites)."
},
"keyword_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Wincher keyword id (from wincher_list_keywords)."
},
"start": {
"description": "Start of the period (date or ISO date-time, UTC).",
"type": "string"
},
"end": {
"description": "End of the period (date or ISO date-time, UTC).",
"type": "string"
},
"metric": {
"description": "Default position.",
"type": "string",
"enum": [
"position",
"traffic"
]
},
"group_by": {
"description": "Split into one series per ranking page or per competitor.",
"type": "string",
"enum": [
"page",
"competitor"
]
}
},
"required": [
"website_id",
"keyword_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢wincher_get_ranking_history_bulk(website_id, keyword_ids, start, end)
Historical positions for up to 50 keywords at once (one time series per keyword). This is a read: it uses POST only because the keyword id list goes in the body. POST /websites/{website_id}/ranking-history.
输入模式
{
"type": "object",
"properties": {
"website_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Wincher website id (from wincher_list_websites)."
},
"keyword_ids": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"description": "Keyword ids (1-50)."
},
"start": {
"type": "string",
"description": "Start of the period (date or ISO date-time, UTC)."
},
"end": {
"type": "string",
"description": "End of the period (date or ISO date-time, UTC)."
}
},
"required": [
"website_id",
"keyword_ids",
"start",
"end"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢wincher_list_groups(website_id, order_by, limit, offset, include_ranking, ...)
List the keyword groups of a website: id, name, keyword_ids, average difficulty, search-intent counts and optionally ranking summaries. GET /websites/{website_id}/groups.
输入模式
{
"type": "object",
"properties": {
"website_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Wincher website id (from wincher_list_websites)."
},
"order_by": {
"description": "Field to order by; prefix with '-' for descending, e.g. 'keyword' or '-created_at'.",
"type": "string",
"pattern": "^-?[a-z][a-z0-9_.]{0,59}$"
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"offset": {
"description": "Skip this many results (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
},
"include_ranking": {
"description": "Include ranking data (slower and larger). Default false.",
"type": "boolean"
},
"include_serp_features": {
"description": "Include serp_features in the ranking data. Default true; false makes replies much smaller and faster.",
"type": "boolean"
},
"segment_id": {
"description": "Filter by a saved or temporary segment id (see wincher_list_segments).",
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,100}$"
},
"start": {
"description": "Start of the period (date or ISO date-time, UTC).",
"type": "string"
},
"end": {
"description": "End of the period (date or ISO date-time, UTC).",
"type": "string"
}
},
"required": [
"website_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢wincher_get_group(website_id, group_id, include_ranking, include_serp_features, segment_id, ...)
One keyword group with its keyword ids and (optionally) ranking summary for the period. GET /websites/{website_id}/groups/{group_id}.
输入模式
{
"type": "object",
"properties": {
"website_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Wincher website id (from wincher_list_websites)."
},
"group_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Keyword group id (from wincher_list_groups)."
},
"include_ranking": {
"description": "Include ranking data (slower and larger). Default false.",
"type": "boolean"
},
"include_serp_features": {
"description": "Include serp_features in the ranking data. Default true; false makes replies much smaller and faster.",
"type": "boolean"
},
"segment_id": {
"description": "Filter by a saved or temporary segment id (see wincher_list_segments).",
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,100}$"
},
"start": {
"description": "Start of the period (date or ISO date-time, UTC).",
"type": "string"
},
"end": {
"description": "End of the period (date or ISO date-time, UTC).",
"type": "string"
}
},
"required": [
"website_id",
"group_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢wincher_list_competitors(website_id, order_by, limit, offset)
The competitor domains tracked for a website (id, domain, created_at). GET /websites/{website_id}/competitors.
输入模式
{
"type": "object",
"properties": {
"website_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Wincher website id (from wincher_list_websites)."
},
"order_by": {
"description": "Field to order by; prefix with '-' for descending, e.g. 'keyword' or '-created_at'.",
"type": "string",
"pattern": "^-?[a-z][a-z0-9_.]{0,59}$"
},
"limit": {
"description": "Results per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
},
"offset": {
"description": "Skip this many results (default 0). Pass the previous reply's next_offset.",
"type": "integer",
"minimum": 0,
"maximum": 10000000
}
},
"required": [
"website_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢wincher_list_competitor_ranking_summaries(website_id, include_serp_features, segment_id, start, end)
Ranking summaries (average position, share of voice, traffic, position distribution, volume) for the website's competitors over a period, for comparison with your own. GET /websites/{website_id}/competitors/ranking-summaries.
输入模式
{
"type": "object",
"properties": {
"website_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Wincher website id (from wincher_list_websites)."
},
"include_serp_features": {
"description": "Include serp_features in the ranking data. Default true; false makes replies much smaller and faster.",
"type": "boolean"
},
"segment_id": {
"description": "Filter by a saved or temporary segment id (see wincher_list_segments).",
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,100}$"
},
"start": {
"description": "Start of the period (date or ISO date-time, UTC).",
"type": "string"
},
"end": {
"description": "End of the period (date or ISO date-time, UTC).",
"type": "string"
}
},
"required": [
"website_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢wincher_list_competitor_keyword_positions(website_id, segment_id, start, end)
For each tracked keyword, the position of your site and of each competitor in the period. GET /websites/{website_id}/competitors/keyword-positions.
输入模式
{
"type": "object",
"properties": {
"website_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Wincher website id (from wincher_list_websites)."
},
"segment_id": {
"description": "Filter by a saved or temporary segment id (see wincher_list_segments).",
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,100}$"
},
"start": {
"description": "Start of the period (date or ISO date-time, UTC).",
"type": "string"
},
"end": {
"description": "End of the period (date or ISO date-time, UTC).",
"type": "string"
}
},
"required": [
"website_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢wincher_list_annotations(website_id, start, end)
The annotations (notes on the ranking graphs: automatic, alert and user-written) for a website, optionally within a period. GET /websites/{website_id}/annotations.
输入模式
{
"type": "object",
"properties": {
"website_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Wincher website id (from wincher_list_websites)."
},
"start": {
"description": "Start of the period (date or ISO date-time, UTC).",
"type": "string"
},
"end": {
"description": "End of the period (date or ISO date-time, UTC).",
"type": "string"
}
},
"required": [
"website_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢wincher_list_segments(only_named)
The saved segments (keyword filters) usable as segment_id in other tools. By default also temporary ones; only_named limits to saved ones. GET /segments.
输入模式
{
"type": "object",
"properties": {
"only_named": {
"description": "Only named (saved) segments. Default false.",
"type": "boolean"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴wincher_add_keywords(website_id, keywords, groups)
WRITE: start tracking up to 50 new keywords on ONE website. EACH keyword uses one keyword slot of the plan's keyword quota (see wincher_get_account), and it is tracked and updated from then on; this tool cannot remove keywords again. Each keyword may name a preferred_url (the landing page expected to rank). Invalid or already-tracked keywords are ignored by Wincher (not created). 'groups' are keyword group NAMES to put every keyword in (may be empty; use names from wincher_list_groups, an unknown name may create a new group). POST /websites/{website_id}/keywords/bulk.
输入模式
{
"type": "object",
"properties": {
"website_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Wincher website id (from wincher_list_websites)."
},
"keywords": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"keyword": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "The search term to track."
},
"preferred_url": {
"description": "Preferred landing page for this keyword.",
"type": "string",
"minLength": 1,
"maxLength": 2000
}
},
"required": [
"keyword"
]
},
"description": "1-50 keywords to add (each uses one keyword slot)."
},
"groups": {
"description": "Keyword group names to assign to all of these keywords (default none).",
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
}
},
"required": [
"website_id",
"keywords"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡wincher_create_group(website_id, name, keyword_ids)
WRITE: create a keyword group on a website, optionally containing existing keywords (ids from wincher_list_keywords). Uses no keyword quota. POST /websites/{website_id}/groups.
输入模式
{
"type": "object",
"properties": {
"website_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Wincher website id (from wincher_list_websites)."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Group name (1-200 characters)."
},
"keyword_ids": {
"description": "Existing keyword ids to put in the group (default none).",
"maxItems": 1000,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
}
},
"required": [
"website_id",
"name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡wincher_create_annotation(website_id, date, description, keyword_ids)
WRITE: add a user annotation (a note shown on the ranking graphs, e.g. 'Launched new landing page') for a date, optionally tied to specific keywords; without keyword_ids it is a global note for the website. Visible to everyone with access to the website. Uses no keyword quota. POST /websites/{website_id}/annotations.
输入模式
{
"type": "object",
"properties": {
"website_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Wincher website id (from wincher_list_websites)."
},
"date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "The date the note is shown at, yyyy-mm-dd."
},
"description": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "The note text."
},
"keyword_ids": {
"description": "Keyword ids this note relates to; omit for a global note.",
"maxItems": 100,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
}
},
"required": [
"website_id",
"date",
"description"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}社区
证据