@channel47/dataforseo-mcp-server 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +155 -0
  3. package/dist/api/ai-optimization/index.d.ts +3 -0
  4. package/dist/api/ai-optimization/index.js +178 -0
  5. package/dist/api/ai-optimization/index.js.map +1 -0
  6. package/dist/api/app-data/index.d.ts +3 -0
  7. package/dist/api/app-data/index.js +115 -0
  8. package/dist/api/app-data/index.js.map +1 -0
  9. package/dist/api/backlinks/index.d.ts +3 -0
  10. package/dist/api/backlinks/index.js +186 -0
  11. package/dist/api/backlinks/index.js.map +1 -0
  12. package/dist/api/business-data/index.d.ts +3 -0
  13. package/dist/api/business-data/index.js +235 -0
  14. package/dist/api/business-data/index.js.map +1 -0
  15. package/dist/api/client.d.ts +10 -0
  16. package/dist/api/client.js +54 -0
  17. package/dist/api/client.js.map +1 -0
  18. package/dist/api/content-analysis/index.d.ts +3 -0
  19. package/dist/api/content-analysis/index.js +64 -0
  20. package/dist/api/content-analysis/index.js.map +1 -0
  21. package/dist/api/content-generation/index.d.ts +3 -0
  22. package/dist/api/content-generation/index.js +75 -0
  23. package/dist/api/content-generation/index.js.map +1 -0
  24. package/dist/api/domain-analytics/index.d.ts +3 -0
  25. package/dist/api/domain-analytics/index.js +69 -0
  26. package/dist/api/domain-analytics/index.js.map +1 -0
  27. package/dist/api/keywords/index.d.ts +3 -0
  28. package/dist/api/keywords/index.js +73 -0
  29. package/dist/api/keywords/index.js.map +1 -0
  30. package/dist/api/labs/index.d.ts +3 -0
  31. package/dist/api/labs/index.js +315 -0
  32. package/dist/api/labs/index.js.map +1 -0
  33. package/dist/api/localfalcon/index.d.ts +7 -0
  34. package/dist/api/localfalcon/index.js +109 -0
  35. package/dist/api/localfalcon/index.js.map +1 -0
  36. package/dist/api/merchant/index.d.ts +3 -0
  37. package/dist/api/merchant/index.js +133 -0
  38. package/dist/api/merchant/index.js.map +1 -0
  39. package/dist/api/onpage/index.d.ts +3 -0
  40. package/dist/api/onpage/index.js +68 -0
  41. package/dist/api/onpage/index.js.map +1 -0
  42. package/dist/api/serp/index.d.ts +3 -0
  43. package/dist/api/serp/index.js +99 -0
  44. package/dist/api/serp/index.js.map +1 -0
  45. package/dist/api/tools.d.ts +11 -0
  46. package/dist/api/tools.js +61 -0
  47. package/dist/api/tools.js.map +1 -0
  48. package/dist/api/types.d.ts +89 -0
  49. package/dist/api/types.js +19 -0
  50. package/dist/api/types.js.map +1 -0
  51. package/dist/index.d.ts +2 -0
  52. package/dist/index.js +34 -0
  53. package/dist/index.js.map +1 -0
  54. package/package.json +54 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Skobyn
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,155 @@
1
+ # DataForSEO Keywords MCP Server
2
+
3
+ [![MseeP.ai Security Assessment Badge](https://mseep.net/pr/skobyn-dataforseo-mcp-server-badge.png)](https://mseep.ai/app/skobyn-dataforseo-mcp-server)
4
+
5
+ A focused MCP (Model Context Protocol) server for keyword research and analysis via the DataForSEO API. Built specifically for **search and shopping media buyers** working with Google Ads and Bing Ads campaigns.
6
+
7
+ <a href="https://glama.ai/mcp/servers/@Skobyn/dataforseo-mcp-server">
8
+ <img width="380" height="200" src="https://glama.ai/mcp/servers/@Skobyn/dataforseo-mcp-server/badge" alt="DataForSEO Keywords MCP server" />
9
+ </a>
10
+
11
+ ## Overview
12
+
13
+ This MCP server enables LLMs like Claude to perform keyword research, analyze search volumes, explore trends, and gather competitive intelligence—all through natural language interactions. It's designed for media buyers who need quick access to keyword data for Google and Bing advertising campaigns.
14
+
15
+ The server uses stdio transport for easy integration with Claude Code, Claude Desktop, and other MCP-compatible platforms.
16
+
17
+ ## Features
18
+
19
+ - **Google Ads keyword data** - Search volumes, keyword suggestions, and competition metrics
20
+ - **Bing Ads keyword data** - Keyword research for Microsoft Advertising campaigns
21
+ - **Google Trends integration** - Explore keyword trends over time
22
+ - **Location and language targeting** - Filter data by geographic region and language
23
+ - Stdio transport for seamless LLM integration
24
+ - Type-safe tool definitions with Zod schemas
25
+ - Clear error reporting
26
+
27
+ ## Sign Up for DataForSEO
28
+
29
+ https://dataforseo.com/?aff=200885
30
+
31
+ ## Available Tools
32
+
33
+ ### Google Ads Keywords
34
+ | Tool | Description |
35
+ |------|-------------|
36
+ | `keywords_google_ads_keywords_for_keyword` | Get keyword suggestions based on a seed keyword |
37
+ | `keywords_google_ads_keywords_for_site` | Get keyword suggestions based on a domain or URL |
38
+ | `keywords_google_ads_search_volume` | Get search volume data for a list of keywords |
39
+ | `keywords_google_ads_locations` | List available geographic locations for targeting |
40
+ | `keywords_google_ads_languages` | List available languages for keyword data |
41
+ | `keywords_google_ads_categories` | List Google Ads keyword categories |
42
+
43
+ ### Google Trends
44
+ | Tool | Description |
45
+ |------|-------------|
46
+ | `keywords_google_trends_explore` | Explore keyword interest over time with date ranges and categories |
47
+
48
+ ### Bing Ads Keywords
49
+ | Tool | Description |
50
+ |------|-------------|
51
+ | `keywords_bing_keywords_for_keywords` | Get keyword suggestions from Bing Ads |
52
+
53
+ ## Installation
54
+
55
+ ```bash
56
+ # Clone the repository
57
+ git clone https://github.com/Skobyn/dataforseo-mcp-server.git
58
+
59
+ # Change to the project directory
60
+ cd dataforseo-mcp-server
61
+
62
+ # Install dependencies
63
+ npm install
64
+
65
+ # Build the project
66
+ npm run build
67
+ ```
68
+
69
+ ## Configuration
70
+
71
+ ### Environment Variables
72
+
73
+ Set your DataForSEO API credentials:
74
+
75
+ ```bash
76
+ export DATAFORSEO_LOGIN="your_login"
77
+ export DATAFORSEO_PASSWORD="your_password"
78
+ ```
79
+
80
+ ### Running the Server
81
+
82
+ ```bash
83
+ npm start
84
+ ```
85
+
86
+ ### Claude Desktop Configuration
87
+
88
+ Add to your Claude Desktop config (`claude_desktop_config.json`):
89
+
90
+ ```json
91
+ {
92
+ "mcpServers": {
93
+ "dataforseo-keywords": {
94
+ "command": "node",
95
+ "args": ["/path/to/dataforseo-mcp-server/dist/index.js"],
96
+ "env": {
97
+ "DATAFORSEO_LOGIN": "your_login",
98
+ "DATAFORSEO_PASSWORD": "your_password"
99
+ }
100
+ }
101
+ }
102
+ }
103
+ ```
104
+
105
+ ## Usage Examples
106
+
107
+ ### Get search volume for keywords
108
+
109
+ Ask Claude: *"What's the search volume for 'running shoes' and 'athletic footwear' in the US?"*
110
+
111
+ The LLM will call `keywords_google_ads_search_volume` with:
112
+ ```json
113
+ {
114
+ "keywords": ["running shoes", "athletic footwear"],
115
+ "location_code": 2840,
116
+ "language_code": "en"
117
+ }
118
+ ```
119
+
120
+ ### Find keyword ideas for a competitor
121
+
122
+ Ask Claude: *"What keywords is nike.com ranking for?"*
123
+
124
+ The LLM will call `keywords_google_ads_keywords_for_site` with:
125
+ ```json
126
+ {
127
+ "target": "nike.com",
128
+ "location_code": 2840
129
+ }
130
+ ```
131
+
132
+ ### Explore keyword trends
133
+
134
+ Ask Claude: *"Show me the trend for 'black friday deals' over the past year"*
135
+
136
+ The LLM will call `keywords_google_trends_explore` with date range parameters.
137
+
138
+ ## Development
139
+
140
+ ```bash
141
+ # Run in development mode
142
+ npm run dev
143
+ ```
144
+
145
+ ## Use Cases for Media Buyers
146
+
147
+ - **Campaign keyword research** - Find high-volume, relevant keywords for Google/Bing campaigns
148
+ - **Competitor analysis** - Discover what keywords competitors are targeting
149
+ - **Seasonal trend analysis** - Identify trending keywords for timely campaigns
150
+ - **Geographic targeting** - Get keyword data filtered by location and language
151
+ - **Shopping campaign optimization** - Research product-related keywords for shopping ads
152
+
153
+ ## License
154
+
155
+ MIT
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { DataForSeoClient } from "../client.js";
3
+ export declare function registerAiOptimizationTools(server: McpServer, apiClient: DataForSeoClient): void;
@@ -0,0 +1,178 @@
1
+ import { z } from "zod";
2
+ import { registerTool, registerTaskTool } from "../tools.js";
3
+ // Common schemas
4
+ const messageChainItemSchema = z.object({
5
+ role: z.enum(["user", "ai"]).describe("Role in the conversation"),
6
+ message: z.string().max(500).describe("Message content")
7
+ });
8
+ const llmResponseBaseSchema = z.object({
9
+ user_prompt: z.string().max(500).describe("Prompt for the AI model"),
10
+ model_name: z.string().describe("Name of the AI model"),
11
+ max_output_tokens: z.number().min(16).max(4096).optional().describe("Maximum number of tokens in the AI response"),
12
+ temperature: z.number().min(0).max(2).optional().describe("Randomness of the AI response (0-2, default: 0.94)"),
13
+ top_p: z.number().min(0).max(1).optional().describe("Diversity of the AI response (0-1, default: 0.92)"),
14
+ web_search: z.boolean().optional().describe("Enable web search"),
15
+ force_web_search: z.boolean().optional().describe("Force AI to use web search"),
16
+ web_search_country_iso_code: z.string().optional().describe("ISO country code for web search"),
17
+ web_search_city: z.string().optional().describe("City name for web search"),
18
+ system_message: z.string().max(500).optional().describe("Instructions for AI behavior"),
19
+ message_chain: z.array(messageChainItemSchema).max(10).optional().describe("Conversation history"),
20
+ tag: z.string().max(255).optional().describe("User-defined task identifier")
21
+ });
22
+ const llmResponseTaskSchema = llmResponseBaseSchema.extend({
23
+ priority: z.number().min(1).max(2).optional().describe("Task priority: 1 (normal) or 2 (high)"),
24
+ postback_url: z.string().optional().describe("URL to receive a callback when the task is completed"),
25
+ postback_data: z.string().optional().describe("Custom data to be passed in the callback")
26
+ });
27
+ const llmScraperTaskSchema = z.object({
28
+ keyword: z.string().max(512).describe("Search query or keyword"),
29
+ location_name: z.string().optional().describe("Full name of location"),
30
+ location_code: z.number().optional().describe("Unique location identifier"),
31
+ language_name: z.string().optional().describe("Full name of language"),
32
+ language_code: z.string().optional().describe("Language code"),
33
+ priority: z.number().min(1).max(2).optional().describe("Task priority: 1 (normal) or 2 (high)"),
34
+ tag: z.string().max(255).optional().describe("User-defined task identifier"),
35
+ postback_url: z.string().optional().describe("URL to receive a callback when the task is completed"),
36
+ postback_data: z.string().optional().describe("Custom data to be passed in the callback")
37
+ });
38
+ export function registerAiOptimizationTools(server, apiClient) {
39
+ // ============================================
40
+ // ChatGPT LLM Responses
41
+ // ============================================
42
+ // ChatGPT Models List
43
+ registerTool(server, "ai_chatgpt_models", {}, async (_params, client) => {
44
+ const response = await client.get("/ai_optimization/chat_gpt/llm_responses/models");
45
+ return response;
46
+ }, apiClient);
47
+ // ChatGPT LLM Responses Live
48
+ registerTool(server, "ai_chatgpt_llm_responses_live", llmResponseBaseSchema, async (params, client) => {
49
+ const response = await client.post("/ai_optimization/chat_gpt/llm_responses/live", [params]);
50
+ return response;
51
+ }, apiClient);
52
+ // ChatGPT LLM Responses Task-based (POST, READY, GET)
53
+ registerTaskTool(server, "ai_chatgpt_llm_responses_task", llmResponseTaskSchema, async (params, client) => {
54
+ const response = await client.post("/ai_optimization/chat_gpt/llm_responses/task_post", [params]);
55
+ return response;
56
+ }, async (client) => {
57
+ const response = await client.get("/ai_optimization/chat_gpt/llm_responses/tasks_ready");
58
+ return response;
59
+ }, async (id, client) => {
60
+ const response = await client.get(`/ai_optimization/chat_gpt/llm_responses/task_get/${id}`);
61
+ return response;
62
+ }, apiClient);
63
+ // ============================================
64
+ // ChatGPT LLM Scraper
65
+ // ============================================
66
+ // ChatGPT Scraper Locations
67
+ registerTool(server, "ai_chatgpt_scraper_locations", {}, async (_params, client) => {
68
+ const response = await client.get("/ai_optimization/chat_gpt/llm_scraper/locations");
69
+ return response;
70
+ }, apiClient);
71
+ // ChatGPT Scraper Locations by Country
72
+ registerTool(server, "ai_chatgpt_scraper_locations_country", z.object({
73
+ country: z.string().describe("Country code (e.g., 'us', 'uk', 'fr')")
74
+ }), async (params, client) => {
75
+ const response = await client.get(`/ai_optimization/chat_gpt/llm_scraper/locations/${params.country}`);
76
+ return response;
77
+ }, apiClient);
78
+ // ChatGPT Scraper Languages
79
+ registerTool(server, "ai_chatgpt_scraper_languages", {}, async (_params, client) => {
80
+ const response = await client.get("/ai_optimization/chat_gpt/llm_scraper/languages");
81
+ return response;
82
+ }, apiClient);
83
+ // ChatGPT Scraper Task-based (POST, READY, GET Advanced, GET HTML)
84
+ registerTaskTool(server, "ai_chatgpt_scraper_task", llmScraperTaskSchema, async (params, client) => {
85
+ const response = await client.post("/ai_optimization/chat_gpt/llm_scraper/task_post", [params]);
86
+ return response;
87
+ }, async (client) => {
88
+ const response = await client.get("/ai_optimization/chat_gpt/llm_scraper/tasks_ready");
89
+ return response;
90
+ }, async (id, client) => {
91
+ const response = await client.get(`/ai_optimization/chat_gpt/llm_scraper/task_get/advanced/${id}`);
92
+ return response;
93
+ }, apiClient);
94
+ // ChatGPT Scraper Task Get HTML
95
+ registerTool(server, "ai_chatgpt_scraper_task_get_html", z.object({
96
+ id: z.string().describe("Task identifier in UUID format")
97
+ }), async (params, client) => {
98
+ const response = await client.get(`/ai_optimization/chat_gpt/llm_scraper/task_get/html/${params.id}`);
99
+ return response;
100
+ }, apiClient);
101
+ // ============================================
102
+ // Claude LLM Responses
103
+ // ============================================
104
+ // Claude Models List
105
+ registerTool(server, "ai_claude_models", {}, async (_params, client) => {
106
+ const response = await client.get("/ai_optimization/claude/llm_responses/models");
107
+ return response;
108
+ }, apiClient);
109
+ // Claude LLM Responses Live
110
+ registerTool(server, "ai_claude_llm_responses_live", llmResponseBaseSchema, async (params, client) => {
111
+ const response = await client.post("/ai_optimization/claude/llm_responses/live", [params]);
112
+ return response;
113
+ }, apiClient);
114
+ // Claude LLM Responses Task-based (POST, READY, GET)
115
+ registerTaskTool(server, "ai_claude_llm_responses_task", llmResponseTaskSchema, async (params, client) => {
116
+ const response = await client.post("/ai_optimization/claude/llm_responses/task_post", [params]);
117
+ return response;
118
+ }, async (client) => {
119
+ const response = await client.get("/ai_optimization/claude/llm_responses/tasks_ready");
120
+ return response;
121
+ }, async (id, client) => {
122
+ const response = await client.get(`/ai_optimization/claude/llm_responses/task_get/${id}`);
123
+ return response;
124
+ }, apiClient);
125
+ // ============================================
126
+ // Gemini LLM Responses
127
+ // ============================================
128
+ // Gemini Models List
129
+ registerTool(server, "ai_gemini_models", {}, async (_params, client) => {
130
+ const response = await client.get("/ai_optimization/gemini/llm_responses/models");
131
+ return response;
132
+ }, apiClient);
133
+ // Gemini LLM Responses Live
134
+ registerTool(server, "ai_gemini_llm_responses_live", llmResponseBaseSchema, async (params, client) => {
135
+ const response = await client.post("/ai_optimization/gemini/llm_responses/live", [params]);
136
+ return response;
137
+ }, apiClient);
138
+ // ============================================
139
+ // Perplexity LLM Responses
140
+ // ============================================
141
+ // Perplexity Models List
142
+ registerTool(server, "ai_perplexity_models", {}, async (_params, client) => {
143
+ const response = await client.get("/ai_optimization/perplexity/llm_responses/models");
144
+ return response;
145
+ }, apiClient);
146
+ // Perplexity LLM Responses Live
147
+ registerTool(server, "ai_perplexity_llm_responses_live", llmResponseBaseSchema, async (params, client) => {
148
+ const response = await client.post("/ai_optimization/perplexity/llm_responses/live", [params]);
149
+ return response;
150
+ }, apiClient);
151
+ // ============================================
152
+ // AI Keyword Data
153
+ // ============================================
154
+ // AI Keyword Data Available Filters
155
+ registerTool(server, "ai_keyword_data_available_filters", {}, async (_params, client) => {
156
+ const response = await client.get("/ai_optimization/ai_keyword_data/available_filters");
157
+ return response;
158
+ }, apiClient);
159
+ // AI Keyword Data Locations and Languages
160
+ registerTool(server, "ai_keyword_data_locations_and_languages", {}, async (_params, client) => {
161
+ const response = await client.get("/ai_optimization/ai_keyword_data/locations_and_languages");
162
+ return response;
163
+ }, apiClient);
164
+ // AI Keyword Data Keywords Search Volume Live
165
+ registerTool(server, "ai_keyword_data_search_volume_live", z.object({
166
+ keywords: z.array(z.string()).min(1).max(1000).describe("Keywords to get search volume for"),
167
+ location_name: z.string().optional().describe("Full name of location"),
168
+ location_code: z.number().optional().describe("Unique location identifier"),
169
+ language_name: z.string().optional().describe("Full name of language"),
170
+ language_code: z.string().optional().describe("Language code"),
171
+ filters: z.array(z.any()).optional().describe("Array of filter objects"),
172
+ tag: z.string().max(255).optional().describe("User-defined task identifier")
173
+ }), async (params, client) => {
174
+ const response = await client.post("/ai_optimization/ai_keyword_data/keywords_search_volume/live", [params]);
175
+ return response;
176
+ }, apiClient);
177
+ }
178
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/ai-optimization/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { DataForSeoClient } from "../client.js";
3
+ export declare function registerAppDataTools(server: McpServer, apiClient: DataForSeoClient): void;
@@ -0,0 +1,115 @@
1
+ import { z } from "zod";
2
+ import { registerTool } from "../tools.js";
3
+ export function registerAppDataTools(server, apiClient) {
4
+ // App Data Google Play Search
5
+ registerTool(server, "app_data_google_play_search", z.object({
6
+ keyword: z.string().describe("App name or related keyword"),
7
+ location_name: z.string().optional().describe("Location name"),
8
+ location_code: z.number().optional().describe("Location code"),
9
+ language_name: z.string().optional().describe("Language name"),
10
+ language_code: z.string().optional().describe("Language code"),
11
+ depth: z.number().optional().describe("Number of results to return"),
12
+ limit: z.number().optional().describe("Maximum number of results to return per page"),
13
+ offset: z.number().optional().describe("Offset for pagination")
14
+ }), async (params, client) => {
15
+ const response = await client.post("/app_data/google_play/search/live", [params]);
16
+ return response;
17
+ }, apiClient);
18
+ // App Data Google Play App Info
19
+ registerTool(server, "app_data_google_play_app_info", z.object({
20
+ app_id: z.string().describe("Google Play App ID"),
21
+ location_name: z.string().optional().describe("Location name"),
22
+ location_code: z.number().optional().describe("Location code"),
23
+ language_name: z.string().optional().describe("Language name"),
24
+ language_code: z.string().optional().describe("Language code")
25
+ }), async (params, client) => {
26
+ const response = await client.post("/app_data/google_play/app_info/live", [params]);
27
+ return response;
28
+ }, apiClient);
29
+ // App Data Google Play Reviews
30
+ registerTool(server, "app_data_google_play_reviews", z.object({
31
+ app_id: z.string().describe("Google Play App ID"),
32
+ location_name: z.string().optional().describe("Location name"),
33
+ location_code: z.number().optional().describe("Location code"),
34
+ language_name: z.string().optional().describe("Language name"),
35
+ language_code: z.string().optional().describe("Language code"),
36
+ depth: z.number().optional().describe("Number of reviews to retrieve"),
37
+ sort_by: z.enum(["most_relevant", "newest"]).optional().describe("Sorting method"),
38
+ limit: z.number().optional().describe("Maximum number of results to return per page"),
39
+ offset: z.number().optional().describe("Offset for pagination")
40
+ }), async (params, client) => {
41
+ const response = await client.post("/app_data/google_play/reviews/live", [params]);
42
+ return response;
43
+ }, apiClient);
44
+ // App Data Google Play Locations
45
+ registerTool(server, "app_data_google_play_locations", z.object({
46
+ country: z.string().optional().describe("Filter locations by country name")
47
+ }), async (params, client) => {
48
+ const url = params.country
49
+ ? `/app_data/google_play/locations?country=${encodeURIComponent(params.country)}`
50
+ : "/app_data/google_play/locations";
51
+ const response = await client.get(url);
52
+ return response;
53
+ }, apiClient);
54
+ // App Data Google Play Languages
55
+ registerTool(server, "app_data_google_play_languages", {}, async (_params, client) => {
56
+ const response = await client.get("/app_data/google_play/languages");
57
+ return response;
58
+ }, apiClient);
59
+ // App Data App Store Search
60
+ registerTool(server, "app_data_app_store_search", z.object({
61
+ keyword: z.string().describe("App name or related keyword"),
62
+ location_name: z.string().optional().describe("Location name"),
63
+ location_code: z.number().optional().describe("Location code"),
64
+ language_name: z.string().optional().describe("Language name"),
65
+ language_code: z.string().optional().describe("Language code"),
66
+ depth: z.number().optional().describe("Number of results to return"),
67
+ limit: z.number().optional().describe("Maximum number of results to return per page"),
68
+ offset: z.number().optional().describe("Offset for pagination")
69
+ }), async (params, client) => {
70
+ const response = await client.post("/app_data/apple/search/live", [params]);
71
+ return response;
72
+ }, apiClient);
73
+ // App Data App Store App Info
74
+ registerTool(server, "app_data_app_store_app_info", z.object({
75
+ app_id: z.string().describe("App Store App ID"),
76
+ location_name: z.string().optional().describe("Location name"),
77
+ location_code: z.number().optional().describe("Location code"),
78
+ language_name: z.string().optional().describe("Language name"),
79
+ language_code: z.string().optional().describe("Language code")
80
+ }), async (params, client) => {
81
+ const response = await client.post("/app_data/apple/app_info/live", [params]);
82
+ return response;
83
+ }, apiClient);
84
+ // App Data App Store Reviews
85
+ registerTool(server, "app_data_app_store_reviews", z.object({
86
+ app_id: z.string().describe("App Store App ID"),
87
+ location_name: z.string().optional().describe("Location name"),
88
+ location_code: z.number().optional().describe("Location code"),
89
+ language_name: z.string().optional().describe("Language name"),
90
+ language_code: z.string().optional().describe("Language code"),
91
+ depth: z.number().optional().describe("Number of reviews to retrieve"),
92
+ sort_by: z.enum(["most_relevant", "most_recent"]).optional().describe("Sorting method"),
93
+ limit: z.number().optional().describe("Maximum number of results to return per page"),
94
+ offset: z.number().optional().describe("Offset for pagination")
95
+ }), async (params, client) => {
96
+ const response = await client.post("/app_data/apple/reviews/live", [params]);
97
+ return response;
98
+ }, apiClient);
99
+ // App Data App Store Locations
100
+ registerTool(server, "app_data_app_store_locations", z.object({
101
+ country: z.string().optional().describe("Filter locations by country name")
102
+ }), async (params, client) => {
103
+ const url = params.country
104
+ ? `/app_data/apple/locations?country=${encodeURIComponent(params.country)}`
105
+ : "/app_data/apple/locations";
106
+ const response = await client.get(url);
107
+ return response;
108
+ }, apiClient);
109
+ // App Data App Store Languages
110
+ registerTool(server, "app_data_app_store_languages", {}, async (_params, client) => {
111
+ const response = await client.get("/app_data/apple/languages");
112
+ return response;
113
+ }, apiClient);
114
+ }
115
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/app-data/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { DataForSeoClient } from "../client.js";
3
+ export declare function registerBacklinksTools(server: McpServer, apiClient: DataForSeoClient): void;