@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,7 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ interface LocalFalconClientConfig {
3
+ apiKey: string;
4
+ baseUrl?: string;
5
+ }
6
+ export declare function registerLocalFalconTools(server: McpServer, config: LocalFalconClientConfig): void;
7
+ export {};
@@ -0,0 +1,109 @@
1
+ import { z } from "zod";
2
+ import { registerTool } from "../tools.js";
3
+ class LocalFalconClient {
4
+ constructor(config) {
5
+ this.apiKey = config.apiKey;
6
+ this.baseUrl = config.baseUrl || "https://www.localfalcon.com/api";
7
+ }
8
+ async get(path, params) {
9
+ const url = new URL(`${this.baseUrl}${path}`);
10
+ if (params) {
11
+ Object.entries(params).forEach(([key, value]) => {
12
+ if (value !== undefined) {
13
+ url.searchParams.append(key, String(value));
14
+ }
15
+ });
16
+ }
17
+ const response = await fetch(url.toString(), {
18
+ method: "GET",
19
+ headers: {
20
+ "Content-Type": "application/json",
21
+ "Authorization": `Bearer ${this.apiKey}`
22
+ }
23
+ });
24
+ if (!response.ok) {
25
+ const errorText = await response.text();
26
+ throw new Error(`Local Falcon API error: ${response.status} ${response.statusText} - ${errorText}`);
27
+ }
28
+ return response.json();
29
+ }
30
+ async post(path, data) {
31
+ const response = await fetch(`${this.baseUrl}${path}`, {
32
+ method: "POST",
33
+ headers: {
34
+ "Content-Type": "application/json",
35
+ "Authorization": `Bearer ${this.apiKey}`
36
+ },
37
+ body: JSON.stringify(data)
38
+ });
39
+ if (!response.ok) {
40
+ const errorText = await response.text();
41
+ throw new Error(`Local Falcon API error: ${response.status} ${response.statusText} - ${errorText}`);
42
+ }
43
+ return response.json();
44
+ }
45
+ }
46
+ export function registerLocalFalconTools(server, config) {
47
+ const client = new LocalFalconClient(config);
48
+ // Local Falcon - Calculate Grid Points from Base Coordinate
49
+ registerTool(server, "localfalcon_calculate_grid_points", z.object({
50
+ lat: z.number().describe("Base latitude coordinate"),
51
+ lng: z.number().describe("Base longitude coordinate"),
52
+ distance: z.number().describe("Distance between grid points (in miles or kilometers)"),
53
+ units: z.enum(["miles", "kilometers"]).default("miles").describe("Distance unit"),
54
+ points: z.number().min(1).max(100).default(20).describe("Number of grid points to calculate")
55
+ }), async (params) => {
56
+ const response = await client.post("/v1/grid/", params);
57
+ return response;
58
+ }, client);
59
+ // Local Falcon - Search for Google My Business Locations
60
+ registerTool(server, "localfalcon_search_gmb_locations", z.object({
61
+ query: z.string().describe("Search query for finding Google My Business locations"),
62
+ lat: z.number().optional().describe("Optional latitude to center search around"),
63
+ lng: z.number().optional().describe("Optional longitude to center search around"),
64
+ include_sabs: z.boolean().default(true).describe("Include Service Area Businesses in results")
65
+ }), async (params) => {
66
+ const response = await client.post("/v1/places/", params);
67
+ return response;
68
+ }, client);
69
+ // Local Falcon - Get Business Ranking at Specific Coordinate Point
70
+ registerTool(server, "localfalcon_get_ranking_at_coordinate", z.object({
71
+ lat: z.number().describe("Latitude for the search point"),
72
+ lng: z.number().describe("Longitude for the search point"),
73
+ keyword: z.string().describe("Search term to use"),
74
+ place_id: z.string().describe("Google place ID to get ranking for"),
75
+ language: z.string().optional().describe("Language code (e.g., 'en')"),
76
+ country: z.string().optional().describe("Country code (e.g., 'us')")
77
+ }), async (params) => {
78
+ const response = await client.post("/v1/result/", params);
79
+ return response;
80
+ }, client);
81
+ // Local Falcon - Keyword Search at a Specific Coordinate Point
82
+ registerTool(server, "localfalcon_keyword_search_at_coordinate", z.object({
83
+ lat: z.number().describe("Latitude for the search point"),
84
+ lng: z.number().describe("Longitude for the search point"),
85
+ keyword: z.string().describe("Search term to use"),
86
+ language: z.string().optional().describe("Language code (e.g., 'en')"),
87
+ country: z.string().optional().describe("Country code (e.g., 'us')"),
88
+ limit: z.number().min(1).max(20).default(20).optional().describe("Number of results to return")
89
+ }), async (params) => {
90
+ const response = await client.post("/v1/search/", params);
91
+ return response;
92
+ }, client);
93
+ // Local Falcon - Run a Full Grid Search
94
+ registerTool(server, "localfalcon_run_grid_search", z.object({
95
+ lat: z.number().describe("Base latitude coordinate"),
96
+ lng: z.number().describe("Base longitude coordinate"),
97
+ keyword: z.string().describe("Search term to use"),
98
+ place_id: z.string().describe("Google place ID to get ranking for"),
99
+ distance: z.number().describe("Distance between grid points (in miles or kilometers)"),
100
+ units: z.enum(["miles", "kilometers"]).default("miles").describe("Distance unit"),
101
+ points: z.number().min(1).max(100).default(20).describe("Number of grid points to use"),
102
+ language: z.string().optional().describe("Language code (e.g., 'en')"),
103
+ country: z.string().optional().describe("Country code (e.g., 'us')")
104
+ }), async (params) => {
105
+ const response = await client.post("/v1/scan/", params);
106
+ return response;
107
+ }, client);
108
+ }
109
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/localfalcon/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 registerMerchantTools(server: McpServer, apiClient: DataForSeoClient): void;
@@ -0,0 +1,133 @@
1
+ import { z } from "zod";
2
+ import { registerTool } from "../tools.js";
3
+ export function registerMerchantTools(server, apiClient) {
4
+ // Merchant Google Search
5
+ registerTool(server, "merchant_google_search", z.object({
6
+ keyword: z.string().describe("Product 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("/merchant/google/search/live", [params]);
16
+ return response;
17
+ }, apiClient);
18
+ // Merchant Google Product Specs
19
+ registerTool(server, "merchant_google_product_specs", z.object({
20
+ product_id: z.string().describe("Google Shopping Product 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("/merchant/google/product_specs/live", [params]);
27
+ return response;
28
+ }, apiClient);
29
+ // Merchant Google Product Info
30
+ registerTool(server, "merchant_google_product_info", z.object({
31
+ product_id: z.string().describe("Google Shopping Product 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
+ }), async (params, client) => {
37
+ const response = await client.post("/merchant/google/product_info/live", [params]);
38
+ return response;
39
+ }, apiClient);
40
+ // Merchant Google Sellers
41
+ registerTool(server, "merchant_google_sellers", z.object({
42
+ product_id: z.string().describe("Google Shopping Product ID"),
43
+ location_name: z.string().optional().describe("Location name"),
44
+ location_code: z.number().optional().describe("Location code"),
45
+ language_name: z.string().optional().describe("Language name"),
46
+ language_code: z.string().optional().describe("Language code")
47
+ }), async (params, client) => {
48
+ const response = await client.post("/merchant/google/sellers/live", [params]);
49
+ return response;
50
+ }, apiClient);
51
+ // Merchant Google Reviews
52
+ registerTool(server, "merchant_google_reviews", z.object({
53
+ product_id: z.string().describe("Google Shopping Product ID"),
54
+ location_name: z.string().optional().describe("Location name"),
55
+ location_code: z.number().optional().describe("Location code"),
56
+ language_name: z.string().optional().describe("Language name"),
57
+ language_code: z.string().optional().describe("Language code"),
58
+ depth: z.number().optional().describe("Number of reviews to retrieve"),
59
+ offset: z.number().optional().describe("Offset for pagination")
60
+ }), async (params, client) => {
61
+ const response = await client.post("/merchant/google/reviews/live", [params]);
62
+ return response;
63
+ }, apiClient);
64
+ // Merchant Google Locations
65
+ registerTool(server, "merchant_google_locations", z.object({
66
+ country: z.string().optional().describe("Filter locations by country name")
67
+ }), async (params, client) => {
68
+ const url = params.country
69
+ ? `/merchant/google/locations?country=${encodeURIComponent(params.country)}`
70
+ : "/merchant/google/locations";
71
+ const response = await client.get(url);
72
+ return response;
73
+ }, apiClient);
74
+ // Merchant Google Languages
75
+ registerTool(server, "merchant_google_languages", {}, async (_params, client) => {
76
+ const response = await client.get("/merchant/google/languages");
77
+ return response;
78
+ }, apiClient);
79
+ // Merchant Amazon Search
80
+ registerTool(server, "merchant_amazon_search", z.object({
81
+ keyword: z.string().describe("Product name or related keyword"),
82
+ location_name: z.string().optional().describe("Location name"),
83
+ location_code: z.number().optional().describe("Location code"),
84
+ language_name: z.string().optional().describe("Language name"),
85
+ language_code: z.string().optional().describe("Language code"),
86
+ depth: z.number().optional().describe("Number of results to return"),
87
+ limit: z.number().optional().describe("Maximum number of results to return per page"),
88
+ offset: z.number().optional().describe("Offset for pagination")
89
+ }), async (params, client) => {
90
+ const response = await client.post("/merchant/amazon/search/live", [params]);
91
+ return response;
92
+ }, apiClient);
93
+ // Merchant Amazon Product Info
94
+ registerTool(server, "merchant_amazon_product_info", z.object({
95
+ asin: z.string().describe("Amazon ASIN"),
96
+ location_name: z.string().optional().describe("Location name"),
97
+ location_code: z.number().optional().describe("Location code"),
98
+ language_name: z.string().optional().describe("Language name"),
99
+ language_code: z.string().optional().describe("Language code")
100
+ }), async (params, client) => {
101
+ const response = await client.post("/merchant/amazon/product_info/live", [params]);
102
+ return response;
103
+ }, apiClient);
104
+ // Merchant Amazon Reviews
105
+ registerTool(server, "merchant_amazon_reviews", z.object({
106
+ asin: z.string().describe("Amazon ASIN"),
107
+ location_name: z.string().optional().describe("Location name"),
108
+ location_code: z.number().optional().describe("Location code"),
109
+ language_name: z.string().optional().describe("Language name"),
110
+ language_code: z.string().optional().describe("Language code"),
111
+ depth: z.number().optional().describe("Number of reviews to retrieve"),
112
+ offset: z.number().optional().describe("Offset for pagination")
113
+ }), async (params, client) => {
114
+ const response = await client.post("/merchant/amazon/reviews/live", [params]);
115
+ return response;
116
+ }, apiClient);
117
+ // Merchant Amazon Locations
118
+ registerTool(server, "merchant_amazon_locations", z.object({
119
+ country: z.string().optional().describe("Filter locations by country name")
120
+ }), async (params, client) => {
121
+ const url = params.country
122
+ ? `/merchant/amazon/locations?country=${encodeURIComponent(params.country)}`
123
+ : "/merchant/amazon/locations";
124
+ const response = await client.get(url);
125
+ return response;
126
+ }, apiClient);
127
+ // Merchant Amazon Languages
128
+ registerTool(server, "merchant_amazon_languages", {}, async (_params, client) => {
129
+ const response = await client.get("/merchant/amazon/languages");
130
+ return response;
131
+ }, apiClient);
132
+ }
133
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/merchant/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 registerOnPageTools(server: McpServer, apiClient: DataForSeoClient): void;
@@ -0,0 +1,68 @@
1
+ import { z } from "zod";
2
+ import { registerTool } from "../tools.js";
3
+ export function registerOnPageTools(server, apiClient) {
4
+ // OnPage Task Post
5
+ registerTool(server, "onpage_task_post", z.object({
6
+ target: z.string().describe("Target URL to analyze"),
7
+ max_crawl_pages: z.number().optional().describe("Maximum number of pages to crawl"),
8
+ load_resources: z.boolean().optional().describe("Load page resources"),
9
+ enable_javascript: z.boolean().optional().describe("Enable JavaScript execution"),
10
+ limit: z.number().optional().describe("Maximum number of results to return")
11
+ }), async (params, client) => {
12
+ const response = await client.post("/on_page/task_post", [params]);
13
+ return response;
14
+ }, apiClient);
15
+ // OnPage Tasks Ready
16
+ registerTool(server, "onpage_tasks_ready", {}, async (_params, client) => {
17
+ const response = await client.get("/on_page/tasks_ready");
18
+ return response;
19
+ }, apiClient);
20
+ // OnPage Task Result Summary
21
+ registerTool(server, "onpage_summary", z.object({
22
+ id: z.string().describe("Task ID")
23
+ }), async (params, client) => {
24
+ const response = await client.get(`/on_page/summary/${params.id}`);
25
+ return response;
26
+ }, apiClient);
27
+ // OnPage Task Result Pages
28
+ registerTool(server, "onpage_pages", z.object({
29
+ id: z.string().describe("Task ID"),
30
+ limit: z.number().optional().describe("Maximum number of results to return"),
31
+ offset: z.number().optional().describe("Offset for pagination"),
32
+ filters: z.array(z.any()).optional().describe("Array of filter objects")
33
+ }), async (params, client) => {
34
+ const { id, ...restParams } = params;
35
+ const response = await client.post(`/on_page/pages/${id}`, [restParams]);
36
+ return response;
37
+ }, apiClient);
38
+ // OnPage Task Result Resources
39
+ registerTool(server, "onpage_resources", z.object({
40
+ id: z.string().describe("Task ID"),
41
+ url: z.string().describe("URL of the page to get resources for"),
42
+ limit: z.number().optional().describe("Maximum number of results to return"),
43
+ offset: z.number().optional().describe("Offset for pagination"),
44
+ filters: z.array(z.any()).optional().describe("Array of filter objects")
45
+ }), async (params, client) => {
46
+ const { id, ...restParams } = params;
47
+ const response = await client.post(`/on_page/resources/${id}`, [restParams]);
48
+ return response;
49
+ }, apiClient);
50
+ // OnPage Task Force Stop
51
+ registerTool(server, "onpage_task_force_stop", z.object({
52
+ id: z.string().describe("Task ID")
53
+ }), async (params, client) => {
54
+ const response = await client.post("/on_page/task_force_stop", [{ id: params.id }]);
55
+ return response;
56
+ }, apiClient);
57
+ // OnPage Duplicate Content
58
+ registerTool(server, "onpage_duplicate_content", z.object({
59
+ id: z.string().describe("Task ID"),
60
+ limit: z.number().optional().describe("Maximum number of results to return"),
61
+ offset: z.number().optional().describe("Offset for pagination")
62
+ }), async (params, client) => {
63
+ const { id, ...restParams } = params;
64
+ const response = await client.post(`/on_page/duplicate_content/${id}`, [restParams]);
65
+ return response;
66
+ }, apiClient);
67
+ }
68
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/onpage/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAoB,MAAM,aAAa,CAAC;AAG7D,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,SAA2B;IAChF,mBAAmB;IACnB,YAAY,CACV,MAAM,EACN,kBAAkB,EAClB,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACpD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QACnF,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACtE,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACjF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KAC7E,CAAC,EACF,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,oBAAoB,EACpB,CAAC,MAAM,CAAC,CACT,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC,EACD,SAAS,CACV,CAAC;IAEF,qBAAqB;IACrB,YAAY,CACV,MAAM,EACN,oBAAoB,EACpB,EAAE,EACF,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QACxB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAA0B,sBAAsB,CAAC,CAAC;QAEnF,OAAO,QAAQ,CAAC;IAClB,CAAC,EACD,SAAS,CACV,CAAC;IAEF,6BAA6B;IAC7B,YAAY,CACV,MAAM,EACN,gBAAgB,EAChB,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;KACnC,CAAC,EACF,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAA0B,oBAAoB,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAE5F,OAAO,QAAQ,CAAC;IAClB,CAAC,EACD,SAAS,CACV,CAAC;IAEF,2BAA2B;IAC3B,YAAY,CACV,MAAM,EACN,cAAc,EACd,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;QAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QAC5E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC/D,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KACzE,CAAC,EACF,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QACvB,MAAM,EAAE,EAAE,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,kBAAkB,EAAE,EAAE,EACtB,CAAC,UAAU,CAAC,CACb,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC,EACD,SAAS,CACV,CAAC;IAEF,+BAA+B;IAC/B,YAAY,CACV,MAAM,EACN,kBAAkB,EAClB,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;QAClC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QAChE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QAC5E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC/D,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KACzE,CAAC,EACF,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QACvB,MAAM,EAAE,EAAE,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,sBAAsB,EAAE,EAAE,EAC1B,CAAC,UAAU,CAAC,CACb,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC,EACD,SAAS,CACV,CAAC;IAEF,yBAAyB;IACzB,YAAY,CACV,MAAM,EACN,wBAAwB,EACxB,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;KACnC,CAAC,EACF,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,0BAA0B,EAC1B,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CACpB,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC,EACD,SAAS,CACV,CAAC;IAEF,2BAA2B;IAC3B,YAAY,CACV,MAAM,EACN,0BAA0B,EAC1B,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;QAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QAC5E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KAChE,CAAC,EACF,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QACvB,MAAM,EAAE,EAAE,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC;QACrC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,8BAA8B,EAAE,EAAE,EAClC,CAAC,UAAU,CAAC,CACb,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC,EACD,SAAS,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { DataForSeoClient } from "../client.js";
3
+ export declare function registerSerpTools(server: McpServer, apiClient: DataForSeoClient): void;
@@ -0,0 +1,99 @@
1
+ import { z } from "zod";
2
+ import { registerTool, registerTaskTool } from "../tools.js";
3
+ // SERP Google Organic API schemas
4
+ const googleOrganicLiveSchema = z.object({
5
+ keyword: z.string().describe("The search query or keyword"),
6
+ location_code: z.number().describe("The location code for the search"),
7
+ language_code: z.string().describe("The language code for the search"),
8
+ device: z.enum(["desktop", "mobile", "tablet"]).optional().describe("The device type for the search"),
9
+ os: z.enum(["windows", "macos", "ios", "android"]).optional().describe("The operating system for the search"),
10
+ depth: z.number().optional().describe("Maximum number of results to return"),
11
+ se_domain: z.string().optional().describe("Search engine domain (e.g., google.com)")
12
+ });
13
+ const googleOrganicTaskSchema = googleOrganicLiveSchema.extend({
14
+ priority: z.number().min(1).max(2).optional().describe("Task priority: 1 (normal) or 2 (high)"),
15
+ tag: z.string().optional().describe("Custom identifier for the task"),
16
+ postback_url: z.string().optional().describe("URL to receive a callback when the task is completed"),
17
+ postback_data: z.string().optional().describe("Custom data to be passed in the callback")
18
+ });
19
+ export function registerSerpTools(server, apiClient) {
20
+ // Google Organic Live
21
+ registerTool(server, "serp_google_organic_live", googleOrganicLiveSchema, async (params, client) => {
22
+ const response = await client.post("/serp/google/organic/live", [params]);
23
+ return response;
24
+ }, apiClient);
25
+ // Google Organic Task-based (POST, READY, GET)
26
+ registerTaskTool(server, "serp_google_organic_task", googleOrganicTaskSchema, async (params, client) => {
27
+ const response = await client.post("/serp/google/organic/task_post", [params]);
28
+ return response;
29
+ }, async (client) => {
30
+ const response = await client.get("/serp/google/organic/tasks_ready");
31
+ return response;
32
+ }, async (id, client) => {
33
+ const response = await client.get(`/serp/google/organic/task_get/${id}`);
34
+ return response;
35
+ }, apiClient);
36
+ // Google Maps Live
37
+ registerTool(server, "serp_google_maps_live", googleOrganicLiveSchema.extend({
38
+ local_pack_type: z.enum(["maps", "local_pack"]).optional().describe("Type of local pack results")
39
+ }), async (params, client) => {
40
+ const response = await client.post("/serp/google/maps/live", [params]);
41
+ return response;
42
+ }, apiClient);
43
+ // Google Images Live
44
+ registerTool(server, "serp_google_images_live", googleOrganicLiveSchema, async (params, client) => {
45
+ const response = await client.post("/serp/google/images/live", [params]);
46
+ return response;
47
+ }, apiClient);
48
+ // Google News Live
49
+ registerTool(server, "serp_google_news_live", googleOrganicLiveSchema, async (params, client) => {
50
+ const response = await client.post("/serp/google/news/live", [params]);
51
+ return response;
52
+ }, apiClient);
53
+ // Google Jobs Live
54
+ registerTool(server, "serp_google_jobs_live", googleOrganicLiveSchema, async (params, client) => {
55
+ const response = await client.post("/serp/google/jobs/live", [params]);
56
+ return response;
57
+ }, apiClient);
58
+ // Google Shopping Live
59
+ registerTool(server, "serp_google_shopping_live", googleOrganicLiveSchema, async (params, client) => {
60
+ const response = await client.post("/serp/google/shopping/live", [params]);
61
+ return response;
62
+ }, apiClient);
63
+ // Bing Organic Live
64
+ registerTool(server, "serp_bing_organic_live", googleOrganicLiveSchema, async (params, client) => {
65
+ const response = await client.post("/serp/bing/organic/live", [params]);
66
+ return response;
67
+ }, apiClient);
68
+ // Yahoo Organic Live
69
+ registerTool(server, "serp_yahoo_organic_live", googleOrganicLiveSchema, async (params, client) => {
70
+ const response = await client.post("/serp/yahoo/organic/live", [params]);
71
+ return response;
72
+ }, apiClient);
73
+ // Baidu Organic Live
74
+ registerTool(server, "serp_baidu_organic_live", googleOrganicLiveSchema, async (params, client) => {
75
+ const response = await client.post("/serp/baidu/organic/live", [params]);
76
+ return response;
77
+ }, apiClient);
78
+ // YouTube Organic Live
79
+ registerTool(server, "serp_youtube_organic_live", googleOrganicLiveSchema, async (params, client) => {
80
+ const response = await client.post("/serp/youtube/organic/live", [params]);
81
+ return response;
82
+ }, apiClient);
83
+ // SERP API Locations
84
+ registerTool(server, "serp_google_locations", {
85
+ country: z.string().optional().describe("Filter locations by country name")
86
+ }, async (params, client) => {
87
+ const url = params.country
88
+ ? `/serp/google/locations?country=${encodeURIComponent(params.country)}`
89
+ : "/serp/google/locations";
90
+ const response = await client.get(url);
91
+ return response;
92
+ }, apiClient);
93
+ // SERP API Languages
94
+ registerTool(server, "serp_google_languages", {}, async (_params, client) => {
95
+ const response = await client.get("/serp/google/languages");
96
+ return response;
97
+ }, apiClient);
98
+ }
99
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/serp/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { z } from "zod";
3
+ import { DataForSeoClient } from "./client.js";
4
+ /**
5
+ * Base helper function to register an MCP tool for DataForSEO API
6
+ */
7
+ export declare function registerTool<T extends z.ZodRawShape>(server: McpServer, name: string, schema: z.ZodObject<T> | T, handler: (params: z.infer<z.ZodObject<T>>, client: DataForSeoClient) => Promise<any>, client: DataForSeoClient): void;
8
+ /**
9
+ * Helper for registering a task-based tool (POST, READY, GET pattern)
10
+ */
11
+ export declare function registerTaskTool<PostT extends z.ZodRawShape>(server: McpServer, baseName: string, postSchema: z.ZodObject<PostT> | PostT, postHandler: (params: z.infer<z.ZodObject<PostT>>, client: DataForSeoClient) => Promise<any>, readyHandler: (client: DataForSeoClient) => Promise<any>, getHandler: (id: string, client: DataForSeoClient) => Promise<any>, client: DataForSeoClient): void;
@@ -0,0 +1,61 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Base helper function to register an MCP tool for DataForSEO API
4
+ */
5
+ export function registerTool(server, name, schema, handler, client) {
6
+ // Extract the shape from ZodObject if needed
7
+ const shape = schema instanceof z.ZodObject ? schema.shape : schema;
8
+ server.tool(name, shape, async (params, _context) => {
9
+ try {
10
+ // We get the apiClient from the closure
11
+ const result = await handler(params, client);
12
+ return {
13
+ content: [
14
+ {
15
+ type: "text",
16
+ text: JSON.stringify(result, null, 2)
17
+ }
18
+ ]
19
+ };
20
+ }
21
+ catch (error) {
22
+ console.error(`Error in ${name} tool:`, error);
23
+ if (error instanceof Error) {
24
+ return {
25
+ content: [
26
+ {
27
+ type: "text",
28
+ text: JSON.stringify({
29
+ error: error.message,
30
+ stack: error.stack
31
+ }, null, 2)
32
+ }
33
+ ]
34
+ };
35
+ }
36
+ return {
37
+ content: [
38
+ {
39
+ type: "text",
40
+ text: JSON.stringify({
41
+ error: "Unknown error occurred",
42
+ details: error
43
+ }, null, 2)
44
+ }
45
+ ]
46
+ };
47
+ }
48
+ });
49
+ }
50
+ /**
51
+ * Helper for registering a task-based tool (POST, READY, GET pattern)
52
+ */
53
+ export function registerTaskTool(server, baseName, postSchema, postHandler, readyHandler, getHandler, client) {
54
+ // Register POST tool
55
+ registerTool(server, `${baseName}_post`, postSchema, postHandler, client);
56
+ // Register READY tool
57
+ registerTool(server, `${baseName}_ready`, {}, (_params, client) => readyHandler(client), client);
58
+ // Register GET tool
59
+ registerTool(server, `${baseName}_get`, { id: z.string() }, (params, client) => getHandler(params.id, client), client);
60
+ }
61
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/api/tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAiB,EACjB,IAAY,EACZ,MAA0B,EAC1B,OAAoF,EACpF,MAAwB;IAExB,6CAA6C;IAC7C,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAEnE,MAAM,CAAC,IAAY,CAClB,IAAI,EACJ,KAAK,EACL,KAAK,EAAE,MAAW,EAAE,QAAa,EAAE,EAAE;QACnC,IAAI,CAAC;YACH,wCAAwC;YACxC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAiC,EAAE,MAAM,CAAC,CAAC;YAExE,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;qBACtC;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,YAAY,IAAI,QAAQ,EAAE,KAAK,CAAC,CAAC;YAE/C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,KAAK,EAAE,KAAK,CAAC,OAAO;gCACpB,KAAK,EAAE,KAAK,CAAC,KAAK;6BACnB,EAAE,IAAI,EAAE,CAAC,CAAC;yBACZ;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,KAAK,EAAE,wBAAwB;4BAC/B,OAAO,EAAE,KAAK;yBACf,EAAE,IAAI,EAAE,CAAC,CAAC;qBACZ;iBACF;aACF,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAiB,EACjB,QAAgB,EAChB,UAAsC,EACtC,WAA4F,EAC5F,YAAwD,EACxD,UAAkE,EAClE,MAAwB;IAExB,qBAAqB;IACrB,YAAY,CACV,MAAM,EACN,GAAG,QAAQ,OAAO,EAClB,UAAU,EACV,WAAW,EACX,MAAM,CACP,CAAC;IAEF,sBAAsB;IACtB,YAAY,CACV,MAAM,EACN,GAAG,QAAQ,QAAQ,EACnB,EAAE,EACF,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EACzC,MAAM,CACP,CAAC;IAEF,oBAAoB;IACpB,YAAY,CACV,MAAM,EACN,GAAG,QAAQ,MAAM,EACjB,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAClB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EACjD,MAAM,CACP,CAAC;AACJ,CAAC"}