@decodo/mcp-server 1.0.2 → 1.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.
- package/README.md +80 -43
- package/build/clients/scraper-api-client.js +78 -16
- package/build/clients/scraper-api-client.js.map +1 -1
- package/build/constants.js +35 -1
- package/build/constants.js.map +1 -1
- package/build/index.js +10 -11
- package/build/index.js.map +1 -1
- package/build/server/sapi-base-server.js +76 -0
- package/build/server/sapi-base-server.js.map +1 -0
- package/build/server/sapi-http-server.js +11 -0
- package/build/server/sapi-http-server.js.map +1 -0
- package/build/server/sapi-stdio-server.js +11 -0
- package/build/server/sapi-stdio-server.js.map +1 -0
- package/build/server.js +53 -0
- package/build/server.js.map +1 -0
- package/build/tools/amazon-bestsellers/amazon-bestsellers-tool.js +55 -0
- package/build/tools/amazon-bestsellers/amazon-bestsellers-tool.js.map +1 -0
- package/build/tools/amazon-bestsellers/index.js +18 -0
- package/build/tools/amazon-bestsellers/index.js.map +1 -0
- package/build/tools/amazon-pricing/amazon-pricing-tool.js +67 -0
- package/build/tools/amazon-pricing/amazon-pricing-tool.js.map +1 -0
- package/build/tools/amazon-pricing/index.js +18 -0
- package/build/tools/amazon-pricing/index.js.map +1 -0
- package/build/tools/amazon-product/amazon-product-tool.js +62 -0
- package/build/tools/amazon-product/amazon-product-tool.js.map +1 -0
- package/build/tools/amazon-product/index.js +18 -0
- package/build/tools/amazon-product/index.js.map +1 -0
- package/build/tools/amazon-search/amazon-search-tool.js +63 -0
- package/build/tools/amazon-search/amazon-search-tool.js.map +1 -0
- package/build/tools/amazon-search/index.js +18 -0
- package/build/tools/amazon-search/index.js.map +1 -0
- package/build/tools/amazon-search-parsed/amazon-search-parsed-tool.js +53 -0
- package/build/tools/amazon-search-parsed/amazon-search-parsed-tool.js.map +1 -0
- package/build/tools/amazon-search-parsed/index.js +18 -0
- package/build/tools/amazon-search-parsed/index.js.map +1 -0
- package/build/tools/amazon-search-parsed-tool.js +8 -2
- package/build/tools/amazon-search-parsed-tool.js.map +1 -1
- package/build/tools/amazon-sellers/amazon-sellers-tool.js +56 -0
- package/build/tools/amazon-sellers/amazon-sellers-tool.js.map +1 -0
- package/build/tools/amazon-sellers/index.js +18 -0
- package/build/tools/amazon-sellers/index.js.map +1 -0
- package/build/tools/bing-search/bing-search-tool.js +64 -0
- package/build/tools/bing-search/bing-search-tool.js.map +1 -0
- package/build/tools/bing-search/index.js +18 -0
- package/build/tools/bing-search/index.js.map +1 -0
- package/build/tools/chatgpt/chatgpt-tool.js +47 -0
- package/build/tools/chatgpt/chatgpt-tool.js.map +1 -0
- package/build/tools/chatgpt/index.js +18 -0
- package/build/tools/chatgpt/index.js.map +1 -0
- package/build/tools/chatgpt-tool.js +43 -0
- package/build/tools/chatgpt-tool.js.map +1 -0
- package/build/tools/constants.js +23 -0
- package/build/tools/constants.js.map +1 -0
- package/build/tools/google-ads/google-ads-tool.js +59 -0
- package/build/tools/google-ads/google-ads-tool.js.map +1 -0
- package/build/tools/google-ads/index.js +18 -0
- package/build/tools/google-ads/index.js.map +1 -0
- package/build/tools/google-ai-mode/google-ai-mode-tool.js +50 -0
- package/build/tools/google-ai-mode/google-ai-mode-tool.js.map +1 -0
- package/build/tools/google-ai-mode/index.js +18 -0
- package/build/tools/google-ai-mode/index.js.map +1 -0
- package/build/tools/google-lens/google-lens-tool.js +52 -0
- package/build/tools/google-lens/google-lens-tool.js.map +1 -0
- package/build/tools/google-lens/index.js +18 -0
- package/build/tools/google-lens/index.js.map +1 -0
- package/build/tools/google-search/google-search-tool.js +60 -0
- package/build/tools/google-search/google-search-tool.js.map +1 -0
- package/build/tools/google-search/index.js +18 -0
- package/build/tools/google-search/index.js.map +1 -0
- package/build/tools/google-search-parsed/google-search-parsed-tool.js +61 -0
- package/build/tools/google-search-parsed/google-search-parsed-tool.js.map +1 -0
- package/build/tools/google-search-parsed/index.js +18 -0
- package/build/tools/google-search-parsed/index.js.map +1 -0
- package/build/tools/google-search-parsed-tool.js +8 -2
- package/build/tools/google-search-parsed-tool.js.map +1 -1
- package/build/tools/google-travel-hotels/google-travel-hotels-tool.js +52 -0
- package/build/tools/google-travel-hotels/google-travel-hotels-tool.js.map +1 -0
- package/build/tools/google-travel-hotels/index.js +18 -0
- package/build/tools/google-travel-hotels/index.js.map +1 -0
- package/build/tools/index.js +30 -5
- package/build/tools/index.js.map +1 -1
- package/build/tools/perplexity/index.js +18 -0
- package/build/tools/perplexity/index.js.map +1 -0
- package/build/tools/perplexity/perplexity-tool.js +46 -0
- package/build/tools/perplexity/perplexity-tool.js.map +1 -0
- package/build/tools/perplexity-tool.js +42 -0
- package/build/tools/perplexity-tool.js.map +1 -0
- package/build/tools/reddit-post/index.js +18 -0
- package/build/tools/reddit-post/index.js.map +1 -0
- package/build/tools/reddit-post/reddit-post-tool.js +51 -0
- package/build/tools/reddit-post/reddit-post-tool.js.map +1 -0
- package/build/tools/reddit-post-tool.js +8 -2
- package/build/tools/reddit-post-tool.js.map +1 -1
- package/build/tools/reddit-subreddit/index.js +18 -0
- package/build/tools/reddit-subreddit/index.js.map +1 -0
- package/build/tools/reddit-subreddit/reddit-subreddit-tool.js +49 -0
- package/build/tools/reddit-subreddit/reddit-subreddit-tool.js.map +1 -0
- package/build/tools/reddit-subreddit-tool.js +8 -2
- package/build/tools/reddit-subreddit-tool.js.map +1 -1
- package/build/tools/reddit-user/index.js +18 -0
- package/build/tools/reddit-user/index.js.map +1 -0
- package/build/tools/reddit-user/reddit-user-tool.js +55 -0
- package/build/tools/reddit-user/reddit-user-tool.js.map +1 -0
- package/build/tools/scrape-as-markdown/index.js +18 -0
- package/build/tools/scrape-as-markdown/index.js.map +1 -0
- package/build/tools/scrape-as-markdown/scrape-as-markdown-tool.js +79 -0
- package/build/tools/scrape-as-markdown/scrape-as-markdown-tool.js.map +1 -0
- package/build/tools/scrape-as-markdown-tool.js +28 -20
- package/build/tools/scrape-as-markdown-tool.js.map +1 -1
- package/build/tools/screenshot/index.js +18 -0
- package/build/tools/screenshot/index.js.map +1 -0
- package/build/tools/screenshot/screenshot-tool.js +48 -0
- package/build/tools/screenshot/screenshot-tool.js.map +1 -0
- package/build/tools/screenshot-tool.js +44 -0
- package/build/tools/screenshot-tool.js.map +1 -0
- package/build/tools/target-product/index.js +18 -0
- package/build/tools/target-product/index.js.map +1 -0
- package/build/tools/target-product/target-product-tool.js +50 -0
- package/build/tools/target-product/target-product-tool.js.map +1 -0
- package/build/tools/target-search/index.js +18 -0
- package/build/tools/target-search/index.js.map +1 -0
- package/build/tools/target-search/target-search-tool.js +56 -0
- package/build/tools/target-search/target-search-tool.js.map +1 -0
- package/build/tools/tiktok-post/index.js +18 -0
- package/build/tools/tiktok-post/index.js.map +1 -0
- package/build/tools/tiktok-post/tiktok-post-tool.js +48 -0
- package/build/tools/tiktok-post/tiktok-post-tool.js.map +1 -0
- package/build/tools/tiktok-shop-product/index.js +18 -0
- package/build/tools/tiktok-shop-product/index.js.map +1 -0
- package/build/tools/tiktok-shop-product/tiktok-shop-product-tool.js +47 -0
- package/build/tools/tiktok-shop-product/tiktok-shop-product-tool.js.map +1 -0
- package/build/tools/tiktok-shop-search/index.js +18 -0
- package/build/tools/tiktok-shop-search/index.js.map +1 -0
- package/build/tools/tiktok-shop-search/tiktok-shop-search-tool.js +54 -0
- package/build/tools/tiktok-shop-search/tiktok-shop-search-tool.js.map +1 -0
- package/build/tools/tiktok-shop-url/index.js +18 -0
- package/build/tools/tiktok-shop-url/index.js.map +1 -0
- package/build/tools/tiktok-shop-url/tiktok-shop-url-tool.js +45 -0
- package/build/tools/tiktok-shop-url/tiktok-shop-url-tool.js.map +1 -0
- package/build/tools/tool.js +7 -0
- package/build/tools/tool.js.map +1 -0
- package/build/tools/walmart-product/index.js +18 -0
- package/build/tools/walmart-product/index.js.map +1 -0
- package/build/tools/walmart-product/walmart-product-tool.js +61 -0
- package/build/tools/walmart-product/walmart-product-tool.js.map +1 -0
- package/build/tools/walmart-search/index.js +18 -0
- package/build/tools/walmart-search/index.js.map +1 -0
- package/build/tools/walmart-search/walmart-search-tool.js +62 -0
- package/build/tools/walmart-search/walmart-search-tool.js.map +1 -0
- package/build/tools/youtube-channel/index.js +18 -0
- package/build/tools/youtube-channel/index.js.map +1 -0
- package/build/tools/youtube-channel/youtube-channel-tool.js +48 -0
- package/build/tools/youtube-channel/youtube-channel-tool.js.map +1 -0
- package/build/tools/youtube-metadata/index.js +18 -0
- package/build/tools/youtube-metadata/index.js.map +1 -0
- package/build/tools/youtube-metadata/youtube-metadata-tool.js +43 -0
- package/build/tools/youtube-metadata/youtube-metadata-tool.js.map +1 -0
- package/build/tools/youtube-search/index.js +18 -0
- package/build/tools/youtube-search/index.js.map +1 -0
- package/build/tools/youtube-search/youtube-search-tool.js +43 -0
- package/build/tools/youtube-search/youtube-search-tool.js.map +1 -0
- package/build/tools/youtube-subtitles/index.js +18 -0
- package/build/tools/youtube-subtitles/index.js.map +1 -0
- package/build/tools/youtube-subtitles/youtube-subtitles-tool.js +48 -0
- package/build/tools/youtube-subtitles/youtube-subtitles-tool.js.map +1 -0
- package/build/tools/youtube-video/index.js +18 -0
- package/build/tools/youtube-video/index.js.map +1 -0
- package/build/tools/youtube-video/youtube-video-tool.js +45 -0
- package/build/tools/youtube-video/youtube-video-tool.js.map +1 -0
- package/build/utils.js +14 -3
- package/build/utils.js.map +1 -1
- package/build/zod/zod-types.js +12 -4
- package/build/zod/zod-types.js.map +1 -1
- package/package.json +26 -13
- package/build/tools/scrape-tool.js +0 -70
- package/build/tools/scrape-tool.js.map +0 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./youtube-video-tool"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/youtube-video/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.YoutubeVideoTool = void 0;
|
|
7
|
+
const zod_1 = __importDefault(require("zod"));
|
|
8
|
+
const constants_1 = require("../../constants");
|
|
9
|
+
const zod_types_1 = require("../../zod/zod-types");
|
|
10
|
+
const tool_1 = require("../tool");
|
|
11
|
+
class YoutubeVideoTool extends tool_1.Tool {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.toolset = constants_1.TOOLSET.SOCIAL_MEDIA;
|
|
15
|
+
this.transformResponse = ({ data }) => {
|
|
16
|
+
return { data: JSON.stringify(data) };
|
|
17
|
+
};
|
|
18
|
+
this.register = ({ server, sapiClient, auth }) => {
|
|
19
|
+
server.registerTool('youtube_video', {
|
|
20
|
+
description: 'Scrape YouTube video information',
|
|
21
|
+
inputSchema: {
|
|
22
|
+
query: zod_1.default.string().describe('YouTube video ID (e.g., "6Ejga4kJUts")'),
|
|
23
|
+
geo: zod_types_1.zodGeo,
|
|
24
|
+
},
|
|
25
|
+
annotations: {
|
|
26
|
+
readOnlyHint: true,
|
|
27
|
+
openWorldHint: true,
|
|
28
|
+
},
|
|
29
|
+
}, async (scrapingParams) => {
|
|
30
|
+
const params = Object.assign(Object.assign({}, scrapingParams), { target: constants_1.SCRAPER_API_TARGETS.YOUTUBE_VIDEO });
|
|
31
|
+
const { data } = await sapiClient.scrape({ auth, scrapingParams: params });
|
|
32
|
+
return {
|
|
33
|
+
content: [
|
|
34
|
+
{
|
|
35
|
+
type: 'text',
|
|
36
|
+
text: JSON.stringify(data),
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.YoutubeVideoTool = YoutubeVideoTool;
|
|
45
|
+
//# sourceMappingURL=youtube-video-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"youtube-video-tool.js","sourceRoot":"","sources":["../../../src/tools/youtube-video/youtube-video-tool.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAoB;AAEpB,+CAA+D;AAC/D,mDAA6C;AAC7C,kCAAqD;AAErD,MAAa,gBAAiB,SAAQ,WAAI;IAA1C;;QACE,YAAO,GAAG,mBAAO,CAAC,YAAY,CAAC;QAE/B,sBAAiB,GAAG,CAAC,EAAE,IAAI,EAAoB,EAAE,EAAE;YACjD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,CAAC,CAAC;QAEF,aAAQ,GAAG,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAwB,EAAE,EAAE;YAChE,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;gBACE,WAAW,EAAE,kCAAkC;gBAC/C,WAAW,EAAE;oBACX,KAAK,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;oBACpE,GAAG,EAAE,kBAAM;iBACZ;gBACD,WAAW,EAAE;oBACX,YAAY,EAAE,IAAI;oBAClB,aAAa,EAAE,IAAI;iBACpB;aACF,EACD,KAAK,EAAE,cAAiC,EAAE,EAAE;gBAC1C,MAAM,MAAM,GAAG,gCACV,cAAc,KACjB,MAAM,EAAE,+BAAmB,CAAC,aAAa,GACf,CAAC;gBAE7B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,UAAU,CAAC,MAAM,CAAS,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC;gBAEnF,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;yBAC3B;qBACF;iBACF,CAAC;YACJ,CAAC,CACF,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;CAAA;AAxCD,4CAwCC"}
|
package/build/utils.js
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.removeKeyFromNestedObject = void 0;
|
|
3
|
+
exports.removeKeyFromNestedObject = exports.resolveToolsets = void 0;
|
|
4
|
+
const resolveToolsets = (toolsets) => {
|
|
5
|
+
if (!(toolsets === null || toolsets === void 0 ? void 0 : toolsets.trim())) {
|
|
6
|
+
return [];
|
|
7
|
+
}
|
|
8
|
+
return toolsets
|
|
9
|
+
.split(',')
|
|
10
|
+
.map(s => s.trim())
|
|
11
|
+
.filter(Boolean);
|
|
12
|
+
};
|
|
13
|
+
exports.resolveToolsets = resolveToolsets;
|
|
4
14
|
const removeKeyFromNestedObject = ({ obj, keyToRemove, }) => {
|
|
5
15
|
if (typeof obj !== 'object' || obj === null) {
|
|
6
16
|
return obj;
|
|
@@ -8,12 +18,13 @@ const removeKeyFromNestedObject = ({ obj, keyToRemove, }) => {
|
|
|
8
18
|
if (Array.isArray(obj)) {
|
|
9
19
|
return obj.map(item => (0, exports.removeKeyFromNestedObject)({ obj: item, keyToRemove }));
|
|
10
20
|
}
|
|
21
|
+
const record = obj;
|
|
11
22
|
const newObj = {};
|
|
12
|
-
for (const key in
|
|
23
|
+
for (const key in record) {
|
|
13
24
|
if (key === keyToRemove) {
|
|
14
25
|
continue;
|
|
15
26
|
}
|
|
16
|
-
newObj[key] = (0, exports.removeKeyFromNestedObject)({ obj:
|
|
27
|
+
newObj[key] = (0, exports.removeKeyFromNestedObject)({ obj: record[key], keyToRemove });
|
|
17
28
|
}
|
|
18
29
|
return newObj;
|
|
19
30
|
};
|
package/build/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAEO,MAAM,eAAe,GAAG,CAAC,QAAiB,EAAa,EAAE;IAC9D,IAAI,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,EAAE,CAAA,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,QAAQ;SACZ,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SAClB,MAAM,CAAC,OAAO,CAAc,CAAC;AAClC,CAAC,CAAC;AATW,QAAA,eAAe,mBAS1B;AAEK,MAAM,yBAAyB,GAAG,CAAC,EACxC,GAAG,EACH,WAAW,GAIZ,EAAU,EAAE;IACX,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAA,iCAAyB,EAAC,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,MAAM,GAAG,GAA8B,CAAC;IAC9C,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,GAAG,IAAA,iCAAyB,EAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAW,EAAE,WAAW,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AA3BW,QAAA,yBAAyB,6BA2BpC"}
|
package/build/zod/zod-types.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.zodDeviceType = exports.zodCountry = exports.zodTokenLimit = exports.zodXhr = exports.zodJsRender = exports.zodLocale = exports.zodGeo = void 0;
|
|
7
7
|
const zod_1 = __importDefault(require("zod"));
|
|
8
8
|
exports.zodGeo = zod_1.default
|
|
9
9
|
.string()
|
|
@@ -14,12 +14,20 @@ exports.zodJsRender = zod_1.default
|
|
|
14
14
|
.boolean()
|
|
15
15
|
.describe('Should the request be opened in a headless browser, false by default')
|
|
16
16
|
.optional();
|
|
17
|
+
exports.zodXhr = zod_1.default
|
|
18
|
+
.boolean()
|
|
19
|
+
.describe('When true, includes XHR/fetch responses in the scrape result where supported by the target')
|
|
20
|
+
.optional();
|
|
17
21
|
exports.zodTokenLimit = zod_1.default
|
|
18
22
|
.number()
|
|
19
23
|
.describe(`The number of tokens to return in the response - anything above this limit will be truncated`)
|
|
20
24
|
.optional();
|
|
21
|
-
exports.
|
|
22
|
-
.
|
|
23
|
-
.describe(
|
|
25
|
+
exports.zodCountry = zod_1.default
|
|
26
|
+
.string()
|
|
27
|
+
.describe('Country code for the request (e.g., US, GB, DE)')
|
|
28
|
+
.optional();
|
|
29
|
+
exports.zodDeviceType = zod_1.default
|
|
30
|
+
.enum(['desktop', 'mobile', 'tablet'])
|
|
31
|
+
.describe('Device type to emulate for the request')
|
|
24
32
|
.optional();
|
|
25
33
|
//# sourceMappingURL=zod-types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zod-types.js","sourceRoot":"","sources":["../../src/zod/zod-types.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAoB;AAEP,QAAA,MAAM,GAAG,aAAC;KACpB,MAAM,EAAE;KACR,QAAQ,CAAC,iEAAiE,CAAC;KAC3E,QAAQ,EAAE,CAAC;AAED,QAAA,SAAS,GAAG,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC,QAAQ,EAAE,CAAC;AAE5E,QAAA,WAAW,GAAG,aAAC;KACzB,OAAO,EAAE;KACT,QAAQ,CAAC,sEAAsE,CAAC;KAChF,QAAQ,EAAE,CAAC;AAED,QAAA,aAAa,GAAG,aAAC;KAC3B,MAAM,EAAE;KACR,QAAQ,CACP,8FAA8F,CAC/F;KACA,QAAQ,EAAE,CAAC;AAED,QAAA,
|
|
1
|
+
{"version":3,"file":"zod-types.js","sourceRoot":"","sources":["../../src/zod/zod-types.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAoB;AAEP,QAAA,MAAM,GAAG,aAAC;KACpB,MAAM,EAAE;KACR,QAAQ,CAAC,iEAAiE,CAAC;KAC3E,QAAQ,EAAE,CAAC;AAED,QAAA,SAAS,GAAG,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC,QAAQ,EAAE,CAAC;AAE5E,QAAA,WAAW,GAAG,aAAC;KACzB,OAAO,EAAE;KACT,QAAQ,CAAC,sEAAsE,CAAC;KAChF,QAAQ,EAAE,CAAC;AAED,QAAA,MAAM,GAAG,aAAC;KACpB,OAAO,EAAE;KACT,QAAQ,CACP,4FAA4F,CAC7F;KACA,QAAQ,EAAE,CAAC;AAED,QAAA,aAAa,GAAG,aAAC;KAC3B,MAAM,EAAE;KACR,QAAQ,CACP,8FAA8F,CAC/F;KACA,QAAQ,EAAE,CAAC;AAED,QAAA,UAAU,GAAG,aAAC;KACxB,MAAM,EAAE;KACR,QAAQ,CAAC,iDAAiD,CAAC;KAC3D,QAAQ,EAAE,CAAC;AAED,QAAA,aAAa,GAAG,aAAC;KAC3B,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;KACrC,QAAQ,CAAC,wCAAwC,CAAC;KAClD,QAAQ,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@decodo/mcp-server",
|
|
3
|
-
"version": "1.0
|
|
4
|
-
"description": "",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "[](https://discord.gg/Ja8dqKgvbZ) [](https://cursor.com/en-US/install-mcp?name=Decodo&config=eyJ1cmwiOiJodHRwczovL21jcC5kZWNvZG8uY29tL21jcCIsImhlYWRlcnMiOnsiQXV0aG9yaXphdGlvbiI6IkJhc2ljIDx3ZWJfYWR2YW5jZWRfdG9rZW4%2BIn19) [](https://smithery.ai/server/@Decodo/decodo-mcp-server)",
|
|
5
5
|
"bin": {
|
|
6
|
-
"decodo-mcp": "
|
|
6
|
+
"decodo-mcp": "build/index.js"
|
|
7
7
|
},
|
|
8
8
|
"main": "index.js",
|
|
9
|
-
"mcpName": "io.github.Decodo/
|
|
9
|
+
"mcpName": "io.github.Decodo/mcp-web-scraper",
|
|
10
10
|
"scripts": {
|
|
11
|
-
"build": "tsc && chmod 755 build/
|
|
12
|
-
"dev": "
|
|
13
|
-
"
|
|
11
|
+
"build": "tsc && chmod 755 build/server.js",
|
|
12
|
+
"dev": "nodemon --watch src -e ts --exec 'tsx src/server.ts'",
|
|
13
|
+
"start": "node build/server.js",
|
|
14
|
+
"inspect": "mcp-inspector",
|
|
15
|
+
"test": "jest",
|
|
16
|
+
"lint": "eslint src/"
|
|
14
17
|
},
|
|
15
18
|
"keywords": [],
|
|
16
19
|
"author": "",
|
|
@@ -18,20 +21,30 @@
|
|
|
18
21
|
"files": [
|
|
19
22
|
"build"
|
|
20
23
|
],
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"@modelcontextprotocol/sdk": "^1.12.3",
|
|
26
|
+
"axios": "^1.15.0",
|
|
27
|
+
"dotenv": "^16.5.0",
|
|
28
|
+
"node-html-markdown": "^1.3.0",
|
|
29
|
+
"tsx": "^4.21.0"
|
|
30
|
+
},
|
|
21
31
|
"devDependencies": {
|
|
22
|
-
"@
|
|
32
|
+
"@eslint/js": "^10.0.1",
|
|
33
|
+
"@modelcontextprotocol/inspector": "^0.21.1",
|
|
34
|
+
"@types/express": "^5.0.1",
|
|
23
35
|
"@types/jest": "^30.0.0",
|
|
24
36
|
"@types/node": "^24.0.0",
|
|
37
|
+
"eslint": "^10.2.1",
|
|
25
38
|
"jest": "^30.0.0",
|
|
26
39
|
"mcps-logger": "^1.0.0",
|
|
40
|
+
"nodemon": "^3.1.14",
|
|
27
41
|
"ts-jest": "^29.4.0",
|
|
28
42
|
"typescript": "^5.8.3",
|
|
43
|
+
"typescript-eslint": "^8.58.2",
|
|
29
44
|
"zod": "^3.25.57"
|
|
30
45
|
},
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"dotenv": "^16.5.0",
|
|
35
|
-
"node-html-markdown": "^1.3.0"
|
|
46
|
+
"repository": {
|
|
47
|
+
"type": "git",
|
|
48
|
+
"url": "git@github.com-dcd:Decodo/mcp-server.git"
|
|
36
49
|
}
|
|
37
50
|
}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
var _a;
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.ScrapeTool = void 0;
|
|
8
|
-
const zod_1 = __importDefault(require("zod"));
|
|
9
|
-
const node_html_markdown_1 = require("node-html-markdown");
|
|
10
|
-
const zod_types_1 = require("../zod/zod-types");
|
|
11
|
-
class ScrapeTool {
|
|
12
|
-
}
|
|
13
|
-
exports.ScrapeTool = ScrapeTool;
|
|
14
|
-
_a = ScrapeTool;
|
|
15
|
-
ScrapeTool.LARGE_CONTENT_SYMBOL_COUNT = 10000;
|
|
16
|
-
ScrapeTool.isResponseOverLimit = (content) => {
|
|
17
|
-
return content.length > _a.LARGE_CONTENT_SYMBOL_COUNT;
|
|
18
|
-
};
|
|
19
|
-
ScrapeTool.shouldTruncateResponse = ({ content, shouldShowFullResponse, }) => {
|
|
20
|
-
if (shouldShowFullResponse) {
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
return _a.isResponseOverLimit(content);
|
|
24
|
-
};
|
|
25
|
-
ScrapeTool.truncateResponse = ({ content, limit }) => {
|
|
26
|
-
return content.substring(0, limit);
|
|
27
|
-
};
|
|
28
|
-
ScrapeTool.transformResponse = ({ html, tokenLimit, shouldShowFullResponse, }) => {
|
|
29
|
-
const markdown = node_html_markdown_1.NodeHtmlMarkdown.translate(html, {});
|
|
30
|
-
if (_a.shouldTruncateResponse({ content: markdown, shouldShowFullResponse })) {
|
|
31
|
-
const truncated = _a.truncateResponse({
|
|
32
|
-
content: markdown,
|
|
33
|
-
limit: tokenLimit || _a.LARGE_CONTENT_SYMBOL_COUNT,
|
|
34
|
-
});
|
|
35
|
-
return { markdown: truncated, isTruncated: true };
|
|
36
|
-
}
|
|
37
|
-
return { markdown, isTruncated: false };
|
|
38
|
-
};
|
|
39
|
-
ScrapeTool.register = ({ server, sapiClient, }) => {
|
|
40
|
-
server.tool('scrape', 'Scrape the contents of a website', {
|
|
41
|
-
url: zod_1.default.string().describe('URL to scrape'),
|
|
42
|
-
geo: zod_types_1.zodGeo,
|
|
43
|
-
locale: zod_types_1.zodLocale,
|
|
44
|
-
jsRender: zod_types_1.zodJsRender,
|
|
45
|
-
tokenLimit: zod_types_1.zodTokenLimit,
|
|
46
|
-
fullResponse: zod_types_1.zodFullResponse,
|
|
47
|
-
}, async (scrapingParams) => {
|
|
48
|
-
const { data } = await sapiClient.scrape({ scrapingParams });
|
|
49
|
-
const { markdown, isTruncated } = _a.transformResponse({
|
|
50
|
-
html: data,
|
|
51
|
-
tokenLimit: scrapingParams.tokenLimit,
|
|
52
|
-
shouldShowFullResponse: scrapingParams.fullResponse,
|
|
53
|
-
});
|
|
54
|
-
return {
|
|
55
|
-
content: [
|
|
56
|
-
{
|
|
57
|
-
type: 'text',
|
|
58
|
-
text: isTruncated
|
|
59
|
-
? `The website content is over ${_a.LARGE_CONTENT_SYMBOL_COUNT} symbols, therefore, I have truncated the content. If you wish to obtain the full response, just say "full response". Alternatively, you can tell me a specific token limit.`
|
|
60
|
-
: 'Full website content retrieved.',
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
type: 'text',
|
|
64
|
-
text: markdown,
|
|
65
|
-
},
|
|
66
|
-
],
|
|
67
|
-
};
|
|
68
|
-
});
|
|
69
|
-
};
|
|
70
|
-
//# sourceMappingURL=scrape-tool.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scrape-tool.js","sourceRoot":"","sources":["../../src/tools/scrape-tool.ts"],"names":[],"mappings":";;;;;;;AAAA,8CAAoB;AAIpB,2DAAsD;AACtD,gDAAkG;AAElG,MAAa,UAAU;;AAAvB,gCA4FC;;AA3FQ,qCAA0B,GAAG,KAAM,AAAT,CAAU;AAEpC,8BAAmB,GAAG,CAAC,OAAe,EAAE,EAAE;IAC/C,OAAO,OAAO,CAAC,MAAM,GAAG,EAAI,CAAC,0BAA0B,CAAC;AAC1D,CAAC,AAFyB,CAExB;AAEK,iCAAsB,GAAG,CAAC,EAC/B,OAAO,EACP,sBAAsB,GAIvB,EAAE,EAAE;IACH,IAAI,sBAAsB,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,EAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC,AAZ4B,CAY3B;AAEK,2BAAgB,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,EAAsC,EAAE,EAAE;IACnF,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC,AAFsB,CAErB;AAEK,4BAAiB,GAAG,CAAC,EAC1B,IAAI,EACJ,UAAU,EACV,sBAAsB,GAKvB,EAAE,EAAE;IACH,MAAM,QAAQ,GAAG,qCAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAEtD,IAAI,EAAI,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,CAAC,EAAE,CAAC;QAC/E,MAAM,SAAS,GAAG,EAAI,CAAC,gBAAgB,CAAC;YACtC,OAAO,EAAE,QAAQ;YACjB,KAAK,EAAE,UAAU,IAAI,EAAI,CAAC,0BAA0B;SACrD,CAAC,CAAC;QAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACpD,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AAC1C,CAAC,AArBuB,CAqBtB;AAEK,mBAAQ,GAAG,CAAC,EACjB,MAAM,EACN,UAAU,GAIX,EAAE,EAAE;IACH,MAAM,CAAC,IAAI,CACT,QAAQ,EACR,kCAAkC,EAClC;QACE,GAAG,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QACzC,GAAG,EAAE,kBAAM;QACX,MAAM,EAAE,qBAAS;QACjB,QAAQ,EAAE,uBAAW;QACrB,UAAU,EAAE,yBAAa;QACzB,YAAY,EAAE,2BAAe;KAC9B,EACD,KAAK,EAAE,cAAiC,EAAE,EAAE;QAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;QAE7D,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,EAAI,CAAC,iBAAiB,CAAC;YACvD,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,cAAc,CAAC,UAAU;YACrC,sBAAsB,EAAE,cAAc,CAAC,YAAY;SACpD,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,WAAW;wBACf,CAAC,CAAC,+BAA+B,EAAI,CAAC,0BAA0B,8KAA8K;wBAC9O,CAAC,CAAC,iCAAiC;iBACtC;gBACD;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,QAAQ;iBACf;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC,AA3Cc,CA2Cb"}
|