@bycrawl/mcp 0.5.0 → 0.6.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/build/server.js +14 -0
- package/build/server.js.map +1 -1
- package/build/tools/facebook.js +2 -2
- package/build/tools/facebook.js.map +1 -1
- package/build/tools/hackernews.d.ts +2 -0
- package/build/tools/hackernews.js +15 -0
- package/build/tools/hackernews.js.map +1 -0
- package/build/tools/luma.d.ts +2 -0
- package/build/tools/luma.js +24 -0
- package/build/tools/luma.js.map +1 -0
- package/build/tools/producthunt.d.ts +2 -0
- package/build/tools/producthunt.js +16 -0
- package/build/tools/producthunt.js.map +1 -0
- package/build/tools/ptt.d.ts +2 -0
- package/build/tools/ptt.js +19 -0
- package/build/tools/ptt.js.map +1 -0
- package/build/tools/rent591.d.ts +2 -0
- package/build/tools/rent591.js +14 -0
- package/build/tools/rent591.js.map +1 -0
- package/build/tools/trustpilot.d.ts +2 -0
- package/build/tools/trustpilot.js +19 -0
- package/build/tools/trustpilot.js.map +1 -0
- package/build/tools/web.d.ts +2 -0
- package/build/tools/web.js +6 -0
- package/build/tools/web.js.map +1 -0
- package/package.json +2 -2
package/build/server.js
CHANGED
|
@@ -11,6 +11,13 @@ import { registerDcardTools } from "./tools/dcard.js";
|
|
|
11
11
|
import { registerSystemTools } from "./tools/system.js";
|
|
12
12
|
import { registerJob104Tools } from "./tools/job104.js";
|
|
13
13
|
import { registerGmapsTools } from "./tools/gmaps.js";
|
|
14
|
+
import { registerWebFetchTools } from "./tools/web.js";
|
|
15
|
+
import { registerTrustpilotTools } from "./tools/trustpilot.js";
|
|
16
|
+
import { registerPttTools } from "./tools/ptt.js";
|
|
17
|
+
import { registerRent591Tools } from "./tools/rent591.js";
|
|
18
|
+
import { registerHackernewsTools } from "./tools/hackernews.js";
|
|
19
|
+
import { registerLumaTools } from "./tools/luma.js";
|
|
20
|
+
import { registerProducthuntTools } from "./tools/producthunt.js";
|
|
14
21
|
export function createServer() {
|
|
15
22
|
const server = new McpServer({
|
|
16
23
|
name: "bycrawl",
|
|
@@ -27,6 +34,13 @@ export function createServer() {
|
|
|
27
34
|
registerDcardTools(server);
|
|
28
35
|
registerJob104Tools(server);
|
|
29
36
|
registerGmapsTools(server);
|
|
37
|
+
registerWebFetchTools(server);
|
|
38
|
+
registerTrustpilotTools(server);
|
|
39
|
+
registerPttTools(server);
|
|
40
|
+
registerRent591Tools(server);
|
|
41
|
+
registerHackernewsTools(server);
|
|
42
|
+
registerLumaTools(server);
|
|
43
|
+
registerProducthuntTools(server);
|
|
30
44
|
registerSystemTools(server);
|
|
31
45
|
return server;
|
|
32
46
|
}
|
package/build/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzB,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAChC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE5B,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/build/tools/facebook.js
CHANGED
|
@@ -19,10 +19,10 @@ export function registerFacebookTools(server) {
|
|
|
19
19
|
category: z.string().optional().describe("Category slug (e.g. 'vehicles', 'electronics')"),
|
|
20
20
|
}, { readOnlyHint: true }, async ({ location, category }) => bycrawlGet("/facebook/marketplace/listings", { location, category }));
|
|
21
21
|
server.tool("facebook_marketplace_search", "Search Facebook Marketplace listings by keyword", {
|
|
22
|
-
|
|
22
|
+
q: z.string().describe("Search keyword"),
|
|
23
23
|
location: z.string().optional().describe("Location slug (e.g. 'taipei', 'newyork')"),
|
|
24
24
|
category: z.string().optional().describe("Category filter (e.g. 'vehicles')"),
|
|
25
|
-
}, { readOnlyHint: true }, async ({
|
|
25
|
+
}, { readOnlyHint: true }, async ({ q, location, category }) => bycrawlGet("/facebook/marketplace/search", { q, location, category }));
|
|
26
26
|
server.tool("facebook_marketplace_item", "Get detailed Facebook Marketplace listing by ID", {
|
|
27
27
|
listing_id: z.string().describe("Marketplace listing ID"),
|
|
28
28
|
}, { readOnlyHint: true }, async ({ listing_id }) => bycrawlGet(`/facebook/marketplace/items/${listing_id}`));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facebook.js","sourceRoot":"","sources":["../../src/tools/facebook.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,uCAAuC,EACvC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,EAC3D,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAClE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,qCAAqC,EACrC;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;KAC3E,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,mBAAmB,QAAQ,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAC1F,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,yEAAyE,EACzE,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EACjD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,CAAC,CAC1D,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,yCAAyC,EACzC;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;KAC/E,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,wBAAwB,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CACtF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,wCAAwC,EACxC;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KAC9C,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,0BAA0B,EAAE,EAAE,GAAG,EAAE,CAAC,CACnE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,6BAA6B,EAC7B,+DAA+D,EAC/D;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACpF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;KAC3F,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,gCAAgC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CACvG,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,6BAA6B,EAC7B,iDAAiD,EACjD;QACE,
|
|
1
|
+
{"version":3,"file":"facebook.js","sourceRoot":"","sources":["../../src/tools/facebook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { bycrawlGet } from "../client.js";
|
|
3
|
+
export function registerHackernewsTools(server) {
|
|
4
|
+
server.tool("hackernews_get_item", "Get a Hacker News item (story, comment, job, poll) by its ID", { itemId: z.number().describe("Hacker News item ID") }, { readOnlyHint: true }, async ({ itemId }) => bycrawlGet(`/hackernews/items/${itemId}`));
|
|
5
|
+
server.tool("hackernews_get_user", "Get a Hacker News user profile by username", { username: z.string().describe("Hacker News username (case-sensitive)") }, { readOnlyHint: true }, async ({ username }) => bycrawlGet(`/hackernews/users/${username}`));
|
|
6
|
+
server.tool("hackernews_get_stories", "Get Hacker News stories by type (top, new, best, ask, show, job)", {
|
|
7
|
+
storyType: z.string().describe("Story type: top, new, best, ask, show, job"),
|
|
8
|
+
count: z.number().optional().describe("Number of stories to fetch (max 50, default 30)"),
|
|
9
|
+
}, { readOnlyHint: true }, async ({ storyType, count }) => bycrawlGet(`/hackernews/stories/${storyType}`, { count }));
|
|
10
|
+
server.tool("hackernews_get_item_comments", "Get comment tree for a Hacker News item", {
|
|
11
|
+
itemId: z.number().describe("Hacker News item ID"),
|
|
12
|
+
depth: z.number().optional().describe("Max comment depth (max 5, default 3)"),
|
|
13
|
+
}, { readOnlyHint: true }, async ({ itemId, depth }) => bycrawlGet(`/hackernews/items/${itemId}/comments`, { depth }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=hackernews.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hackernews.js","sourceRoot":"","sources":["../../src/tools/hackernews.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,8DAA8D,EAC9D,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,EACtD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,qBAAqB,MAAM,EAAE,CAAC,CAChE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,4CAA4C,EAC5C,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC,EAAE,EAC1E,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CACpE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,kEAAkE,EAClE;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;QAC5E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;KACzF,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAC7B,UAAU,CAAC,uBAAuB,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAC5D,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,8BAA8B,EAC9B,yCAAyC,EACzC;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAClD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;KAC9E,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAC1B,UAAU,CAAC,qBAAqB,MAAM,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAChE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { bycrawlGet } from "../client.js";
|
|
3
|
+
export function registerLumaTools(server) {
|
|
4
|
+
server.tool("luma_get_event", "Get a Luma event by its API ID (e.g. evt-HcF3lY9ocKFrEuC)", { eventId: z.string().describe("Luma event ID (e.g. evt-HcF3lY9ocKFrEuC)") }, { readOnlyHint: true }, async ({ eventId }) => bycrawlGet(`/luma/events/${eventId}`));
|
|
5
|
+
server.tool("luma_get_place_events", "Get events for a city/place by its discover place ID", {
|
|
6
|
+
placeId: z.string().describe("Discover place ID (e.g. discplace-fi7MDZq99wfKWfa)"),
|
|
7
|
+
count: z.number().optional().describe("Number of events (max 50, default 25)"),
|
|
8
|
+
cursor: z.string().optional().describe("Pagination cursor (from previous response)"),
|
|
9
|
+
}, { readOnlyHint: true }, async ({ placeId, count, cursor }) => bycrawlGet(`/luma/places/${placeId}/events`, { count, cursor }));
|
|
10
|
+
server.tool("luma_search_events", "Search events by keyword within a city/place on Luma", {
|
|
11
|
+
placeId: z.string().describe("Discover place ID (city)"),
|
|
12
|
+
q: z.string().describe("Search query"),
|
|
13
|
+
count: z.number().optional().describe("Number of results (max 50, default 25)"),
|
|
14
|
+
cursor: z.string().optional().describe("Pagination cursor (from previous response)"),
|
|
15
|
+
}, { readOnlyHint: true }, async ({ placeId, q, count, cursor }) => bycrawlGet("/luma/events/search", { place_id: placeId, q, count, cursor }));
|
|
16
|
+
server.tool("luma_get_categories", "List all Luma event categories (Tech, AI, Food & Drink, etc.)", {}, { readOnlyHint: true }, async () => bycrawlGet("/luma/categories"));
|
|
17
|
+
server.tool("luma_get_calendar_events", "Get events from a specific Luma calendar/community", {
|
|
18
|
+
calendarId: z.string().describe("Luma calendar ID"),
|
|
19
|
+
count: z.number().optional().describe("Number of events (max 50, default 25)"),
|
|
20
|
+
cursor: z.string().optional().describe("Pagination cursor (from previous response)"),
|
|
21
|
+
}, { readOnlyHint: true }, async ({ calendarId, count, cursor }) => bycrawlGet(`/luma/calendars/${calendarId}/events`, { count, cursor }));
|
|
22
|
+
server.tool("luma_get_place", "Get city/place info by its discover place ID", { placeId: z.string().describe("Discover place ID") }, { readOnlyHint: true }, async ({ placeId }) => bycrawlGet(`/luma/places/${placeId}`));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=luma.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"luma.js","sourceRoot":"","sources":["../../src/tools/luma.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { bycrawlGet } from "../client.js";
|
|
3
|
+
export function registerProducthuntTools(server) {
|
|
4
|
+
server.tool("producthunt_get_posts", "Get Product Hunt leaderboard posts (optionally filtered by date and period)", {
|
|
5
|
+
count: z.number().optional().describe("Number of posts (max 50, default 20)"),
|
|
6
|
+
date: z.string().optional().describe("Filter to specific date (YYYY-MM-DD)"),
|
|
7
|
+
period: z.string().optional().describe("Leaderboard period: daily, weekly, monthly, yearly (default daily)"),
|
|
8
|
+
}, { readOnlyHint: true }, async ({ count, date, period }) => bycrawlGet("/producthunt/posts", { count, date, period }));
|
|
9
|
+
server.tool("producthunt_search_posts", "Search Product Hunt products by keyword", {
|
|
10
|
+
q: z.string().describe("Search query"),
|
|
11
|
+
count: z.number().optional().describe("Number of results (max 50, default 20)"),
|
|
12
|
+
}, { readOnlyHint: true }, async ({ q, count }) => bycrawlGet("/producthunt/posts/search", { q, count }));
|
|
13
|
+
server.tool("producthunt_get_post", "Get a Product Hunt product by its slug", { slug: z.string().describe("Product slug (e.g. 'lovable')") }, { readOnlyHint: true }, async ({ slug }) => bycrawlGet(`/producthunt/posts/${slug}`));
|
|
14
|
+
server.tool("producthunt_get_reviews", "Get reviews for a Product Hunt product", { slug: z.string().describe("Product slug (e.g. 'lovable')") }, { readOnlyHint: true }, async ({ slug }) => bycrawlGet(`/producthunt/posts/${slug}/reviews`));
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=producthunt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"producthunt.js","sourceRoot":"","sources":["../../src/tools/producthunt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,6EAA6E,EAC7E;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QAC7E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QAC5E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oEAAoE,CAAC;KAC7G,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAChC,UAAU,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAC5D,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,0BAA0B,EAC1B,yCAAyC,EACzC;QACE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KAChF,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,2BAA2B,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAC9E,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,wCAAwC,EACxC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,EAC9D,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAC7D,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,wCAAwC,EACxC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,EAC9D,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,sBAAsB,IAAI,UAAU,CAAC,CACrE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { bycrawlGet } from "../client.js";
|
|
3
|
+
export function registerPttTools(server) {
|
|
4
|
+
server.tool("ptt_get_board", "Get PTT board info by name (e.g. Gossiping, Stock, Baseball)", { boardName: z.string().describe("PTT board name (e.g. Gossiping, Stock)") }, { readOnlyHint: true }, async ({ boardName }) => bycrawlGet(`/ptt/boards/${boardName}`));
|
|
5
|
+
server.tool("ptt_get_board_posts", "Get posts from a PTT board", {
|
|
6
|
+
boardName: z.string().describe("PTT board name (e.g. Gossiping)"),
|
|
7
|
+
page: z.number().optional().describe("Page number (from PTT index). Omit for latest."),
|
|
8
|
+
count: z.number().optional().describe("Number of posts (max 40, default 20)"),
|
|
9
|
+
}, { readOnlyHint: true }, async ({ boardName, page, count }) => bycrawlGet(`/ptt/boards/${boardName}/posts`, { page, count }));
|
|
10
|
+
server.tool("ptt_get_post", "Get a PTT post by URL with full content and pushes (comments)", {
|
|
11
|
+
url: z.string().describe("Full PTT post URL or path (e.g. /bbs/Gossiping/M.1773638913.A.077.html)"),
|
|
12
|
+
}, { readOnlyHint: true }, async ({ url }) => bycrawlGet("/ptt/posts", { url }));
|
|
13
|
+
server.tool("ptt_search_posts", "Search posts in a PTT board", {
|
|
14
|
+
boardName: z.string().describe("PTT board name (e.g. Gossiping)"),
|
|
15
|
+
q: z.string().describe("Search query"),
|
|
16
|
+
count: z.number().optional().describe("Number of results (max 40, default 20)"),
|
|
17
|
+
}, { readOnlyHint: true }, async ({ boardName, q, count }) => bycrawlGet(`/ptt/boards/${boardName}/search`, { q, count }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=ptt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ptt.js","sourceRoot":"","sources":["../../src/tools/ptt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,IAAI,CACT,eAAe,EACf,8DAA8D,EAC9D,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC,EAAE,EAC5E,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,eAAe,SAAS,EAAE,CAAC,CAChE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,4BAA4B,EAC5B;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QACjE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACtF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;KAC9E,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CACnC,UAAU,CAAC,eAAe,SAAS,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAChE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,+DAA+D,EAC/D;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yEAAyE,CAAC;KACpG,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,CACrD,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,6BAA6B,EAC7B;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QACjE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KAChF,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAChC,UAAU,CAAC,eAAe,SAAS,SAAS,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAC9D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { bycrawlGet } from "../client.js";
|
|
3
|
+
export function registerRent591Tools(server) {
|
|
4
|
+
server.tool("rent591_get_listings", "Get rental listings from 591.com.tw (Taiwan's largest rental platform)", {
|
|
5
|
+
region: z.number().optional().describe("Region ID (1=台北市, 3=新北市, 6=桃園市, 5=新竹市, 8=台中市, 15=台南市, 17=高雄市). Default 1."),
|
|
6
|
+
first_row: z.number().optional().describe("Pagination offset (0, 30, 60, ...)"),
|
|
7
|
+
kind: z.number().optional().describe("Property type (1=整層住家, 2=獨立套房, 3=分租套房, 4=雅房, 8=車位)"),
|
|
8
|
+
section: z.number().optional().describe("Section/district ID within the region"),
|
|
9
|
+
price: z.string().optional().describe("Price range, e.g. '5000_10000$' or '10000_20000$'"),
|
|
10
|
+
count: z.number().optional().describe("Number of listings (max 30, default 30)"),
|
|
11
|
+
}, { readOnlyHint: true }, async ({ region, first_row, kind, section, price, count }) => bycrawlGet("/rent591/listings", { region, first_row, kind, section, price, count }));
|
|
12
|
+
server.tool("rent591_get_listing", "Get a rental listing detail by ID from 591.com.tw", { listingId: z.number().describe("591 listing ID") }, { readOnlyHint: true }, async ({ listingId }) => bycrawlGet(`/rent591/listings/${listingId}`));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=rent591.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rent591.js","sourceRoot":"","sources":["../../src/tools/rent591.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,wEAAwE,EACxE;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2EAA2E,CAAC;QACnH,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAC/E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;QAC1F,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QAChF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QAC1F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;KACjF,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAC3D,UAAU,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CACtF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,mDAAmD,EACnD,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EACpD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,qBAAqB,SAAS,EAAE,CAAC,CACtE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { bycrawlGet } from "../client.js";
|
|
3
|
+
export function registerTrustpilotTools(server) {
|
|
4
|
+
server.tool("trustpilot_get_business", "Get a Trustpilot business profile by domain (e.g. 'www.amazon.com', 'stripe.com')", { domain: z.string().describe("Business domain (e.g. stripe.com, www.amazon.com)") }, { readOnlyHint: true }, async ({ domain }) => bycrawlGet(`/trustpilot/businesses/${domain}`));
|
|
5
|
+
server.tool("trustpilot_get_business_reviews", "Get reviews for a business on Trustpilot", {
|
|
6
|
+
domain: z.string().describe("Business domain (e.g. stripe.com)"),
|
|
7
|
+
page: z.number().optional().describe("Page number (default 1)"),
|
|
8
|
+
sort: z.string().optional().describe("Sort order: recency, relevance (default recency)"),
|
|
9
|
+
stars: z.number().optional().describe("Filter by star rating (1-5)"),
|
|
10
|
+
languages: z.string().optional().describe("Language filter ISO code (e.g. 'en', 'all')"),
|
|
11
|
+
}, { readOnlyHint: true }, async ({ domain, page, sort, stars, languages }) => bycrawlGet(`/trustpilot/businesses/${domain}/reviews`, { page, sort, stars, languages }));
|
|
12
|
+
server.tool("trustpilot_search_businesses", "Search for businesses on Trustpilot", {
|
|
13
|
+
q: z.string().describe("Search query"),
|
|
14
|
+
page: z.number().optional().describe("Page number (default 1)"),
|
|
15
|
+
}, { readOnlyHint: true }, async ({ q, page }) => bycrawlGet("/trustpilot/businesses/search", { q, page }));
|
|
16
|
+
server.tool("trustpilot_search_categories", "Search Trustpilot business categories", { q: z.string().describe("Search query for categories") }, { readOnlyHint: true }, async ({ q }) => bycrawlGet("/trustpilot/categories/search", { q }));
|
|
17
|
+
server.tool("trustpilot_get_suggestions", "Get business name autocomplete suggestions on Trustpilot", { q: z.string().describe("Search query for autocomplete") }, { readOnlyHint: true }, async ({ q }) => bycrawlGet("/trustpilot/suggestions", { q }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=trustpilot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trustpilot.js","sourceRoot":"","sources":["../../src/tools/trustpilot.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,mFAAmF,EACnF,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC,EAAE,EACpF,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,0BAA0B,MAAM,EAAE,CAAC,CACrE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,iCAAiC,EACjC,0CAA0C,EAC1C;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAChE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC/D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;QACxF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACpE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;KACzF,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CACjD,UAAU,CAAC,0BAA0B,MAAM,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAC3F,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,8BAA8B,EAC9B,qCAAqC,EACrC;QACE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KAChE,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,+BAA+B,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAChF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,8BAA8B,EAC9B,uCAAuC,EACvC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,EACzD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,+BAA+B,EAAE,EAAE,CAAC,EAAE,CAAC,CACpE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,0DAA0D,EAC1D,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,EAC3D,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,yBAAyB,EAAE,EAAE,CAAC,EAAE,CAAC,CAC9D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { bycrawlGet } from "../client.js";
|
|
3
|
+
export function registerWebFetchTools(server) {
|
|
4
|
+
server.tool("web_fetch", "Fetch a web page and return its content", { url: z.string().describe("URL to fetch") }, { readOnlyHint: true }, async ({ url }) => bycrawlGet("/web/fetch", { url }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/tools/web.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,IAAI,CACT,WAAW,EACX,yCAAyC,EACzC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAC5C,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,CACrD,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bycrawl/mcp",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "MCP server for ByCrawl — query
|
|
3
|
+
"version": "0.6.0",
|
|
4
|
+
"description": "MCP server for ByCrawl — query 15+ social media platforms (Threads, X, Facebook, Reddit, LinkedIn, TikTok, Instagram, YouTube) from AI agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"bycrawl-mcp": "./build/index.js"
|