@fl0w1nd/search-mcp 0.1.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 (62) hide show
  1. package/README.md +4 -0
  2. package/build/core/provider.d.ts +18 -0
  3. package/build/core/provider.d.ts.map +1 -0
  4. package/build/core/provider.js +23 -0
  5. package/build/core/provider.js.map +1 -0
  6. package/build/core/rate-limiter.d.ts +14 -0
  7. package/build/core/rate-limiter.d.ts.map +1 -0
  8. package/build/core/rate-limiter.js +34 -0
  9. package/build/core/rate-limiter.js.map +1 -0
  10. package/build/core/runner.d.ts +4 -0
  11. package/build/core/runner.d.ts.map +1 -0
  12. package/build/core/runner.js +44 -0
  13. package/build/core/runner.js.map +1 -0
  14. package/build/index.d.ts +3 -0
  15. package/build/index.d.ts.map +1 -0
  16. package/build/index.js +16 -0
  17. package/build/index.js.map +1 -0
  18. package/build/tools/fetch/index.d.ts +3 -0
  19. package/build/tools/fetch/index.d.ts.map +1 -0
  20. package/build/tools/fetch/index.js +78 -0
  21. package/build/tools/fetch/index.js.map +1 -0
  22. package/build/tools/fetch/providers/firecrawl.d.ts +4 -0
  23. package/build/tools/fetch/providers/firecrawl.d.ts.map +1 -0
  24. package/build/tools/fetch/providers/firecrawl.js +44 -0
  25. package/build/tools/fetch/providers/firecrawl.js.map +1 -0
  26. package/build/tools/fetch/providers/jina.d.ts +4 -0
  27. package/build/tools/fetch/providers/jina.d.ts.map +1 -0
  28. package/build/tools/fetch/providers/jina.js +33 -0
  29. package/build/tools/fetch/providers/jina.js.map +1 -0
  30. package/build/tools/fetch/runner.d.ts +10 -0
  31. package/build/tools/fetch/runner.d.ts.map +1 -0
  32. package/build/tools/fetch/runner.js +175 -0
  33. package/build/tools/fetch/runner.js.map +1 -0
  34. package/build/tools/fetch/types.d.ts +5 -0
  35. package/build/tools/fetch/types.d.ts.map +1 -0
  36. package/build/tools/fetch/types.js +2 -0
  37. package/build/tools/fetch/types.js.map +1 -0
  38. package/build/tools/reddit/client.d.ts +13 -0
  39. package/build/tools/reddit/client.d.ts.map +1 -0
  40. package/build/tools/reddit/client.js +357 -0
  41. package/build/tools/reddit/client.js.map +1 -0
  42. package/build/tools/reddit/index.d.ts +3 -0
  43. package/build/tools/reddit/index.d.ts.map +1 -0
  44. package/build/tools/reddit/index.js +51 -0
  45. package/build/tools/reddit/index.js.map +1 -0
  46. package/build/tools/search/index.d.ts +3 -0
  47. package/build/tools/search/index.d.ts.map +1 -0
  48. package/build/tools/search/index.js +23 -0
  49. package/build/tools/search/index.js.map +1 -0
  50. package/build/tools/search/providers/brave.d.ts +8 -0
  51. package/build/tools/search/providers/brave.d.ts.map +1 -0
  52. package/build/tools/search/providers/brave.js +47 -0
  53. package/build/tools/search/providers/brave.js.map +1 -0
  54. package/build/tools/search/providers/exa.d.ts +8 -0
  55. package/build/tools/search/providers/exa.d.ts.map +1 -0
  56. package/build/tools/search/providers/exa.js +29 -0
  57. package/build/tools/search/providers/exa.js.map +1 -0
  58. package/build/types.d.ts +9 -0
  59. package/build/types.d.ts.map +1 -0
  60. package/build/types.js +2 -0
  61. package/build/types.js.map +1 -0
  62. package/package.json +36 -0
@@ -0,0 +1,13 @@
1
+ export declare function formatCompact(data: unknown): string;
2
+ export declare const REDDIT_ACTIONS: string[];
3
+ export declare function executeRedditAction(action: string, params: Record<string, any>): Promise<any>;
4
+ export declare function isRedditUrl(url: string): boolean;
5
+ interface FetchRedditResult {
6
+ url: string;
7
+ data?: any;
8
+ provider?: string;
9
+ error?: string;
10
+ }
11
+ export declare function fetchRedditUrl(url: string): Promise<FetchRedditResult>;
12
+ export {};
13
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/tools/reddit/client.ts"],"names":[],"mappings":"AA2UA,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAEnD;AAiBD,eAAO,MAAM,cAAc,UAA8B,CAAC;AAE1D,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,OAAO,CAAC,GAAG,CAAC,CAQd;AAMD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMhD;AAED,UAAU,iBAAiB;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,iBAAiB,CAAC,CAyC5B"}
@@ -0,0 +1,357 @@
1
+ const REDDIT_BASE_URL = "https://www.reddit.com";
2
+ const USER_AGENT = "SearchMCP-Reddit/1.0.0";
3
+ function getTimeout() {
4
+ const env = process.env.REDDIT_TIMEOUT;
5
+ return env ? Number(env) * 1000 : 30_000;
6
+ }
7
+ async function makeRequest(endpoint, params) {
8
+ const url = new URL(endpoint, REDDIT_BASE_URL);
9
+ if (params) {
10
+ for (const [key, value] of Object.entries(params)) {
11
+ url.searchParams.set(key, String(value));
12
+ }
13
+ }
14
+ const controller = new AbortController();
15
+ const timer = setTimeout(() => controller.abort(), getTimeout());
16
+ try {
17
+ const res = await fetch(url.toString(), {
18
+ headers: {
19
+ "User-Agent": USER_AGENT,
20
+ Accept: "application/json",
21
+ },
22
+ signal: controller.signal,
23
+ });
24
+ if (!res.ok) {
25
+ throw new Error(`Reddit API error (${res.status}): ${await res.text()}`);
26
+ }
27
+ return res.json();
28
+ }
29
+ finally {
30
+ clearTimeout(timer);
31
+ }
32
+ }
33
+ // --- Data cleaners (adapted from Jing-yilin/reddit-mcp) ---
34
+ function cleanPost(raw) {
35
+ if (!raw?.data)
36
+ return null;
37
+ const d = raw.data;
38
+ return {
39
+ id: d.id,
40
+ title: d.title,
41
+ subreddit: d.subreddit,
42
+ author: d.author,
43
+ score: d.score,
44
+ upvoteRatio: d.upvote_ratio,
45
+ comments: d.num_comments,
46
+ created: d.created_utc
47
+ ? new Date(d.created_utc * 1000).toISOString()
48
+ : null,
49
+ url: d.url,
50
+ permalink: `https://reddit.com${d.permalink}`,
51
+ selftext: d.selftext || undefined,
52
+ isVideo: d.is_video,
53
+ isSelf: d.is_self,
54
+ thumbnail: d.thumbnail !== "self" && d.thumbnail !== "default"
55
+ ? d.thumbnail
56
+ : undefined,
57
+ flair: d.link_flair_text || undefined,
58
+ awards: d.total_awards_received,
59
+ over18: d.over_18,
60
+ };
61
+ }
62
+ function cleanComment(raw, depth = 0) {
63
+ if (!raw?.data || raw.kind !== "t1")
64
+ return null;
65
+ const d = raw.data;
66
+ const replies = [];
67
+ if (d.replies?.data?.children) {
68
+ for (const child of d.replies.data.children) {
69
+ const cleaned = cleanComment(child, depth + 1);
70
+ if (cleaned)
71
+ replies.push(cleaned);
72
+ }
73
+ }
74
+ return {
75
+ id: d.id,
76
+ author: d.author,
77
+ body: d.body,
78
+ score: d.score,
79
+ created: d.created_utc
80
+ ? new Date(d.created_utc * 1000).toISOString()
81
+ : null,
82
+ depth,
83
+ edited: !!d.edited,
84
+ replies: replies.length > 0 ? replies : undefined,
85
+ };
86
+ }
87
+ function cleanUser(raw) {
88
+ if (!raw?.data)
89
+ return null;
90
+ const d = raw.data;
91
+ return {
92
+ id: d.id,
93
+ name: d.name,
94
+ created: d.created_utc
95
+ ? new Date(d.created_utc * 1000).toISOString()
96
+ : null,
97
+ linkKarma: d.link_karma,
98
+ commentKarma: d.comment_karma,
99
+ totalKarma: d.total_karma,
100
+ verified: d.verified,
101
+ hasVerifiedEmail: d.has_verified_email,
102
+ premium: d.is_gold,
103
+ isMod: d.is_mod,
104
+ iconUrl: d.icon_img?.split("?")[0],
105
+ description: d.subreddit?.public_description || undefined,
106
+ };
107
+ }
108
+ function cleanSubreddit(raw) {
109
+ if (!raw?.data)
110
+ return null;
111
+ const d = raw.data;
112
+ return {
113
+ id: d.id,
114
+ name: d.display_name,
115
+ title: d.title,
116
+ description: d.public_description,
117
+ subscribers: d.subscribers,
118
+ activeUsers: d.accounts_active,
119
+ created: d.created_utc
120
+ ? new Date(d.created_utc * 1000).toISOString()
121
+ : null,
122
+ over18: d.over18,
123
+ url: `https://reddit.com${d.url}`,
124
+ iconUrl: d.icon_img?.split("?")[0] || d.community_icon?.split("?")[0],
125
+ };
126
+ }
127
+ function cleanPostList(children) {
128
+ return Array.isArray(children)
129
+ ? children.map(cleanPost).filter(Boolean)
130
+ : [];
131
+ }
132
+ function cleanCommentList(children) {
133
+ return Array.isArray(children)
134
+ ? children
135
+ .filter((c) => c.kind === "t1")
136
+ .map((c) => cleanComment(c, 0))
137
+ .filter(Boolean)
138
+ : [];
139
+ }
140
+ // --- Action handlers ---
141
+ async function searchPosts(params) {
142
+ const query = params.query;
143
+ if (!query)
144
+ throw new Error("'query' is required for search_posts");
145
+ const reqParams = {
146
+ q: query,
147
+ sort: params.sort || "relevance",
148
+ t: params.time || "all",
149
+ limit: Math.min(params.limit || 10, 100),
150
+ raw_json: 1,
151
+ type: "link",
152
+ };
153
+ let endpoint = "/search.json";
154
+ if (params.subreddit) {
155
+ endpoint = `/r/${params.subreddit}/search.json`;
156
+ reqParams.restrict_sr = "on";
157
+ }
158
+ const data = await makeRequest(endpoint, reqParams);
159
+ return cleanPostList(data?.data?.children || []);
160
+ }
161
+ async function getSubredditPosts(params) {
162
+ const subreddit = params.subreddit;
163
+ if (!subreddit)
164
+ throw new Error("'subreddit' is required for get_subreddit_posts");
165
+ const sort = params.sort || "hot";
166
+ const reqParams = {
167
+ limit: Math.min(params.limit || 10, 100),
168
+ raw_json: 1,
169
+ };
170
+ if (sort === "top" && params.time)
171
+ reqParams.t = params.time;
172
+ const data = await makeRequest(`/r/${subreddit}/${sort}.json`, reqParams);
173
+ return cleanPostList(data?.data?.children || []);
174
+ }
175
+ async function getPostContent(params) {
176
+ const postId = params.post_id;
177
+ if (!postId)
178
+ throw new Error("'post_id' is required for get_post_content");
179
+ const reqParams = {
180
+ limit: params.comment_limit || 20,
181
+ depth: params.comment_depth || 3,
182
+ sort: params.sort || "confidence",
183
+ raw_json: 1,
184
+ };
185
+ let endpoint = `/comments/${postId}.json`;
186
+ if (params.subreddit) {
187
+ endpoint = `/r/${params.subreddit}/comments/${postId}.json`;
188
+ }
189
+ const data = await makeRequest(endpoint, reqParams);
190
+ const post = cleanPost(data?.[0]?.data?.children?.[0]);
191
+ const comments = cleanCommentList(data?.[1]?.data?.children || []);
192
+ return { post, comments };
193
+ }
194
+ async function getUserInfo(params) {
195
+ const username = params.username;
196
+ if (!username)
197
+ throw new Error("'username' is required for get_user_info");
198
+ const data = await makeRequest(`/user/${username}/about.json`, {
199
+ raw_json: 1,
200
+ });
201
+ return cleanUser(data);
202
+ }
203
+ async function getUserPosts(params) {
204
+ const username = params.username;
205
+ if (!username)
206
+ throw new Error("'username' is required for get_user_posts");
207
+ const reqParams = {
208
+ sort: params.sort || "new",
209
+ limit: Math.min(params.limit || 10, 100),
210
+ raw_json: 1,
211
+ type: "links",
212
+ };
213
+ if (params.time)
214
+ reqParams.t = params.time;
215
+ const data = await makeRequest(`/user/${username}/submitted.json`, reqParams);
216
+ return cleanPostList(data?.data?.children || []);
217
+ }
218
+ async function getUserComments(params) {
219
+ const username = params.username;
220
+ if (!username)
221
+ throw new Error("'username' is required for get_user_comments");
222
+ const reqParams = {
223
+ sort: params.sort || "new",
224
+ limit: Math.min(params.limit || 10, 100),
225
+ raw_json: 1,
226
+ type: "comments",
227
+ };
228
+ if (params.time)
229
+ reqParams.t = params.time;
230
+ const data = await makeRequest(`/user/${username}/comments.json`, reqParams);
231
+ const children = data?.data?.children || [];
232
+ return children
233
+ .filter((c) => c.kind === "t1" && c.data)
234
+ .map((c) => {
235
+ const d = c.data;
236
+ return {
237
+ id: d.id,
238
+ subreddit: d.subreddit,
239
+ postTitle: d.link_title,
240
+ author: d.author,
241
+ body: d.body,
242
+ score: d.score,
243
+ created: d.created_utc
244
+ ? new Date(d.created_utc * 1000).toISOString()
245
+ : null,
246
+ permalink: `https://reddit.com${d.permalink}`,
247
+ };
248
+ });
249
+ }
250
+ async function getSubredditInfo(params) {
251
+ const subreddit = params.subreddit;
252
+ if (!subreddit)
253
+ throw new Error("'subreddit' is required for get_subreddit_info");
254
+ const data = await makeRequest(`/r/${subreddit}/about.json`, {
255
+ raw_json: 1,
256
+ });
257
+ return cleanSubreddit(data);
258
+ }
259
+ // --- Compact encoder (token-efficient output, similar to TOON) ---
260
+ function encodeScalar(value) {
261
+ if (typeof value === "string")
262
+ return JSON.stringify(value);
263
+ return String(value);
264
+ }
265
+ function encodeValue(value, depth) {
266
+ if (value === null || value === undefined)
267
+ return "";
268
+ if (typeof value !== "object")
269
+ return encodeScalar(value);
270
+ const pad = " ".repeat(depth);
271
+ if (Array.isArray(value)) {
272
+ const sep = depth > 0 ? `\n${pad}---\n` : "\n---\n";
273
+ return value
274
+ .map((item) => encodeValue(item, depth))
275
+ .filter(Boolean)
276
+ .join(sep);
277
+ }
278
+ const lines = [];
279
+ for (const [k, v] of Object.entries(value)) {
280
+ if (v === null || v === undefined)
281
+ continue;
282
+ if (typeof v === "object") {
283
+ lines.push(`${pad}${k}:`);
284
+ lines.push(encodeValue(v, depth + 1));
285
+ }
286
+ else {
287
+ lines.push(`${pad}${k}:${encodeScalar(v)}`);
288
+ }
289
+ }
290
+ return lines.join("\n");
291
+ }
292
+ export function formatCompact(data) {
293
+ return encodeValue(data, 0);
294
+ }
295
+ // --- Public API ---
296
+ const actionHandlers = {
297
+ search_posts: searchPosts,
298
+ get_subreddit_posts: getSubredditPosts,
299
+ get_post_content: getPostContent,
300
+ get_user_info: getUserInfo,
301
+ get_user_posts: getUserPosts,
302
+ get_user_comments: getUserComments,
303
+ get_subreddit_info: getSubredditInfo,
304
+ };
305
+ export const REDDIT_ACTIONS = Object.keys(actionHandlers);
306
+ export async function executeRedditAction(action, params) {
307
+ const handler = actionHandlers[action];
308
+ if (!handler) {
309
+ throw new Error(`Unknown action: "${action}". Available: ${REDDIT_ACTIONS.join(", ")}`);
310
+ }
311
+ return handler(params);
312
+ }
313
+ // --- Fetch integration ---
314
+ const REDDIT_HOST_RE = /^(?:www\.|old\.|new\.|np\.)?reddit\.com$/;
315
+ export function isRedditUrl(url) {
316
+ try {
317
+ return REDDIT_HOST_RE.test(new URL(url).hostname);
318
+ }
319
+ catch {
320
+ return false;
321
+ }
322
+ }
323
+ export async function fetchRedditUrl(url) {
324
+ try {
325
+ const pathname = new URL(url).pathname.replace(/\/+$/, "");
326
+ const postMatch = pathname.match(/^\/r\/([^/]+)\/comments\/([^/]+)/);
327
+ if (postMatch) {
328
+ const data = await getPostContent({
329
+ subreddit: postMatch[1],
330
+ post_id: postMatch[2],
331
+ });
332
+ return { url, data, provider: "reddit" };
333
+ }
334
+ const subredditMatch = pathname.match(/^\/r\/([^/]+)$/);
335
+ if (subredditMatch) {
336
+ const [info, posts] = await Promise.all([
337
+ getSubredditInfo({ subreddit: subredditMatch[1] }),
338
+ getSubredditPosts({ subreddit: subredditMatch[1], limit: 10 }),
339
+ ]);
340
+ return { url, data: { subreddit: info, hotPosts: posts }, provider: "reddit" };
341
+ }
342
+ const userMatch = pathname.match(/^\/(?:user|u)\/([^/]+)/);
343
+ if (userMatch) {
344
+ const data = await getUserInfo({ username: userMatch[1] });
345
+ return { url, data, provider: "reddit" };
346
+ }
347
+ // Generic Reddit URL: append .json and return raw
348
+ const jsonUrl = url.replace(/\/?$/, ".json");
349
+ const raw = await makeRequest(new URL(jsonUrl).pathname, { raw_json: 1 });
350
+ return { url, data: raw, provider: "reddit" };
351
+ }
352
+ catch (err) {
353
+ const message = err instanceof Error ? err.message : String(err);
354
+ return { url, error: `Reddit fetch error: ${message}` };
355
+ }
356
+ }
357
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/tools/reddit/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerRedditTools(server: McpServer): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/reddit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAepE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmD3D"}
@@ -0,0 +1,51 @@
1
+ import { z } from "zod";
2
+ import { executeRedditAction, formatCompact } from "./client.js";
3
+ const REDDIT_API_SPEC = `Actions (* = required param):
4
+ - search_posts — Search posts by keyword. query*, subreddit, sort(relevance|hot|top|new|comments), time, limit
5
+ - get_subreddit_posts — Browse subreddit. subreddit*, sort(hot|new|top), time, limit
6
+ - get_post_content — Post with comments. post_id*, subreddit, sort(confidence|top|new|controversial|old|qa), comment_limit, comment_depth
7
+ - get_user_info — User profile. username*
8
+ - get_user_posts — User submissions. username*, sort(hot|new|top|controversial), time, limit
9
+ - get_user_comments — User comments. username*, sort(hot|new|top|controversial), time, limit
10
+ - get_subreddit_info — Subreddit metadata. subreddit*
11
+ time: hour|day|week|month|year|all`;
12
+ export function registerRedditTools(server) {
13
+ server.tool("social_media_search_help", "Get the API spec for searching and browsing social media in detail. Call this before using search_social_media.", {
14
+ platform: z
15
+ .enum(["reddit"])
16
+ .describe("Target platform"),
17
+ }, async ({ platform }) => {
18
+ if (platform === "reddit") {
19
+ return { content: [{ type: "text", text: REDDIT_API_SPEC }] };
20
+ }
21
+ return {
22
+ content: [{ type: "text", text: `Unsupported platform: "${platform}"` }],
23
+ isError: true,
24
+ };
25
+ });
26
+ server.tool("search_social_media", "Execute a social media search or data retrieval action. Call social_media_search_help first to get available actions and params for the target platform.", {
27
+ platform: z.enum(["reddit"]).describe("Target platform"),
28
+ action: z.string().describe("Action name from social_media_search_help"),
29
+ params: z
30
+ .record(z.any())
31
+ .optional()
32
+ .describe("Action parameters — see social_media_search_help"),
33
+ }, async ({ platform, action, params }) => {
34
+ try {
35
+ const data = await executeRedditAction(action, (params && typeof params === "object" && !Array.isArray(params))
36
+ ? params
37
+ : {});
38
+ return {
39
+ content: [{ type: "text", text: formatCompact(data) }],
40
+ };
41
+ }
42
+ catch (err) {
43
+ const message = err instanceof Error ? err.message : String(err);
44
+ return {
45
+ content: [{ type: "text", text: message }],
46
+ isError: true,
47
+ };
48
+ }
49
+ });
50
+ }
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/reddit/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjE,MAAM,eAAe,GAAG;;;;;;;;mCAQW,CAAC;AAEpC,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,IAAI,CACT,0BAA0B,EAC1B,iHAAiH,EACjH;QACE,QAAQ,EAAE,CAAC;aACR,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;aAChB,QAAQ,CAAC,iBAAiB,CAAC;KAC/B,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAuB,EAAE;QAC1C,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QACD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,QAAQ,GAAG,EAAE,CAAC;YACxE,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,0JAA0J,EAC1J;QACE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QACxD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QACxE,MAAM,EAAE,CAAC;aACN,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;aACf,QAAQ,EAAE;aACV,QAAQ,CAAC,kDAAkD,CAAC;KAChE,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,EAAuB,EAAE;QAC1D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,mBAAmB,CACpC,MAAM,EACN,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC9D,CAAC,CAAC,MAA6B;gBAC/B,CAAC,CAAC,EAAE,CACP,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;aACvD,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBAC1C,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerSearchTool(server: McpServer): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/search/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAoBpE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAY1D"}
@@ -0,0 +1,23 @@
1
+ import { z } from "zod";
2
+ import { runWithFallback } from "../../core/runner.js";
3
+ import { braveSearch } from "./providers/brave.js";
4
+ import { exaSearch } from "./providers/exa.js";
5
+ const providerMap = {
6
+ brave: braveSearch,
7
+ exa: exaSearch,
8
+ };
9
+ const defaultOrder = ["brave", "exa"];
10
+ function getProviders() {
11
+ const env = process.env.SEARCH_PROVIDERS;
12
+ const order = env ? env.split(",").map((s) => s.trim()) : defaultOrder;
13
+ return order.map((name) => providerMap[name]).filter(Boolean);
14
+ }
15
+ export function registerSearchTool(server) {
16
+ server.tool("search", "Search the web and return relevant results.", {
17
+ query: z.string().describe("Search query"),
18
+ maxResults: z.number().int().min(1).max(100).default(10).describe("Number of results to return"),
19
+ }, async ({ query, maxResults }) => {
20
+ return runWithFallback(getProviders(), { query, maxResults });
21
+ });
22
+ }
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/search/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,WAAW,GAA6E;IAC5F,KAAK,EAAE,WAAW;IAClB,GAAG,EAAE,SAAS;CACf,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAEtC,SAAS,YAAY;IACnB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACzC,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IACvE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,IAAI,CACT,QAAQ,EACR,6CAA6C,EAC7C;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC1C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KACjG,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE;QAC9B,OAAO,eAAe,CAAC,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IAChE,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Provider } from "../../../core/provider.js";
2
+ interface SearchInput {
3
+ query: string;
4
+ maxResults: number;
5
+ }
6
+ export declare const braveSearch: Provider<SearchInput, unknown>;
7
+ export {};
8
+ //# sourceMappingURL=brave.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brave.d.ts","sourceRoot":"","sources":["../../../../src/tools/search/providers/brave.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAoB,MAAM,2BAA2B,CAAC;AAEvE,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AA0BD,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CA4BtD,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { resolveRateLimit } from "../../../core/provider.js";
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
3
+ function clean(raw) {
4
+ const web = (raw.web?.results ?? []).map((r) => ({
5
+ title: r.title,
6
+ url: r.url,
7
+ description: r.description,
8
+ age: r.age,
9
+ }));
10
+ const videos = (raw.videos?.results ?? []).map((r) => ({
11
+ title: r.title,
12
+ url: r.url,
13
+ description: r.description,
14
+ age: r.age,
15
+ duration: r.video?.duration,
16
+ }));
17
+ return {
18
+ query: raw.query?.original,
19
+ web,
20
+ ...(videos.length > 0 && { videos }),
21
+ };
22
+ }
23
+ export const braveSearch = {
24
+ name: "brave",
25
+ envKey: "BRAVE_API_KEY",
26
+ rateLimit: resolveRateLimit("BRAVE_SEARCH_RATE_LIMIT", { requests: 1, window: 1000 }),
27
+ async execute({ query, maxResults }) {
28
+ const apiKey = process.env.BRAVE_API_KEY;
29
+ const url = new URL("https://api.search.brave.com/res/v1/web/search");
30
+ url.searchParams.set("q", query);
31
+ url.searchParams.set("count", String(Math.min(maxResults, 20)));
32
+ const res = await fetch(url, {
33
+ headers: {
34
+ "Accept": "application/json",
35
+ "X-Subscription-Token": apiKey,
36
+ },
37
+ });
38
+ if (!res.ok) {
39
+ throw new Error(`Brave API error: ${res.status} ${await res.text()}`);
40
+ }
41
+ return clean(await res.json());
42
+ },
43
+ isAvailable() {
44
+ return !!process.env.BRAVE_API_KEY;
45
+ },
46
+ };
47
+ //# sourceMappingURL=brave.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brave.js","sourceRoot":"","sources":["../../../../src/tools/search/providers/brave.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAOvE,uDAAuD;AACvD,SAAS,KAAK,CAAC,GAAQ;IACrB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QACpD,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,GAAG,EAAE,CAAC,CAAC,GAAG;KACX,CAAC,CAAC,CAAC;IAEJ,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;QAC1D,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ;KAC5B,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ;QAC1B,GAAG;QACH,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;KACrC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAmC;IACzD,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,eAAe;IACvB,SAAS,EAAE,gBAAgB,CAAC,yBAAyB,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAErF,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE;QACjC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAc,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,gDAAgD,CAAC,CAAC;QACtE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACjC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAEhE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,OAAO,EAAE;gBACP,QAAQ,EAAE,kBAAkB;gBAC5B,sBAAsB,EAAE,MAAM;aAC/B;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,oBAAoB,GAAG,CAAC,MAAM,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,WAAW;QACT,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IACrC,CAAC;CACF,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Provider } from "../../../core/provider.js";
2
+ interface SearchInput {
3
+ query: string;
4
+ maxResults: number;
5
+ }
6
+ export declare const exaSearch: Provider<SearchInput, unknown>;
7
+ export {};
8
+ //# sourceMappingURL=exa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exa.d.ts","sourceRoot":"","sources":["../../../../src/tools/search/providers/exa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAoB,MAAM,2BAA2B,CAAC;AAEvE,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,SAAS,EAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CA+BpD,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { resolveRateLimit } from "../../../core/provider.js";
2
+ export const exaSearch = {
3
+ name: "exa",
4
+ envKey: "EXA_API_KEY",
5
+ rateLimit: resolveRateLimit("EXA_SEARCH_RATE_LIMIT", { requests: 10, window: 1000 }),
6
+ async execute({ query, maxResults }) {
7
+ const apiKey = process.env.EXA_API_KEY;
8
+ const res = await fetch("https://api.exa.ai/search", {
9
+ method: "POST",
10
+ headers: {
11
+ "x-api-key": apiKey,
12
+ "Content-Type": "application/json",
13
+ },
14
+ body: JSON.stringify({
15
+ query,
16
+ numResults: Math.min(maxResults, 100),
17
+ type: "auto",
18
+ }),
19
+ });
20
+ if (!res.ok) {
21
+ throw new Error(`Exa API error: ${res.status} ${await res.text()}`);
22
+ }
23
+ return res.json();
24
+ },
25
+ isAvailable() {
26
+ return !!process.env.EXA_API_KEY;
27
+ },
28
+ };
29
+ //# sourceMappingURL=exa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exa.js","sourceRoot":"","sources":["../../../../src/tools/search/providers/exa.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAOvE,MAAM,CAAC,MAAM,SAAS,GAAmC;IACvD,IAAI,EAAE,KAAK;IACX,MAAM,EAAE,aAAa;IACrB,SAAS,EAAE,gBAAgB,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAEpF,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE;QACjC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAY,CAAC;QAExC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,2BAA2B,EAAE;YACnD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,WAAW,EAAE,MAAM;gBACnB,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK;gBACL,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC;gBACrC,IAAI,EAAE,MAAM;aACb,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,CAAC,MAAM,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAED,WAAW;QACT,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACnC,CAAC;CACF,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface ToolResult {
2
+ [key: string]: unknown;
3
+ content: Array<{
4
+ type: "text";
5
+ text: string;
6
+ }>;
7
+ isError?: boolean;
8
+ }
9
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
package/build/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}