xcrawl-mcp 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 (51) hide show
  1. package/.editorconfig +12 -0
  2. package/.env.example +3 -0
  3. package/.prettierrc +6 -0
  4. package/README.md +244 -0
  5. package/claude.md +295 -0
  6. package/dist/core/crawl.d.ts +246 -0
  7. package/dist/core/crawl.d.ts.map +1 -0
  8. package/dist/core/crawl.js +141 -0
  9. package/dist/core/crawl.js.map +1 -0
  10. package/dist/core/map.d.ts +34 -0
  11. package/dist/core/map.d.ts.map +1 -0
  12. package/dist/core/map.js +50 -0
  13. package/dist/core/map.js.map +1 -0
  14. package/dist/core/scrape.d.ts +201 -0
  15. package/dist/core/scrape.d.ts.map +1 -0
  16. package/dist/core/scrape.js +148 -0
  17. package/dist/core/scrape.js.map +1 -0
  18. package/dist/core/search.d.ts +144 -0
  19. package/dist/core/search.d.ts.map +1 -0
  20. package/dist/core/search.js +75 -0
  21. package/dist/core/search.js.map +1 -0
  22. package/dist/index.d.ts +8 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +516 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/stdio.d.ts +3 -0
  27. package/dist/stdio.d.ts.map +1 -0
  28. package/dist/stdio.js +551 -0
  29. package/dist/stdio.js.map +1 -0
  30. package/dist/tools.d.ts +540 -0
  31. package/dist/tools.d.ts.map +1 -0
  32. package/dist/tools.js +528 -0
  33. package/dist/tools.js.map +1 -0
  34. package/dist/types.d.ts +214 -0
  35. package/dist/types.d.ts.map +1 -0
  36. package/dist/types.js +5 -0
  37. package/dist/types.js.map +1 -0
  38. package/package.json +33 -0
  39. package/src/core/crawl.ts +149 -0
  40. package/src/core/map.ts +56 -0
  41. package/src/core/scrape.ts +156 -0
  42. package/src/core/search.ts +81 -0
  43. package/src/index.ts +565 -0
  44. package/src/stdio.ts +584 -0
  45. package/src/tools.ts +539 -0
  46. package/src/types.ts +221 -0
  47. package/tsconfig.build.json +14 -0
  48. package/tsconfig.json +45 -0
  49. package/vitest.config.mts +11 -0
  50. package/worker-configuration.d.ts +10848 -0
  51. package/wrangler.jsonc +26 -0
@@ -0,0 +1,246 @@
1
+ import { z } from "zod";
2
+ import type { XCrawlCrawlRequest, XCrawlCrawlResponse } from "../types.js";
3
+ /**
4
+ * Zod schema for xcrawl_crawl tool parameters
5
+ */
6
+ export declare const crawlToolSchema: z.ZodObject<{
7
+ url: z.ZodString;
8
+ crawler: z.ZodOptional<z.ZodObject<{
9
+ limit: z.ZodOptional<z.ZodNumber>;
10
+ include: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
11
+ exclude: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
12
+ max_depth: z.ZodOptional<z.ZodNumber>;
13
+ include_entire_domain: z.ZodOptional<z.ZodBoolean>;
14
+ include_subdomains: z.ZodOptional<z.ZodBoolean>;
15
+ include_external_links: z.ZodOptional<z.ZodBoolean>;
16
+ sitemaps: z.ZodOptional<z.ZodBoolean>;
17
+ }, "strip", z.ZodTypeAny, {
18
+ limit?: number | undefined;
19
+ include_subdomains?: boolean | undefined;
20
+ include?: string[] | undefined;
21
+ exclude?: string[] | undefined;
22
+ max_depth?: number | undefined;
23
+ include_entire_domain?: boolean | undefined;
24
+ include_external_links?: boolean | undefined;
25
+ sitemaps?: boolean | undefined;
26
+ }, {
27
+ limit?: number | undefined;
28
+ include_subdomains?: boolean | undefined;
29
+ include?: string[] | undefined;
30
+ exclude?: string[] | undefined;
31
+ max_depth?: number | undefined;
32
+ include_entire_domain?: boolean | undefined;
33
+ include_external_links?: boolean | undefined;
34
+ sitemaps?: boolean | undefined;
35
+ }>>;
36
+ proxy: z.ZodOptional<z.ZodObject<{
37
+ location: z.ZodOptional<z.ZodString>;
38
+ sticky_session: z.ZodOptional<z.ZodString>;
39
+ }, "strip", z.ZodTypeAny, {
40
+ location?: string | undefined;
41
+ sticky_session?: string | undefined;
42
+ }, {
43
+ location?: string | undefined;
44
+ sticky_session?: string | undefined;
45
+ }>>;
46
+ request: z.ZodOptional<z.ZodObject<{
47
+ locale: z.ZodOptional<z.ZodString>;
48
+ device: z.ZodOptional<z.ZodEnum<["desktop", "mobile"]>>;
49
+ cookies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
50
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
51
+ only_main_content: z.ZodOptional<z.ZodBoolean>;
52
+ block_ads: z.ZodOptional<z.ZodBoolean>;
53
+ skip_tls_verification: z.ZodOptional<z.ZodBoolean>;
54
+ }, "strip", z.ZodTypeAny, {
55
+ locale?: string | undefined;
56
+ device?: "desktop" | "mobile" | undefined;
57
+ cookies?: Record<string, unknown> | undefined;
58
+ headers?: Record<string, unknown> | undefined;
59
+ only_main_content?: boolean | undefined;
60
+ block_ads?: boolean | undefined;
61
+ skip_tls_verification?: boolean | undefined;
62
+ }, {
63
+ locale?: string | undefined;
64
+ device?: "desktop" | "mobile" | undefined;
65
+ cookies?: Record<string, unknown> | undefined;
66
+ headers?: Record<string, unknown> | undefined;
67
+ only_main_content?: boolean | undefined;
68
+ block_ads?: boolean | undefined;
69
+ skip_tls_verification?: boolean | undefined;
70
+ }>>;
71
+ js_render: z.ZodOptional<z.ZodObject<{
72
+ enabled: z.ZodOptional<z.ZodBoolean>;
73
+ wait_until: z.ZodDefault<z.ZodEnum<["load", "domcontentloaded", "networkidle"]>>;
74
+ viewport: z.ZodOptional<z.ZodObject<{
75
+ width: z.ZodOptional<z.ZodNumber>;
76
+ height: z.ZodOptional<z.ZodNumber>;
77
+ }, "strip", z.ZodTypeAny, {
78
+ width?: number | undefined;
79
+ height?: number | undefined;
80
+ }, {
81
+ width?: number | undefined;
82
+ height?: number | undefined;
83
+ }>>;
84
+ }, "strip", z.ZodTypeAny, {
85
+ wait_until: "load" | "domcontentloaded" | "networkidle";
86
+ viewport?: {
87
+ width?: number | undefined;
88
+ height?: number | undefined;
89
+ } | undefined;
90
+ enabled?: boolean | undefined;
91
+ }, {
92
+ viewport?: {
93
+ width?: number | undefined;
94
+ height?: number | undefined;
95
+ } | undefined;
96
+ enabled?: boolean | undefined;
97
+ wait_until?: "load" | "domcontentloaded" | "networkidle" | undefined;
98
+ }>>;
99
+ output: z.ZodOptional<z.ZodObject<{
100
+ formats: z.ZodDefault<z.ZodOptional<z.ZodArray<z.ZodEnum<["html", "raw_html", "markdown", "links", "summary", "screenshot", "json"]>, "many">>>;
101
+ screenshot: z.ZodOptional<z.ZodEnum<["full_page", "viewport"]>>;
102
+ json: z.ZodOptional<z.ZodObject<{
103
+ prompt: z.ZodOptional<z.ZodString>;
104
+ json_schema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
105
+ }, "strip", z.ZodTypeAny, {
106
+ prompt?: string | undefined;
107
+ json_schema?: Record<string, any> | undefined;
108
+ }, {
109
+ prompt?: string | undefined;
110
+ json_schema?: Record<string, any> | undefined;
111
+ }>>;
112
+ }, "strip", z.ZodTypeAny, {
113
+ formats: ("html" | "raw_html" | "markdown" | "links" | "summary" | "screenshot" | "json")[];
114
+ screenshot?: "full_page" | "viewport" | undefined;
115
+ json?: {
116
+ prompt?: string | undefined;
117
+ json_schema?: Record<string, any> | undefined;
118
+ } | undefined;
119
+ }, {
120
+ screenshot?: "full_page" | "viewport" | undefined;
121
+ json?: {
122
+ prompt?: string | undefined;
123
+ json_schema?: Record<string, any> | undefined;
124
+ } | undefined;
125
+ formats?: ("html" | "raw_html" | "markdown" | "links" | "summary" | "screenshot" | "json")[] | undefined;
126
+ }>>;
127
+ webhook: z.ZodOptional<z.ZodObject<{
128
+ url: z.ZodOptional<z.ZodString>;
129
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
130
+ events: z.ZodOptional<z.ZodArray<z.ZodEnum<["started", "completed", "failed"]>, "many">>;
131
+ }, "strip", z.ZodTypeAny, {
132
+ url?: string | undefined;
133
+ headers?: Record<string, string> | undefined;
134
+ events?: ("started" | "completed" | "failed")[] | undefined;
135
+ }, {
136
+ url?: string | undefined;
137
+ headers?: Record<string, string> | undefined;
138
+ events?: ("started" | "completed" | "failed")[] | undefined;
139
+ }>>;
140
+ }, "strip", z.ZodTypeAny, {
141
+ url: string;
142
+ proxy?: {
143
+ location?: string | undefined;
144
+ sticky_session?: string | undefined;
145
+ } | undefined;
146
+ request?: {
147
+ locale?: string | undefined;
148
+ device?: "desktop" | "mobile" | undefined;
149
+ cookies?: Record<string, unknown> | undefined;
150
+ headers?: Record<string, unknown> | undefined;
151
+ only_main_content?: boolean | undefined;
152
+ block_ads?: boolean | undefined;
153
+ skip_tls_verification?: boolean | undefined;
154
+ } | undefined;
155
+ js_render?: {
156
+ wait_until: "load" | "domcontentloaded" | "networkidle";
157
+ viewport?: {
158
+ width?: number | undefined;
159
+ height?: number | undefined;
160
+ } | undefined;
161
+ enabled?: boolean | undefined;
162
+ } | undefined;
163
+ output?: {
164
+ formats: ("html" | "raw_html" | "markdown" | "links" | "summary" | "screenshot" | "json")[];
165
+ screenshot?: "full_page" | "viewport" | undefined;
166
+ json?: {
167
+ prompt?: string | undefined;
168
+ json_schema?: Record<string, any> | undefined;
169
+ } | undefined;
170
+ } | undefined;
171
+ webhook?: {
172
+ url?: string | undefined;
173
+ headers?: Record<string, string> | undefined;
174
+ events?: ("started" | "completed" | "failed")[] | undefined;
175
+ } | undefined;
176
+ crawler?: {
177
+ limit?: number | undefined;
178
+ include_subdomains?: boolean | undefined;
179
+ include?: string[] | undefined;
180
+ exclude?: string[] | undefined;
181
+ max_depth?: number | undefined;
182
+ include_entire_domain?: boolean | undefined;
183
+ include_external_links?: boolean | undefined;
184
+ sitemaps?: boolean | undefined;
185
+ } | undefined;
186
+ }, {
187
+ url: string;
188
+ proxy?: {
189
+ location?: string | undefined;
190
+ sticky_session?: string | undefined;
191
+ } | undefined;
192
+ request?: {
193
+ locale?: string | undefined;
194
+ device?: "desktop" | "mobile" | undefined;
195
+ cookies?: Record<string, unknown> | undefined;
196
+ headers?: Record<string, unknown> | undefined;
197
+ only_main_content?: boolean | undefined;
198
+ block_ads?: boolean | undefined;
199
+ skip_tls_verification?: boolean | undefined;
200
+ } | undefined;
201
+ js_render?: {
202
+ viewport?: {
203
+ width?: number | undefined;
204
+ height?: number | undefined;
205
+ } | undefined;
206
+ enabled?: boolean | undefined;
207
+ wait_until?: "load" | "domcontentloaded" | "networkidle" | undefined;
208
+ } | undefined;
209
+ output?: {
210
+ screenshot?: "full_page" | "viewport" | undefined;
211
+ json?: {
212
+ prompt?: string | undefined;
213
+ json_schema?: Record<string, any> | undefined;
214
+ } | undefined;
215
+ formats?: ("html" | "raw_html" | "markdown" | "links" | "summary" | "screenshot" | "json")[] | undefined;
216
+ } | undefined;
217
+ webhook?: {
218
+ url?: string | undefined;
219
+ headers?: Record<string, string> | undefined;
220
+ events?: ("started" | "completed" | "failed")[] | undefined;
221
+ } | undefined;
222
+ crawler?: {
223
+ limit?: number | undefined;
224
+ include_subdomains?: boolean | undefined;
225
+ include?: string[] | undefined;
226
+ exclude?: string[] | undefined;
227
+ max_depth?: number | undefined;
228
+ include_entire_domain?: boolean | undefined;
229
+ include_external_links?: boolean | undefined;
230
+ sitemaps?: boolean | undefined;
231
+ } | undefined;
232
+ }>;
233
+ export type CrawlToolParams = z.infer<typeof crawlToolSchema>;
234
+ /**
235
+ * Call xCrawl Crawl API to start a batch crawling task (async)
236
+ */
237
+ export declare function callXCrawlCrawlAPI(apiKey: string, params: XCrawlCrawlRequest): Promise<XCrawlCrawlResponse>;
238
+ /**
239
+ * Check crawl task status and retrieve results
240
+ */
241
+ export declare function checkCrawlStatus(apiKey: string, crawlId: string): Promise<XCrawlCrawlResponse>;
242
+ /**
243
+ * Format crawl response for MCP tool output
244
+ */
245
+ export declare function formatCrawlResponse(response: XCrawlCrawlResponse): string;
246
+ //# sourceMappingURL=crawl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crawl.d.ts","sourceRoot":"","sources":["../../src/core/crawl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAE3E;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkE1B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA6BjH;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA4BpG;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,CAEzE"}
@@ -0,0 +1,141 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Zod schema for xcrawl_crawl tool parameters
4
+ */
5
+ export const crawlToolSchema = z.object({
6
+ url: z.string().url().describe("The entry URL to start crawling from"),
7
+ crawler: z
8
+ .object({
9
+ limit: z.number().int().optional().describe("Maximum number of pages to crawl"),
10
+ include: z.array(z.string()).optional().describe("Regex patterns for URLs to include"),
11
+ exclude: z.array(z.string()).optional().describe("Regex patterns for URLs to exclude"),
12
+ max_depth: z.number().int().optional().describe("Maximum crawl depth"),
13
+ include_entire_domain: z.boolean().optional().describe("Whether to crawl the entire domain"),
14
+ include_subdomains: z.boolean().optional().describe("Whether to include subdomains"),
15
+ include_external_links: z.boolean().optional().describe("Whether to follow external links"),
16
+ sitemaps: z.boolean().optional().describe("Whether to use sitemap"),
17
+ })
18
+ .optional()
19
+ .describe("Crawler configuration"),
20
+ proxy: z
21
+ .object({
22
+ location: z.string().optional(),
23
+ sticky_session: z.string().optional(),
24
+ })
25
+ .optional(),
26
+ request: z
27
+ .object({
28
+ locale: z.string().optional(),
29
+ device: z.enum(["desktop", "mobile"]).optional(),
30
+ cookies: z.record(z.unknown()).optional(),
31
+ headers: z.record(z.unknown()).optional(),
32
+ only_main_content: z.boolean().optional(),
33
+ block_ads: z.boolean().optional(),
34
+ skip_tls_verification: z.boolean().optional(),
35
+ })
36
+ .optional(),
37
+ js_render: z
38
+ .object({
39
+ enabled: z.boolean().optional(),
40
+ wait_until: z.enum(["load", "domcontentloaded", "networkidle"]).default("load"),
41
+ viewport: z
42
+ .object({
43
+ width: z.number().int().optional(),
44
+ height: z.number().int().optional(),
45
+ })
46
+ .optional(),
47
+ })
48
+ .optional(),
49
+ output: z
50
+ .object({
51
+ formats: z.array(z.enum(["html", "raw_html", "markdown", "links", "summary", "screenshot", "json"]))
52
+ .optional()
53
+ .default(["markdown"])
54
+ .describe("Output formats. Default: ['markdown']. Set to [] to get only metadata."),
55
+ screenshot: z.enum(["full_page", "viewport"]).optional(),
56
+ json: z
57
+ .object({
58
+ prompt: z.string().optional(),
59
+ json_schema: z.record(z.any()).optional(),
60
+ })
61
+ .optional(),
62
+ })
63
+ .optional(),
64
+ webhook: z
65
+ .object({
66
+ url: z.string().optional(),
67
+ headers: z.record(z.string()).optional(),
68
+ events: z.array(z.enum(["started", "completed", "failed"])).optional(),
69
+ })
70
+ .optional(),
71
+ });
72
+ /**
73
+ * Call xCrawl Crawl API to start a batch crawling task (async)
74
+ */
75
+ export async function callXCrawlCrawlAPI(apiKey, params) {
76
+ const controller = new AbortController();
77
+ const timeoutId = setTimeout(() => controller.abort(), 300000); // 300 seconds timeout
78
+ try {
79
+ const response = await fetch("https://run.xcrawl.com/v1/crawl", {
80
+ method: "POST",
81
+ headers: {
82
+ "Content-Type": "application/json",
83
+ Authorization: `Bearer ${apiKey}`,
84
+ },
85
+ body: JSON.stringify(params),
86
+ signal: controller.signal,
87
+ });
88
+ if (!response.ok) {
89
+ const errorText = await response.text();
90
+ throw new Error(`xCrawl Crawl API error: ${response.status} ${response.statusText} - ${errorText}`);
91
+ }
92
+ return (await response.json());
93
+ }
94
+ catch (error) {
95
+ if (error instanceof Error && error.name === "AbortError") {
96
+ throw new Error("Request timeout after 300 seconds");
97
+ }
98
+ throw error;
99
+ }
100
+ finally {
101
+ clearTimeout(timeoutId);
102
+ }
103
+ }
104
+ /**
105
+ * Check crawl task status and retrieve results
106
+ */
107
+ export async function checkCrawlStatus(apiKey, crawlId) {
108
+ const controller = new AbortController();
109
+ const timeoutId = setTimeout(() => controller.abort(), 300000); // 300 seconds timeout
110
+ try {
111
+ const response = await fetch(`https://run.xcrawl.com/v1/crawl/${crawlId}`, {
112
+ method: "GET",
113
+ headers: {
114
+ "Content-Type": "application/json",
115
+ Authorization: `Bearer ${apiKey}`,
116
+ },
117
+ signal: controller.signal,
118
+ });
119
+ if (!response.ok) {
120
+ const errorText = await response.text();
121
+ throw new Error(`xCrawl check crawl status error: ${response.status} ${response.statusText} - ${errorText}`);
122
+ }
123
+ return (await response.json());
124
+ }
125
+ catch (error) {
126
+ if (error instanceof Error && error.name === "AbortError") {
127
+ throw new Error("Request timeout after 300 seconds");
128
+ }
129
+ throw error;
130
+ }
131
+ finally {
132
+ clearTimeout(timeoutId);
133
+ }
134
+ }
135
+ /**
136
+ * Format crawl response for MCP tool output
137
+ */
138
+ export function formatCrawlResponse(response) {
139
+ return JSON.stringify(response, null, 2);
140
+ }
141
+ //# sourceMappingURL=crawl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crawl.js","sourceRoot":"","sources":["../../src/core/crawl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { z } from "zod";
2
+ import type { XCrawlMapRequest, XCrawlMapResponse } from "../types.js";
3
+ /**
4
+ * Zod schema for xcrawl_map tool parameters
5
+ */
6
+ export declare const mapToolSchema: z.ZodObject<{
7
+ url: z.ZodString;
8
+ filter: z.ZodOptional<z.ZodString>;
9
+ limit: z.ZodOptional<z.ZodNumber>;
10
+ include_subdomains: z.ZodOptional<z.ZodBoolean>;
11
+ ignore_query_parameters: z.ZodOptional<z.ZodBoolean>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ url: string;
14
+ filter?: string | undefined;
15
+ limit?: number | undefined;
16
+ include_subdomains?: boolean | undefined;
17
+ ignore_query_parameters?: boolean | undefined;
18
+ }, {
19
+ url: string;
20
+ filter?: string | undefined;
21
+ limit?: number | undefined;
22
+ include_subdomains?: boolean | undefined;
23
+ ignore_query_parameters?: boolean | undefined;
24
+ }>;
25
+ export type MapToolParams = z.infer<typeof mapToolSchema>;
26
+ /**
27
+ * Call xCrawl Map API to get all URLs from a website
28
+ */
29
+ export declare function callXCrawlMapAPI(apiKey: string, params: XCrawlMapRequest): Promise<XCrawlMapResponse>;
30
+ /**
31
+ * Format map response for MCP tool output
32
+ */
33
+ export declare function formatMapResponse(response: XCrawlMapResponse): string;
34
+ //# sourceMappingURL=map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/core/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEvE;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;EAMxB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA6B3G;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAErE"}
@@ -0,0 +1,50 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Zod schema for xcrawl_map tool parameters
4
+ */
5
+ export const mapToolSchema = z.object({
6
+ url: z.string().url().describe("The website URL to map"),
7
+ filter: z.string().optional().describe("Regex pattern to filter URLs"),
8
+ limit: z.number().int().min(1).max(100000).optional().describe("Maximum number of URLs to return (1-100000)"),
9
+ include_subdomains: z.boolean().optional().describe("Whether to include URLs from subdomains"),
10
+ ignore_query_parameters: z.boolean().optional().describe("Whether to ignore URLs with query parameters"),
11
+ });
12
+ /**
13
+ * Call xCrawl Map API to get all URLs from a website
14
+ */
15
+ export async function callXCrawlMapAPI(apiKey, params) {
16
+ const controller = new AbortController();
17
+ const timeoutId = setTimeout(() => controller.abort(), 300000); // 300 seconds timeout
18
+ try {
19
+ const response = await fetch("https://run.xcrawl.com/v1/map", {
20
+ method: "POST",
21
+ headers: {
22
+ "Content-Type": "application/json",
23
+ Authorization: `Bearer ${apiKey}`,
24
+ },
25
+ body: JSON.stringify(params),
26
+ signal: controller.signal,
27
+ });
28
+ if (!response.ok) {
29
+ const errorText = await response.text();
30
+ throw new Error(`xCrawl Map API error: ${response.status} ${response.statusText} - ${errorText}`);
31
+ }
32
+ return (await response.json());
33
+ }
34
+ catch (error) {
35
+ if (error instanceof Error && error.name === "AbortError") {
36
+ throw new Error("Request timeout after 300 seconds");
37
+ }
38
+ throw error;
39
+ }
40
+ finally {
41
+ clearTimeout(timeoutId);
42
+ }
43
+ }
44
+ /**
45
+ * Format map response for MCP tool output
46
+ */
47
+ export function formatMapResponse(response) {
48
+ return JSON.stringify(response, null, 2);
49
+ }
50
+ //# sourceMappingURL=map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/core/map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACxD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACtE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;IAC7G,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAC9F,uBAAuB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;CACxG,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAc,EAAE,MAAwB;IAC9E,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,sBAAsB;IAEtF,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,+BAA+B,EAAE;YAC7D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACR,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,MAAM,EAAE;aACjC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAC5B,MAAM,EAAE,UAAU,CAAC,MAAM;SACzB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,MAAM,SAAS,EAAE,CAAC,CAAC;QACnG,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAsB,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;YAAS,CAAC;QACV,YAAY,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAA2B;IAC5D,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC"}