@bycrawl/mcp 0.4.2 → 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.
Files changed (69) hide show
  1. package/README.md +20 -0
  2. package/build/client.js +5 -1
  3. package/build/client.js.map +1 -1
  4. package/build/oauth/callback.d.ts +6 -0
  5. package/build/oauth/callback.js +75 -0
  6. package/build/oauth/callback.js.map +1 -0
  7. package/build/oauth/crypto.d.ts +6 -0
  8. package/build/oauth/crypto.js +29 -0
  9. package/build/oauth/crypto.js.map +1 -0
  10. package/build/oauth/provider.d.ts +14 -0
  11. package/build/oauth/provider.js +125 -0
  12. package/build/oauth/provider.js.map +1 -0
  13. package/build/oauth/store.d.ts +43 -0
  14. package/build/oauth/store.js +66 -0
  15. package/build/oauth/store.js.map +1 -0
  16. package/build/oauth/user-keys.d.ts +6 -0
  17. package/build/oauth/user-keys.js +89 -0
  18. package/build/oauth/user-keys.js.map +1 -0
  19. package/build/server.js +16 -0
  20. package/build/server.js.map +1 -1
  21. package/build/tools/dcard.js +6 -14
  22. package/build/tools/dcard.js.map +1 -1
  23. package/build/tools/facebook.js +13 -12
  24. package/build/tools/facebook.js.map +1 -1
  25. package/build/tools/gmaps.d.ts +2 -0
  26. package/build/tools/gmaps.js +13 -0
  27. package/build/tools/gmaps.js.map +1 -0
  28. package/build/tools/hackernews.d.ts +2 -0
  29. package/build/tools/hackernews.js +15 -0
  30. package/build/tools/hackernews.js.map +1 -0
  31. package/build/tools/instagram.js +5 -5
  32. package/build/tools/instagram.js.map +1 -1
  33. package/build/tools/job104.js +3 -3
  34. package/build/tools/job104.js.map +1 -1
  35. package/build/tools/linkedin.js +9 -9
  36. package/build/tools/linkedin.js.map +1 -1
  37. package/build/tools/luma.d.ts +2 -0
  38. package/build/tools/luma.js +24 -0
  39. package/build/tools/luma.js.map +1 -0
  40. package/build/tools/producthunt.d.ts +2 -0
  41. package/build/tools/producthunt.js +16 -0
  42. package/build/tools/producthunt.js.map +1 -0
  43. package/build/tools/ptt.d.ts +2 -0
  44. package/build/tools/ptt.js +19 -0
  45. package/build/tools/ptt.js.map +1 -0
  46. package/build/tools/reddit.js +16 -5
  47. package/build/tools/reddit.js.map +1 -1
  48. package/build/tools/rent591.d.ts +2 -0
  49. package/build/tools/rent591.js +14 -0
  50. package/build/tools/rent591.js.map +1 -0
  51. package/build/tools/system.js +2 -1
  52. package/build/tools/system.js.map +1 -1
  53. package/build/tools/threads.js +8 -8
  54. package/build/tools/threads.js.map +1 -1
  55. package/build/tools/tiktok.js +8 -8
  56. package/build/tools/tiktok.js.map +1 -1
  57. package/build/tools/trustpilot.d.ts +2 -0
  58. package/build/tools/trustpilot.js +19 -0
  59. package/build/tools/trustpilot.js.map +1 -0
  60. package/build/tools/web.d.ts +2 -0
  61. package/build/tools/web.js +6 -0
  62. package/build/tools/web.js.map +1 -0
  63. package/build/tools/x.js +5 -5
  64. package/build/tools/x.js.map +1 -1
  65. package/build/tools/youtube.js +5 -7
  66. package/build/tools/youtube.js.map +1 -1
  67. package/build/transport-http.js +146 -66
  68. package/build/transport-http.js.map +1 -1
  69. package/package.json +5 -4
@@ -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/build/tools/x.js CHANGED
@@ -1,18 +1,18 @@
1
1
  import { z } from "zod";
2
2
  import { bycrawlGet } from "../client.js";
3
3
  export function registerXTools(server) {
4
- server.tool("x_get_user", "Get X/Twitter user profile by username", { username: z.string().describe("X username") }, async ({ username }) => bycrawlGet(`/x/users/${username}`));
4
+ server.tool("x_get_user", "Get X/Twitter user profile by username", { username: z.string().describe("X username") }, { readOnlyHint: true }, async ({ username }) => bycrawlGet(`/x/users/${username}`));
5
5
  server.tool("x_get_user_posts", "Get X/Twitter user's timeline tweets", {
6
6
  username: z.string().describe("X username"),
7
7
  count: z.number().optional().describe("Number of tweets (max 40)"),
8
8
  cursor: z.string().optional().describe("Pagination cursor"),
9
- }, async ({ username, count, cursor }) => bycrawlGet(`/x/users/${username}/posts`, { count, cursor }));
10
- server.tool("x_get_post", "Get a single X/Twitter post (tweet) by ID", { postId: z.string().describe("Tweet ID") }, async ({ postId }) => bycrawlGet(`/x/posts/${postId}`));
9
+ }, { readOnlyHint: true }, async ({ username, count, cursor }) => bycrawlGet(`/x/users/${username}/posts`, { count, cursor }));
10
+ server.tool("x_get_post", "Get a single X/Twitter post (tweet) by ID", { postId: z.string().describe("Tweet ID") }, { readOnlyHint: true }, async ({ postId }) => bycrawlGet(`/x/posts/${postId}`));
11
11
  server.tool("x_search_posts", "Search X/Twitter posts by keyword", {
12
12
  query: z.string().describe("Search query"),
13
- count: z.number().optional().describe("Number of tweets (10-100)"),
13
+ count: z.number().optional().describe("Number of tweets (1-15)"),
14
14
  cursor: z.string().optional().describe("Pagination cursor"),
15
15
  product: z.enum(["Top", "Latest"]).optional().describe("Search tab: Top or Latest"),
16
- }, async ({ query, count, cursor, product }) => bycrawlGet("/x/posts/search", { q: query, count, cursor, product }));
16
+ }, { readOnlyHint: true }, async ({ query, count, cursor, product }) => bycrawlGet("/x/posts/search", { q: query, count, cursor, product }));
17
17
  }
18
18
  //# sourceMappingURL=x.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"x.js","sourceRoot":"","sources":["../../src/tools/x.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,cAAc,CAAC,MAAiB;IAC9C,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,wCAAwC,EACxC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,EAC/C,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,QAAQ,EAAE,CAAC,CAC3D,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,sCAAsC,EACtC;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAClE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KAC5D,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,QAAQ,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CACnG,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,2CAA2C,EAC3C,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,EAC3C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,MAAM,EAAE,CAAC,CACvD,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,mCAAmC,EACnC;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAClE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC3D,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KACpF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CACjH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"x.js","sourceRoot":"","sources":["../../src/tools/x.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,cAAc,CAAC,MAAiB;IAC9C,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,wCAAwC,EACxC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,EAC/C,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,QAAQ,EAAE,CAAC,CAC3D,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,sCAAsC,EACtC;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAClE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KAC5D,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,QAAQ,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CACnG,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,2CAA2C,EAC3C,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,EAC3C,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,YAAY,MAAM,EAAE,CAAC,CACvD,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,mCAAmC,EACnC;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC1C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAChE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC3D,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KACpF,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CACjH,CAAC;AACJ,CAAC"}
@@ -1,21 +1,19 @@
1
1
  import { z } from "zod";
2
2
  import { bycrawlGet } from "../client.js";
3
3
  export function registerYoutubeTools(server) {
4
- server.tool("youtube_get_video", "Get YouTube video details by ID", { videoId: z.string().describe("YouTube video ID") }, async ({ videoId }) => bycrawlGet(`/youtube/videos/${videoId}`));
5
- server.tool("youtube_get_channel", "Get YouTube channel info by channel ID or @handle", { channelId: z.string().describe("YouTube channel ID or @handle") }, async ({ channelId }) => bycrawlGet(`/youtube/channels/${channelId}`));
4
+ server.tool("youtube_get_video", "Get YouTube video details by ID", { videoId: z.string().describe("YouTube video ID") }, { readOnlyHint: true }, async ({ videoId }) => bycrawlGet(`/youtube/videos/${videoId}`));
5
+ server.tool("youtube_get_channel", "Get YouTube channel info by channel ID or @handle", { channelId: z.string().describe("YouTube channel ID or @handle") }, { readOnlyHint: true }, async ({ channelId }) => bycrawlGet(`/youtube/channels/${channelId}`));
6
6
  server.tool("youtube_search_videos", "Search YouTube videos by keyword", {
7
7
  q: z.string().describe("Search query"),
8
8
  count: z.number().optional().describe("Number of results (max 20)"),
9
- cursor: z.string().optional().describe("Continuation token for pagination"),
10
- }, async ({ q, count, cursor }) => bycrawlGet("/youtube/search", { q, count, cursor }));
9
+ }, { readOnlyHint: true }, async ({ q, count }) => bycrawlGet("/youtube/videos/search", { q, count }));
11
10
  server.tool("youtube_get_video_comments", "Get YouTube video comments", {
12
11
  videoId: z.string().describe("YouTube video ID"),
13
12
  count: z.number().optional().describe("Number of comments (max 50)"),
14
- cursor: z.string().optional().describe("Continuation token for pagination"),
15
- }, async ({ videoId, count, cursor }) => bycrawlGet(`/youtube/videos/${videoId}/comments`, { count, cursor }));
13
+ }, { readOnlyHint: true }, async ({ videoId, count }) => bycrawlGet(`/youtube/videos/${videoId}/comments`, { count }));
16
14
  server.tool("youtube_get_video_transcription", "Get YouTube video transcription/subtitles with timestamps", {
17
15
  videoId: z.string().describe("YouTube video ID"),
18
16
  language: z.string().optional().describe("Language code (e.g., en, zh-Hant, ja)"),
19
- }, async ({ videoId, language }) => bycrawlGet(`/youtube/videos/${videoId}/transcription`, { language }));
17
+ }, { readOnlyHint: true }, async ({ videoId, language }) => bycrawlGet(`/youtube/videos/${videoId}/transcription`, { language }));
20
18
  }
21
19
  //# sourceMappingURL=youtube.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"youtube.js","sourceRoot":"","sources":["../../src/tools/youtube.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,mBAAmB,EACnB,iCAAiC,EACjC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,EACpD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAChE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,mDAAmD,EACnD,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,EACnE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,qBAAqB,SAAS,EAAE,CAAC,CACtE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,kCAAkC,EAClC;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,4BAA4B,CAAC;QACnE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;KAC5E,EACD,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CACpF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,4BAA4B,EAC5B;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAChD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACpE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;KAC5E,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CACnC,UAAU,CAAC,mBAAmB,OAAO,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CACvE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,iCAAiC,EACjC,2DAA2D,EAC3D;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAChD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;KAClF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAC9B,UAAU,CAAC,mBAAmB,OAAO,gBAAgB,EAAE,EAAE,QAAQ,EAAE,CAAC,CACvE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"youtube.js","sourceRoot":"","sources":["../../src/tools/youtube.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,mBAAmB,EACnB,iCAAiC,EACjC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,EACpD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAChE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,mDAAmD,EACnD,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,EACnE,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,qBAAqB,SAAS,EAAE,CAAC,CACtE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,kCAAkC,EAClC;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,4BAA4B,CAAC;KACpE,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,wBAAwB,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAC3E,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,4BAA4B,EAC5B;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAChD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KACrE,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAC3B,UAAU,CAAC,mBAAmB,OAAO,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAC/D,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,iCAAiC,EACjC,2DAA2D,EAC3D;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAChD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;KAClF,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAC9B,UAAU,CAAC,mBAAmB,OAAO,gBAAgB,EAAE,EAAE,QAAQ,EAAE,CAAC,CACvE,CAAC;AACJ,CAAC"}
@@ -1,11 +1,15 @@
1
1
  import { randomUUID } from "node:crypto";
2
+ import { readFileSync } from "node:fs";
3
+ import { resolve, dirname } from "node:path";
4
+ import { fileURLToPath } from "node:url";
2
5
  import { createMcpExpressApp } from "@modelcontextprotocol/sdk/server/express.js";
3
6
  import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
4
7
  import { isInitializeRequest } from "@modelcontextprotocol/sdk/types.js";
5
8
  import { createServer } from "./server.js";
6
9
  import { apiContextStorage } from "./api-context.js";
7
- const PORT = parseInt(process.env.PORT ?? "3100", 10);
10
+ const PORT = parseInt(process.env.PORT ?? "8080", 10);
8
11
  const HOST = process.env.HOST ?? "0.0.0.0";
12
+ const OAUTH_ENABLED = !!process.env.SUPABASE_URL;
9
13
  // Session TTL: clean up sessions idle for more than 30 minutes
10
14
  const SESSION_TTL_MS = 30 * 60 * 1000;
11
15
  const sessions = {};
@@ -20,7 +24,7 @@ setInterval(() => {
20
24
  }
21
25
  }
22
26
  }, 60_000); // check every minute
23
- // --- API key helpers ---
27
+ // --- API key helpers (legacy mode) ---
24
28
  function extractApiKey(req) {
25
29
  const bearer = req.headers.authorization;
26
30
  if (bearer?.startsWith("Bearer "))
@@ -50,93 +54,169 @@ function getSession(sessionId) {
50
54
  entry.lastActivity = Date.now();
51
55
  return entry;
52
56
  }
57
+ // --- MCP request handler (shared between OAuth and legacy modes) ---
58
+ async function handleMcpPost(req, res, apiKey) {
59
+ const maskedKey = apiKey.slice(0, 12) + "...";
60
+ console.log(`[MCP POST] apiKey=${maskedKey} sessionId=${req.headers["mcp-session-id"] ?? "(none)"}`);
61
+ await withApiKey(apiKey, async () => {
62
+ const sessionId = req.headers["mcp-session-id"];
63
+ // Existing session
64
+ if (sessionId) {
65
+ const entry = getSession(sessionId);
66
+ if (entry) {
67
+ console.log(`[MCP POST] existing session ${sessionId}, body method=${req.body?.method}`);
68
+ await entry.transport.handleRequest(req, res, req.body);
69
+ return;
70
+ }
71
+ console.log(`[MCP POST] session ${sessionId} not found in ${Object.keys(sessions).length} active sessions`);
72
+ }
73
+ // New session (must be initialize request)
74
+ if (!sessionId && isInitializeRequest(req.body)) {
75
+ console.log(`[MCP POST] new session (initialize)`);
76
+ const transport = new StreamableHTTPServerTransport({
77
+ sessionIdGenerator: () => randomUUID(),
78
+ onsessioninitialized: (sid) => {
79
+ sessions[sid] = { transport, lastActivity: Date.now() };
80
+ console.log(`[MCP POST] session initialized: ${sid}`);
81
+ },
82
+ });
83
+ transport.onclose = () => {
84
+ const sid = transport.sessionId;
85
+ if (sid && sessions[sid])
86
+ delete sessions[sid];
87
+ };
88
+ const server = createServer();
89
+ await server.connect(transport);
90
+ await transport.handleRequest(req, res, req.body);
91
+ return;
92
+ }
93
+ console.log(`[MCP POST] bad request — no session, not initialize. body=${JSON.stringify(req.body).slice(0, 200)}`);
94
+ res.status(400).json({
95
+ jsonrpc: "2.0",
96
+ error: { code: -32000, message: "Bad Request: No valid session ID provided" },
97
+ id: null,
98
+ });
99
+ });
100
+ }
101
+ async function handleMcpGet(req, res) {
102
+ const sessionId = req.headers["mcp-session-id"];
103
+ const entry = getSession(sessionId);
104
+ if (!sessionId || !entry) {
105
+ res.status(400).json({ error: "Invalid or missing session ID" });
106
+ return;
107
+ }
108
+ await entry.transport.handleRequest(req, res);
109
+ }
110
+ async function handleMcpDelete(req, res) {
111
+ const sessionId = req.headers["mcp-session-id"];
112
+ const entry = getSession(sessionId);
113
+ if (!sessionId || !entry) {
114
+ res.status(400).json({ error: "Invalid or missing session ID" });
115
+ return;
116
+ }
117
+ await entry.transport.handleRequest(req, res);
118
+ }
119
+ // --- Start server ---
53
120
  export async function startHttp() {
54
121
  const app = createMcpExpressApp({ host: HOST });
122
+ // Trust first proxy (Zeabur / reverse proxy) — required for express-rate-limit
123
+ app.set("trust proxy", 1);
55
124
  // Health check (no auth needed)
56
125
  app.get("/health", (_req, res) => {
57
126
  res.json({ status: "ok" });
58
127
  });
59
- // POST /mcp MCP requests (initialize + subsequent calls)
128
+ // Favicon for MCP Directory listing
129
+ const __dirname = dirname(fileURLToPath(import.meta.url));
130
+ const faviconPath = resolve(__dirname, "../static/favicon.png");
131
+ let faviconBuf;
132
+ try {
133
+ faviconBuf = readFileSync(faviconPath);
134
+ }
135
+ catch { }
136
+ if (faviconBuf) {
137
+ app.get("/favicon.ico", (_req, res) => {
138
+ res.set("Content-Type", "image/png").set("Cache-Control", "public, max-age=86400").send(faviconBuf);
139
+ });
140
+ }
141
+ if (OAUTH_ENABLED) {
142
+ await mountOAuth(app);
143
+ }
144
+ else {
145
+ mountLegacy(app);
146
+ }
147
+ // Catch-all: any other route → 404 JSON
148
+ app.use((_req, res, _next) => {
149
+ res.status(404).json({ error: "Not found" });
150
+ });
151
+ app.listen(PORT, HOST, () => {
152
+ const mode = OAUTH_ENABLED ? "OAuth" : "API key";
153
+ console.log(`ByCrawl MCP HTTP server listening on http://${HOST}:${PORT}/mcp (${mode} mode)`);
154
+ });
155
+ // Graceful shutdown
156
+ process.on("SIGINT", async () => {
157
+ console.log("Shutting down...");
158
+ for (const sid of Object.keys(sessions)) {
159
+ await sessions[sid].transport.close().catch(() => { });
160
+ delete sessions[sid];
161
+ }
162
+ process.exit(0);
163
+ });
164
+ }
165
+ // --- Legacy mode (Bearer sk_byc_xxx / x-bycrawl-api-key header) ---
166
+ function mountLegacy(app) {
60
167
  app.post("/mcp", async (req, res) => {
61
168
  const apiKey = requireApiKey(req, res);
62
169
  if (!apiKey)
63
170
  return;
64
- await withApiKey(apiKey, async () => {
65
- const sessionId = req.headers["mcp-session-id"];
66
- // Existing session
67
- if (sessionId) {
68
- const entry = getSession(sessionId);
69
- if (entry) {
70
- await entry.transport.handleRequest(req, res, req.body);
71
- return;
72
- }
73
- }
74
- // New session (must be initialize request)
75
- if (!sessionId && isInitializeRequest(req.body)) {
76
- const transport = new StreamableHTTPServerTransport({
77
- sessionIdGenerator: () => randomUUID(),
78
- onsessioninitialized: (sid) => {
79
- sessions[sid] = { transport, lastActivity: Date.now() };
80
- },
81
- });
82
- transport.onclose = () => {
83
- const sid = transport.sessionId;
84
- if (sid && sessions[sid])
85
- delete sessions[sid];
86
- };
87
- const server = createServer();
88
- await server.connect(transport);
89
- await transport.handleRequest(req, res, req.body);
90
- return;
91
- }
92
- res.status(400).json({
93
- jsonrpc: "2.0",
94
- error: { code: -32000, message: "Bad Request: No valid session ID provided" },
95
- id: null,
96
- });
97
- });
171
+ await handleMcpPost(req, res, apiKey);
98
172
  });
99
- // GET /mcp — SSE stream (server-to-client notifications)
100
173
  app.get("/mcp", async (req, res) => {
101
174
  const apiKey = requireApiKey(req, res);
102
175
  if (!apiKey)
103
176
  return;
104
- const sessionId = req.headers["mcp-session-id"];
105
- const entry = getSession(sessionId);
106
- if (!sessionId || !entry) {
107
- res.status(400).json({ error: "Invalid or missing session ID" });
108
- return;
109
- }
110
- await entry.transport.handleRequest(req, res);
177
+ await handleMcpGet(req, res);
111
178
  });
112
- // DELETE /mcp — End session
113
179
  app.delete("/mcp", async (req, res) => {
114
180
  const apiKey = requireApiKey(req, res);
115
181
  if (!apiKey)
116
182
  return;
117
- const sessionId = req.headers["mcp-session-id"];
118
- const entry = getSession(sessionId);
119
- if (!sessionId || !entry) {
120
- res.status(400).json({ error: "Invalid or missing session ID" });
121
- return;
122
- }
123
- await entry.transport.handleRequest(req, res);
183
+ await handleMcpDelete(req, res);
124
184
  });
125
- // Catch-all: any other route → 404 JSON
126
- app.use((_req, res, _next) => {
127
- res.status(404).json({ error: "Not found" });
185
+ }
186
+ // --- OAuth mode (JWT + backward-compat plain API keys) ---
187
+ async function mountOAuth(app) {
188
+ const { mcpAuthRouter } = await import("@modelcontextprotocol/sdk/server/auth/router.js");
189
+ const { requireBearerAuth } = await import("@modelcontextprotocol/sdk/server/auth/middleware/bearerAuth.js");
190
+ const { ByCrawlOAuthProvider } = await import("./oauth/provider.js");
191
+ const { oauthCallbackHandler } = await import("./oauth/callback.js");
192
+ const EXTERNAL_URL = process.env.EXTERNAL_URL;
193
+ const provider = new ByCrawlOAuthProvider();
194
+ const issuerUrl = new URL(EXTERNAL_URL);
195
+ const resourceServerUrl = new URL("/mcp", EXTERNAL_URL);
196
+ const resourceMetadataUrl = `${EXTERNAL_URL}/.well-known/oauth-protected-resource/mcp`;
197
+ // Mount OAuth endpoints (authorize, token, register, revoke, metadata)
198
+ app.use(mcpAuthRouter({
199
+ provider,
200
+ issuerUrl,
201
+ resourceServerUrl,
202
+ resourceName: "ByCrawl MCP",
203
+ }));
204
+ // Supabase Auth callback (after Google login)
205
+ app.get("/oauth/callback/:nonce", oauthCallbackHandler);
206
+ // Bearer auth middleware for /mcp routes
207
+ const bearerAuth = requireBearerAuth({ verifier: provider, resourceMetadataUrl });
208
+ app.post("/mcp", bearerAuth, async (req, res) => {
209
+ console.log(`[OAuth /mcp POST] auth.clientId=${req.auth?.clientId} auth.extra=${JSON.stringify(req.auth?.extra)}`);
210
+ const apiKey = req.auth.extra.apiKey;
211
+ await handleMcpPost(req, res, apiKey);
128
212
  });
129
- app.listen(PORT, HOST, () => {
130
- console.log(`ByCrawl MCP HTTP server listening on http://${HOST}:${PORT}/mcp`);
213
+ app.get("/mcp", bearerAuth, async (req, res) => {
214
+ console.log(`[OAuth /mcp GET] auth.clientId=${req.auth?.clientId}`);
215
+ await handleMcpGet(req, res);
131
216
  });
132
- // Graceful shutdown
133
- process.on("SIGINT", async () => {
134
- console.log("Shutting down...");
135
- for (const sid of Object.keys(sessions)) {
136
- await sessions[sid].transport.close().catch(() => { });
137
- delete sessions[sid];
138
- }
139
- process.exit(0);
217
+ app.delete("/mcp", bearerAuth, async (req, res) => {
218
+ console.log(`[OAuth /mcp DELETE] auth.clientId=${req.auth?.clientId}`);
219
+ await handleMcpDelete(req, res);
140
220
  });
141
221
  }
142
222
  //# sourceMappingURL=transport-http.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transport-http.js","sourceRoot":"","sources":["../src/transport-http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transport-http.js","sourceRoot":"","sources":["../src/transport-http.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bycrawl/mcp",
3
- "version": "0.4.2",
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"
@@ -18,7 +18,7 @@
18
18
  "test": "vitest run",
19
19
  "test:smoke": "vitest run tests/smoke.test.ts",
20
20
  "test:smoke-http": "vitest run tests/smoke-http.test.ts",
21
- "test:unit": "vitest run tests/client.unit.test.ts",
21
+ "test:unit": "vitest run tests/client.unit.test.ts tests/oauth.unit.test.ts",
22
22
  "test:integration": "vitest run tests/platforms/",
23
23
  "test:integration:slow": "INCLUDE_SLOW=true vitest run tests/platforms/",
24
24
  "test:watch": "vitest"
@@ -45,8 +45,9 @@
45
45
  "homepage": "https://bycrawl.com",
46
46
  "license": "MIT",
47
47
  "dependencies": {
48
- "@modelcontextprotocol/sdk": "^1.12.1",
48
+ "@modelcontextprotocol/sdk": ">=1.12.1 <2.0.0",
49
49
  "express": "^5.1.0",
50
+ "jose": "^6.0.0",
50
51
  "zod": "^3.24.2"
51
52
  },
52
53
  "devDependencies": {