@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
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { DataForSeoClient } from "../client.js";
3
+ export declare function registerContentGenerationTools(server: McpServer, apiClient: DataForSeoClient): void;
@@ -0,0 +1,75 @@
1
+ import { z } from "zod";
2
+ import { registerTool } from "../tools.js";
3
+ export function registerContentGenerationTools(server, apiClient) {
4
+ // Content Generation Generate Text
5
+ registerTool(server, "content_generation_text", z.object({
6
+ topic: z.string().describe("Topic for the generated content"),
7
+ creative_level: z.number().min(0).max(1).optional().describe("Creative level (0-1)"),
8
+ language_code: z.string().optional().describe("Language code"),
9
+ language_name: z.string().optional().describe("Language name"),
10
+ target_audience: z.array(z.string()).optional().describe("Target audience"),
11
+ text_style: z.string().optional().describe("Text style"),
12
+ writer_experience_level: z.enum(["expert", "beginner", "intermediate"]).optional().describe("Writer experience level"),
13
+ subject_experience_level: z.enum(["expert", "beginner", "intermediate"]).optional().describe("Subject experience level"),
14
+ text_format: z.enum(["plain", "html"]).optional().describe("Text format")
15
+ }), async (params, client) => {
16
+ const response = await client.post("/content_generation/text/live", [params]);
17
+ return response;
18
+ }, apiClient);
19
+ // Content Generation Generate Paraphrase
20
+ registerTool(server, "content_generation_paraphrase", z.object({
21
+ text: z.string().describe("Text to paraphrase"),
22
+ paraphrase_level: z.number().min(1).max(3).optional().describe("Paraphrase level (1-3)"),
23
+ creative_level: z.number().min(0).max(1).optional().describe("Creative level (0-1)"),
24
+ language_code: z.string().optional().describe("Language code"),
25
+ language_name: z.string().optional().describe("Language name")
26
+ }), async (params, client) => {
27
+ const response = await client.post("/content_generation/paraphrase/live", [params]);
28
+ return response;
29
+ }, apiClient);
30
+ // Content Generation Generate Meta Tags
31
+ registerTool(server, "content_generation_meta_tags", z.object({
32
+ text: z.string().optional().describe("Text to generate meta tags from"),
33
+ url: z.string().optional().describe("URL to extract text from"),
34
+ language_code: z.string().optional().describe("Language code"),
35
+ language_name: z.string().optional().describe("Language name"),
36
+ creative_level: z.number().min(0).max(1).optional().describe("Creative level (0-1)")
37
+ }), async (params, client) => {
38
+ const response = await client.post("/content_generation/meta_tags/live", [params]);
39
+ return response;
40
+ }, apiClient);
41
+ // Content Generation Generate Summarize
42
+ registerTool(server, "content_generation_summarize", z.object({
43
+ text: z.string().optional().describe("Text to summarize"),
44
+ url: z.string().optional().describe("URL to extract text from"),
45
+ language_code: z.string().optional().describe("Language code"),
46
+ language_name: z.string().optional().describe("Language name"),
47
+ summary_size: z.enum(["small", "medium", "large"]).optional().describe("Summary size")
48
+ }), async (params, client) => {
49
+ const response = await client.post("/content_generation/summarize/live", [params]);
50
+ return response;
51
+ }, apiClient);
52
+ // Content Generation Generate Title
53
+ registerTool(server, "content_generation_title", z.object({
54
+ text: z.string().optional().describe("Text to generate title from"),
55
+ url: z.string().optional().describe("URL to extract text from"),
56
+ language_code: z.string().optional().describe("Language code"),
57
+ language_name: z.string().optional().describe("Language name"),
58
+ creative_level: z.number().min(0).max(1).optional().describe("Creative level (0-1)")
59
+ }), async (params, client) => {
60
+ const response = await client.post("/content_generation/title/live", [params]);
61
+ return response;
62
+ }, apiClient);
63
+ // Content Generation Explain Code
64
+ registerTool(server, "content_generation_explain_code", z.object({
65
+ code: z.string().describe("Code to explain"),
66
+ language_code: z.string().optional().describe("Language code"),
67
+ language_name: z.string().optional().describe("Language name"),
68
+ code_language: z.string().optional().describe("Programming language of the code"),
69
+ explanation_type: z.enum(["line_by_line", "function", "block"]).optional().describe("Type of explanation")
70
+ }), async (params, client) => {
71
+ const response = await client.post("/content_generation/explain_code/live", [params]);
72
+ return response;
73
+ }, apiClient);
74
+ }
75
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/content-generation/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 registerDomainAnalyticsTools(server: McpServer, apiClient: DataForSeoClient): void;
@@ -0,0 +1,69 @@
1
+ import { z } from "zod";
2
+ import { registerTool } from "../tools.js";
3
+ export function registerDomainAnalyticsTools(server, apiClient) {
4
+ // Technologies Summary
5
+ registerTool(server, "domain_analytics_technologies_summary", z.object({
6
+ technology_name: z.string().optional().describe("Filter results by technology name"),
7
+ technology_group: z.string().optional().describe("Filter results by technology group"),
8
+ category: z.string().optional().describe("Filter results by category")
9
+ }), async (params, client) => {
10
+ const response = await client.post("/domain_analytics/technologies/summary/live", [params]);
11
+ return response;
12
+ }, apiClient);
13
+ // Technologies Technologies
14
+ registerTool(server, "domain_analytics_technologies_technologies", z.object({
15
+ technology_name: z.string().optional().describe("Filter results by technology name"),
16
+ technology_group: z.string().optional().describe("Filter results by technology group"),
17
+ category: z.string().optional().describe("Filter results by category")
18
+ }), async (params, client) => {
19
+ const response = await client.post("/domain_analytics/technologies/technologies/live", [params]);
20
+ return response;
21
+ }, apiClient);
22
+ // Technologies Domains by Technology
23
+ registerTool(server, "domain_analytics_technologies_domains_by_technology", z.object({
24
+ technology_name: z.string().describe("Technology name to search for"),
25
+ technology_group: z.string().optional().describe("Filter results by technology group"),
26
+ category: z.string().optional().describe("Filter results by category"),
27
+ limit: z.number().optional().describe("Maximum number of results to return"),
28
+ offset: z.number().optional().describe("Offset for pagination")
29
+ }), async (params, client) => {
30
+ const response = await client.post("/domain_analytics/technologies/domains_by_technology/live", [params]);
31
+ return response;
32
+ }, apiClient);
33
+ // Technologies Domain Technologies
34
+ registerTool(server, "domain_analytics_technologies_domain_technologies", z.object({
35
+ target: z.string().describe("Target domain to analyze"),
36
+ limit: z.number().optional().describe("Maximum number of results to return"),
37
+ offset: z.number().optional().describe("Offset for pagination")
38
+ }), async (params, client) => {
39
+ const response = await client.post("/domain_analytics/technologies/domain_technologies/live", [params]);
40
+ return response;
41
+ }, apiClient);
42
+ // Technologies Technology Stats
43
+ registerTool(server, "domain_analytics_technologies_technology_stats", z.object({
44
+ technology_name: z.string().describe("Technology name to get stats for"),
45
+ limit: z.number().optional().describe("Maximum number of results to return"),
46
+ offset: z.number().optional().describe("Offset for pagination")
47
+ }), async (params, client) => {
48
+ const response = await client.post("/domain_analytics/technologies/technology_stats/live", [params]);
49
+ return response;
50
+ }, apiClient);
51
+ // Technologies Domains by HTML Terms
52
+ registerTool(server, "domain_analytics_technologies_domains_by_html_terms", z.object({
53
+ terms: z.array(z.string()).describe("HTML terms to search for"),
54
+ intersection_mode: z.enum(["and", "or"]).optional().describe("Intersection mode"),
55
+ limit: z.number().optional().describe("Maximum number of results to return"),
56
+ offset: z.number().optional().describe("Offset for pagination")
57
+ }), async (params, client) => {
58
+ const response = await client.post("/domain_analytics/technologies/domains_by_html_terms/live", [params]);
59
+ return response;
60
+ }, apiClient);
61
+ // Whois Overview
62
+ registerTool(server, "domain_analytics_whois_overview", z.object({
63
+ domain: z.string().describe("Domain to get WHOIS information for")
64
+ }), async (params, client) => {
65
+ const response = await client.post("/domain_analytics/whois/overview/live", [params]);
66
+ return response;
67
+ }, apiClient);
68
+ }
69
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/domain-analytics/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 registerKeywordsTools(server: McpServer, apiClient: DataForSeoClient): void;
@@ -0,0 +1,73 @@
1
+ import { z } from "zod";
2
+ import { registerTool } from "../tools.js";
3
+ export function registerKeywordsTools(server, apiClient) {
4
+ // Google Ads Keywords Data
5
+ registerTool(server, "keywords_google_ads_keywords_for_keyword", z.object({
6
+ keyword: z.string().describe("Keyword to get data for"),
7
+ location_code: z.number().optional().describe("The location code for the search"),
8
+ language_code: z.string().optional().describe("The language code for the search"),
9
+ }), async (params, client) => {
10
+ const response = await client.post("/keywords_data/google_ads/keywords_for_keywords/live", [params]);
11
+ return response;
12
+ }, apiClient);
13
+ // Google Ads Keywords Suggestions
14
+ registerTool(server, "keywords_google_ads_keywords_for_site", z.object({
15
+ target: z.string().describe("Target domain, subdomain or URL to analyze"),
16
+ location_code: z.number().optional().describe("The location code for the search"),
17
+ language_code: z.string().optional().describe("The language code for the search"),
18
+ }), async (params, client) => {
19
+ const response = await client.post("/keywords_data/google_ads/keywords_for_site/live", [params]);
20
+ return response;
21
+ }, apiClient);
22
+ // Google Ads Search Volume
23
+ registerTool(server, "keywords_google_ads_search_volume", z.object({
24
+ keywords: z.array(z.string()).describe("Keywords to get search volume for"),
25
+ location_code: z.number().optional().describe("The location code for the search"),
26
+ language_code: z.string().optional().describe("The language code for the search"),
27
+ }), async (params, client) => {
28
+ const response = await client.post("/keywords_data/google_ads/search_volume/live", [params]);
29
+ return response;
30
+ }, apiClient);
31
+ // Google Ads Keywords Locations
32
+ registerTool(server, "keywords_google_ads_locations", z.object({
33
+ country: z.string().optional().describe("Filter locations by country name")
34
+ }), async (params, client) => {
35
+ const url = params.country
36
+ ? `/keywords_data/google_ads/locations?country=${encodeURIComponent(params.country)}`
37
+ : "/keywords_data/google_ads/locations";
38
+ const response = await client.get(url);
39
+ return response;
40
+ }, apiClient);
41
+ // Google Ads Keywords Languages
42
+ registerTool(server, "keywords_google_ads_languages", {}, async (_params, client) => {
43
+ const response = await client.get("/keywords_data/google_ads/languages");
44
+ return response;
45
+ }, apiClient);
46
+ // Google Ads Keywords Categories
47
+ registerTool(server, "keywords_google_ads_categories", {}, async (_params, client) => {
48
+ const response = await client.get("/keywords_data/google_ads/categories");
49
+ return response;
50
+ }, apiClient);
51
+ // Google Trends
52
+ registerTool(server, "keywords_google_trends_explore", z.object({
53
+ keywords: z.array(z.string()).describe("Keywords to explore"),
54
+ location_code: z.number().optional().describe("The location code for the search"),
55
+ language_code: z.string().optional().describe("The language code for the search"),
56
+ date_from: z.string().optional().describe("Start date in YYYY-MM-DD format"),
57
+ date_to: z.string().optional().describe("End date in YYYY-MM-DD format"),
58
+ category_code: z.number().optional().describe("Google Trends category code")
59
+ }), async (params, client) => {
60
+ const response = await client.post("/keywords_data/google_trends/explore/live", [params]);
61
+ return response;
62
+ }, apiClient);
63
+ // Bing Keyword Data
64
+ registerTool(server, "keywords_bing_keywords_for_keywords", z.object({
65
+ keyword: z.string().describe("Keyword to get data for"),
66
+ location_code: z.number().optional().describe("The location code for the search"),
67
+ language_code: z.string().optional().describe("The language code for the search"),
68
+ }), async (params, client) => {
69
+ const response = await client.post("/keywords_data/bing/keywords_for_keywords/live", [params]);
70
+ return response;
71
+ }, apiClient);
72
+ }
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/keywords/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 registerLabsTools(server: McpServer, apiClient: DataForSeoClient): void;
@@ -0,0 +1,315 @@
1
+ import { z } from "zod";
2
+ import { registerTool } from "../tools.js";
3
+ // DataForSEO Labs API schemas
4
+ const keywordResearchBaseSchema = z.object({
5
+ keyword: z.string().describe("Keyword(s) to research"),
6
+ location_code: z.number().optional().describe("The location code for the search"),
7
+ language_code: z.string().optional().describe("The language code for the search"),
8
+ limit: z.number().optional().describe("Maximum number of results to return"),
9
+ offset: z.number().optional().describe("Offset for pagination"),
10
+ include_seed_keyword: z.boolean().optional().describe("Include the seed keyword in the results")
11
+ });
12
+ const domainResearchBaseSchema = z.object({
13
+ target: z.string().describe("Target domain name"),
14
+ location_code: z.number().optional().describe("The location code for the search"),
15
+ language_code: z.string().optional().describe("The language code for the search"),
16
+ limit: z.number().optional().describe("Maximum number of results to return"),
17
+ offset: z.number().optional().describe("Offset for pagination")
18
+ });
19
+ export function registerLabsTools(server, apiClient) {
20
+ // Keywords for Site
21
+ registerTool(server, "labs_google_keywords_for_site", domainResearchBaseSchema.extend({
22
+ include_serp_info: z.boolean().optional().describe("Include SERP information")
23
+ }), async (params, client) => {
24
+ const response = await client.post("/dataforseo_labs/google/keywords_for_site/live", [params]);
25
+ return response;
26
+ }, apiClient);
27
+ // Related Keywords
28
+ registerTool(server, "labs_google_related_keywords", keywordResearchBaseSchema, async (params, client) => {
29
+ const response = await client.post("/dataforseo_labs/google/related_keywords/live", [params]);
30
+ return response;
31
+ }, apiClient);
32
+ // Keyword Suggestions
33
+ registerTool(server, "labs_google_keyword_suggestions", keywordResearchBaseSchema, async (params, client) => {
34
+ const response = await client.post("/dataforseo_labs/google/keyword_suggestions/live", [params]);
35
+ return response;
36
+ }, apiClient);
37
+ // Keyword Ideas
38
+ registerTool(server, "labs_google_keyword_ideas", keywordResearchBaseSchema, async (params, client) => {
39
+ const response = await client.post("/dataforseo_labs/google/keyword_ideas/live", [params]);
40
+ return response;
41
+ }, apiClient);
42
+ // Historical Search Volume
43
+ registerTool(server, "labs_google_historical_search_volume", z.object({
44
+ keywords: z.array(z.string()).describe("Keywords to get historical search volume for"),
45
+ location_code: z.number().optional().describe("The location code for the search"),
46
+ language_code: z.string().optional().describe("The language code for the search"),
47
+ include_serp_info: z.boolean().optional().describe("Include SERP information")
48
+ }), async (params, client) => {
49
+ const response = await client.post("/dataforseo_labs/google/historical_search_volume/live", [params]);
50
+ return response;
51
+ }, apiClient);
52
+ // Bulk Keyword Difficulty
53
+ registerTool(server, "labs_google_bulk_keyword_difficulty", z.object({
54
+ keywords: z.array(z.string()).describe("Keywords to calculate difficulty for"),
55
+ location_code: z.number().optional().describe("The location code for the search"),
56
+ language_code: z.string().optional().describe("The language code for the search")
57
+ }), async (params, client) => {
58
+ const response = await client.post("/dataforseo_labs/google/bulk_keyword_difficulty/live", [params]);
59
+ return response;
60
+ }, apiClient);
61
+ // Search Intent
62
+ registerTool(server, "labs_google_search_intent", z.object({
63
+ keywords: z.array(z.string()).describe("Keywords to determine search intent"),
64
+ location_code: z.number().optional().describe("The location code for the search"),
65
+ language_code: z.string().optional().describe("The language code for the search")
66
+ }), async (params, client) => {
67
+ const response = await client.post("/dataforseo_labs/google/search_intent/live", [params]);
68
+ return response;
69
+ }, apiClient);
70
+ // Categories for Domain
71
+ registerTool(server, "labs_google_categories_for_domain", domainResearchBaseSchema, async (params, client) => {
72
+ const response = await client.post("/dataforseo_labs/google/categories_for_domain/live", [params]);
73
+ return response;
74
+ }, apiClient);
75
+ // Domain Rank Overview
76
+ registerTool(server, "labs_google_domain_rank_overview", domainResearchBaseSchema, async (params, client) => {
77
+ const response = await client.post("/dataforseo_labs/google/domain_rank_overview/live", [params]);
78
+ return response;
79
+ }, apiClient);
80
+ // Ranked Keywords
81
+ registerTool(server, "labs_google_ranked_keywords", domainResearchBaseSchema.extend({
82
+ include_serp_info: z.boolean().optional().describe("Include SERP information"),
83
+ filters: z.array(z.any()).optional().describe("Filters to apply to the results")
84
+ }), async (params, client) => {
85
+ const response = await client.post("/dataforseo_labs/google/ranked_keywords/live", [params]);
86
+ return response;
87
+ }, apiClient);
88
+ // Competitors Domain
89
+ registerTool(server, "labs_google_competitors_domain", domainResearchBaseSchema.extend({
90
+ filters: z.array(z.any()).optional().describe("Filters to apply to the results")
91
+ }), async (params, client) => {
92
+ const response = await client.post("/dataforseo_labs/google/competitors_domain/live", [params]);
93
+ return response;
94
+ }, apiClient);
95
+ // Domain Intersection
96
+ registerTool(server, "labs_google_domain_intersection", z.object({
97
+ domains: z.array(z.string()).min(2).max(20).describe("Domains to compare"),
98
+ location_code: z.number().optional().describe("The location code for the search"),
99
+ language_code: z.string().optional().describe("The language code for the search"),
100
+ limit: z.number().optional().describe("Maximum number of results to return"),
101
+ offset: z.number().optional().describe("Offset for pagination"),
102
+ filters: z.array(z.any()).optional().describe("Filters to apply to the results")
103
+ }), async (params, client) => {
104
+ const response = await client.post("/dataforseo_labs/google/domain_intersection/live", [params]);
105
+ return response;
106
+ }, apiClient);
107
+ // Subdomains
108
+ registerTool(server, "labs_google_subdomains", domainResearchBaseSchema.extend({
109
+ filters: z.array(z.any()).optional().describe("Filters to apply to the results")
110
+ }), async (params, client) => {
111
+ const response = await client.post("/dataforseo_labs/google/subdomains/live", [params]);
112
+ return response;
113
+ }, apiClient);
114
+ // Relevant Pages
115
+ registerTool(server, "labs_google_relevant_pages", domainResearchBaseSchema.extend({
116
+ filters: z.array(z.any()).optional().describe("Filters to apply to the results")
117
+ }), async (params, client) => {
118
+ const response = await client.post("/dataforseo_labs/google/relevant_pages/live", [params]);
119
+ return response;
120
+ }, apiClient);
121
+ // Bulk Traffic Estimation
122
+ registerTool(server, "labs_google_bulk_traffic_estimation", z.object({
123
+ targets: z.array(z.string()).describe("Domains to estimate traffic for"),
124
+ location_code: z.number().optional().describe("The location code for the search"),
125
+ language_code: z.string().optional().describe("The language code for the search")
126
+ }), async (params, client) => {
127
+ const response = await client.post("/dataforseo_labs/google/bulk_traffic_estimation/live", [params]);
128
+ return response;
129
+ }, apiClient);
130
+ // === AMAZON LABS API ===
131
+ // Amazon Bulk Search Volume
132
+ registerTool(server, "labs_amazon_bulk_search_volume", z.object({
133
+ keywords: z.array(z.string()).describe("Keywords to get search volume for"),
134
+ location_code: z.number().optional().describe("The location code for the search"),
135
+ language_code: z.string().optional().describe("The language code for the search")
136
+ }), async (params, client) => {
137
+ const response = await client.post("/dataforseo_labs/amazon/bulk_search_volume/live", [params]);
138
+ return response;
139
+ }, apiClient);
140
+ // Amazon Related Keywords
141
+ registerTool(server, "labs_amazon_related_keywords", keywordResearchBaseSchema.extend({
142
+ marketplace: z.string().optional().describe("Amazon marketplace (e.g., amazon.com)")
143
+ }), async (params, client) => {
144
+ const response = await client.post("/dataforseo_labs/amazon/related_keywords/live", [params]);
145
+ return response;
146
+ }, apiClient);
147
+ // Amazon Ranked Keywords
148
+ registerTool(server, "labs_amazon_ranked_keywords", z.object({
149
+ target: z.string().describe("Target ASIN or Amazon domain"),
150
+ marketplace: z.string().optional().describe("Amazon marketplace (e.g., amazon.com)"),
151
+ location_code: z.number().optional().describe("The location code for the search"),
152
+ language_code: z.string().optional().describe("The language code for the search"),
153
+ limit: z.number().optional().describe("Maximum number of results to return"),
154
+ offset: z.number().optional().describe("Offset for pagination"),
155
+ filters: z.array(z.any()).optional().describe("Filters to apply to the results")
156
+ }), async (params, client) => {
157
+ const response = await client.post("/dataforseo_labs/amazon/ranked_keywords/live", [params]);
158
+ return response;
159
+ }, apiClient);
160
+ // Amazon Product Competitors
161
+ registerTool(server, "labs_amazon_product_competitors", z.object({
162
+ asin: z.string().describe("Target Amazon ASIN"),
163
+ marketplace: z.string().optional().describe("Amazon marketplace (e.g., amazon.com)"),
164
+ location_code: z.number().optional().describe("The location code for the search"),
165
+ language_code: z.string().optional().describe("The language code for the search"),
166
+ limit: z.number().optional().describe("Maximum number of results to return"),
167
+ offset: z.number().optional().describe("Offset for pagination")
168
+ }), async (params, client) => {
169
+ const response = await client.post("/dataforseo_labs/amazon/product_competitors/live", [params]);
170
+ return response;
171
+ }, apiClient);
172
+ // === BING LABS API ===
173
+ // Bing Keywords for Site
174
+ registerTool(server, "labs_bing_keywords_for_site", domainResearchBaseSchema.extend({
175
+ include_serp_info: z.boolean().optional().describe("Include SERP information")
176
+ }), async (params, client) => {
177
+ const response = await client.post("/dataforseo_labs/bing/keywords_for_site/live", [params]);
178
+ return response;
179
+ }, apiClient);
180
+ // Bing Related Keywords
181
+ registerTool(server, "labs_bing_related_keywords", keywordResearchBaseSchema, async (params, client) => {
182
+ const response = await client.post("/dataforseo_labs/bing/related_keywords/live", [params]);
183
+ return response;
184
+ }, apiClient);
185
+ // Bing Domain Rank Overview
186
+ registerTool(server, "labs_bing_domain_rank_overview", domainResearchBaseSchema, async (params, client) => {
187
+ const response = await client.post("/dataforseo_labs/bing/domain_rank_overview/live", [params]);
188
+ return response;
189
+ }, apiClient);
190
+ // Bing Ranked Keywords
191
+ registerTool(server, "labs_bing_ranked_keywords", domainResearchBaseSchema.extend({
192
+ include_serp_info: z.boolean().optional().describe("Include SERP information"),
193
+ filters: z.array(z.any()).optional().describe("Filters to apply to the results")
194
+ }), async (params, client) => {
195
+ const response = await client.post("/dataforseo_labs/bing/ranked_keywords/live", [params]);
196
+ return response;
197
+ }, apiClient);
198
+ // Bing Competitors Domain
199
+ registerTool(server, "labs_bing_competitors_domain", domainResearchBaseSchema.extend({
200
+ filters: z.array(z.any()).optional().describe("Filters to apply to the results")
201
+ }), async (params, client) => {
202
+ const response = await client.post("/dataforseo_labs/bing/competitors_domain/live", [params]);
203
+ return response;
204
+ }, apiClient);
205
+ // === GOOGLE PLAY AND APP STORE LABS API ===
206
+ // Google Play Keywords for App
207
+ registerTool(server, "labs_google_play_keywords_for_app", z.object({
208
+ app_id: z.string().describe("Google Play app ID"),
209
+ location_code: z.number().optional().describe("The location code for the search"),
210
+ language_code: z.string().optional().describe("The language code for the search"),
211
+ limit: z.number().optional().describe("Maximum number of results to return"),
212
+ offset: z.number().optional().describe("Offset for pagination")
213
+ }), async (params, client) => {
214
+ const response = await client.post("/dataforseo_labs/google_play/keywords_for_app/live", [params]);
215
+ return response;
216
+ }, apiClient);
217
+ // Google Play Ranked Apps
218
+ registerTool(server, "labs_google_play_ranked_apps", keywordResearchBaseSchema.extend({
219
+ filters: z.array(z.any()).optional().describe("Filters to apply to the results")
220
+ }), async (params, client) => {
221
+ const response = await client.post("/dataforseo_labs/google_play/ranked_apps/live", [params]);
222
+ return response;
223
+ }, apiClient);
224
+ // Google Play App Competitors
225
+ registerTool(server, "labs_google_play_app_competitors", z.object({
226
+ app_id: z.string().describe("Google Play app ID"),
227
+ location_code: z.number().optional().describe("The location code for the search"),
228
+ language_code: z.string().optional().describe("The language code for the search"),
229
+ limit: z.number().optional().describe("Maximum number of results to return"),
230
+ offset: z.number().optional().describe("Offset for pagination")
231
+ }), async (params, client) => {
232
+ const response = await client.post("/dataforseo_labs/google_play/app_competitors/live", [params]);
233
+ return response;
234
+ }, apiClient);
235
+ // App Store Keywords for App
236
+ registerTool(server, "labs_app_store_keywords_for_app", z.object({
237
+ app_id: z.string().describe("App Store app ID"),
238
+ location_code: z.number().optional().describe("The location code for the search"),
239
+ language_code: z.string().optional().describe("The language code for the search"),
240
+ limit: z.number().optional().describe("Maximum number of results to return"),
241
+ offset: z.number().optional().describe("Offset for pagination")
242
+ }), async (params, client) => {
243
+ const response = await client.post("/dataforseo_labs/app_store/keywords_for_app/live", [params]);
244
+ return response;
245
+ }, apiClient);
246
+ // App Store Ranked Apps
247
+ registerTool(server, "labs_app_store_ranked_apps", keywordResearchBaseSchema.extend({
248
+ filters: z.array(z.any()).optional().describe("Filters to apply to the results")
249
+ }), async (params, client) => {
250
+ const response = await client.post("/dataforseo_labs/app_store/ranked_apps/live", [params]);
251
+ return response;
252
+ }, apiClient);
253
+ // App Store App Competitors
254
+ registerTool(server, "labs_app_store_app_competitors", z.object({
255
+ app_id: z.string().describe("App Store app ID"),
256
+ location_code: z.number().optional().describe("The location code for the search"),
257
+ language_code: z.string().optional().describe("The language code for the search"),
258
+ limit: z.number().optional().describe("Maximum number of results to return"),
259
+ offset: z.number().optional().describe("Offset for pagination")
260
+ }), async (params, client) => {
261
+ const response = await client.post("/dataforseo_labs/app_store/app_competitors/live", [params]);
262
+ return response;
263
+ }, apiClient);
264
+ // === META ENDPOINTS FOR LABS API ===
265
+ // Categories
266
+ registerTool(server, "labs_categories", z.object({
267
+ engine: z.enum(["google", "amazon", "bing", "google_play", "app_store"]).describe("Engine to get categories for"),
268
+ category_code: z.number().optional().describe("Parent category code"),
269
+ language_code: z.string().optional().describe("Language code")
270
+ }), async (params, client) => {
271
+ const url = `/dataforseo_labs/${params.engine}/categories`;
272
+ const queryParams = [];
273
+ if (params.category_code) {
274
+ queryParams.push(`category_code=${params.category_code}`);
275
+ }
276
+ if (params.language_code) {
277
+ queryParams.push(`language_code=${params.language_code}`);
278
+ }
279
+ const fullUrl = queryParams.length > 0 ? `${url}?${queryParams.join('&')}` : url;
280
+ const response = await client.get(fullUrl);
281
+ return response;
282
+ }, apiClient);
283
+ // Locations
284
+ registerTool(server, "labs_locations", z.object({
285
+ engine: z.enum(["google", "amazon", "bing", "google_play", "app_store"]).describe("Engine to get locations for"),
286
+ country: z.string().optional().describe("Filter locations by country name")
287
+ }), async (params, client) => {
288
+ const url = `/dataforseo_labs/${params.engine}/locations`;
289
+ const queryParams = [];
290
+ if (params.country) {
291
+ queryParams.push(`country=${encodeURIComponent(params.country)}`);
292
+ }
293
+ const fullUrl = queryParams.length > 0 ? `${url}?${queryParams.join('&')}` : url;
294
+ const response = await client.get(fullUrl);
295
+ return response;
296
+ }, apiClient);
297
+ // Languages
298
+ registerTool(server, "labs_languages", z.object({
299
+ engine: z.enum(["google", "amazon", "bing", "google_play", "app_store"]).describe("Engine to get languages for")
300
+ }), async (params, client) => {
301
+ const url = `/dataforseo_labs/${params.engine}/languages`;
302
+ const response = await client.get(url);
303
+ return response;
304
+ }, apiClient);
305
+ // Available History
306
+ registerTool(server, "labs_available_history", z.object({
307
+ engine: z.enum(["google", "amazon", "bing", "google_play", "app_store"]).describe("Engine to get available history for"),
308
+ function: z.string().describe("Function name (e.g., keywords_for_site, serp)")
309
+ }), async (params, client) => {
310
+ const url = `/dataforseo_labs/${params.engine}/available_history/${params.function}`;
311
+ const response = await client.get(url);
312
+ return response;
313
+ }, apiClient);
314
+ }
315
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/labs/index.ts"],"names":[],"mappings":"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"}