@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 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
  }
@@ -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;AAEtD,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,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE5B,OAAO,MAAM,CAAC;AAChB,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"}
@@ -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
- query: z.string().describe("Search keyword"),
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 ({ query, location, category }) => bycrawlGet("/facebook/marketplace/search", { q: query, location, category }));
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":"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"}
1
+ {"version":3,"file":"facebook.js","sourceRoot":"","sources":["../../src/tools/facebook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerHackernewsTools(server: McpServer): void;
@@ -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,2 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerLumaTools(server: McpServer): void;
@@ -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,2 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerProducthuntTools(server: McpServer): void;
@@ -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,2 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerPttTools(server: McpServer): void;
@@ -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,2 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerRent591Tools(server: McpServer): void;
@@ -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,2 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerTrustpilotTools(server: McpServer): void;
@@ -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,2 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerWebFetchTools(server: McpServer): void;
@@ -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.5.0",
4
- "description": "MCP server for ByCrawl — query 9+ social media platforms (Threads, X, Facebook, Reddit, LinkedIn, TikTok, Instagram, YouTube) from AI agents",
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"