@bycrawl/mcp 0.4.1 → 0.5.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 (51) 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 +2 -2
  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 +21 -8
  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/instagram.js +5 -5
  29. package/build/tools/instagram.js.map +1 -1
  30. package/build/tools/job104.js +3 -3
  31. package/build/tools/job104.js.map +1 -1
  32. package/build/tools/linkedin.js +9 -9
  33. package/build/tools/linkedin.js.map +1 -1
  34. package/build/tools/reddit.js +16 -5
  35. package/build/tools/reddit.js.map +1 -1
  36. package/build/tools/system.js +2 -1
  37. package/build/tools/system.js.map +1 -1
  38. package/build/tools/threads.js +8 -8
  39. package/build/tools/threads.js.map +1 -1
  40. package/build/tools/tiktok.js +8 -8
  41. package/build/tools/tiktok.js.map +1 -1
  42. package/build/tools/x.js +5 -5
  43. package/build/tools/x.js.map +1 -1
  44. package/build/tools/youtube.js +5 -7
  45. package/build/tools/youtube.js.map +1 -1
  46. package/build/transport-http.js +146 -66
  47. package/build/transport-http.js.map +1 -1
  48. package/package.json +6 -6
  49. package/build/tools/xiaohongshu.d.ts +0 -2
  50. package/build/tools/xiaohongshu.js +0 -31
  51. package/build/tools/xiaohongshu.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"dcard.js","sourceRoot":"","sources":["../../src/tools/dcard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,wBAAwB,EACxB,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,EAChD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAC3D,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,+BAA+B,EAC/B;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC5C,IAAI,EAAE,CAAC;aACJ,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;aACrC,QAAQ,EAAE;aACV,QAAQ,CAAC,YAAY,CAAC;KAC1B,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CACzB,UAAU,CAAC,gBAAgB,MAAM,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAC1D,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,+BAA+B,EAC/B,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC,EAAE,EACzE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAC1D,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,8BAA8B,EAC9B;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QACrE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAC/D,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KACpE,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAClC,UAAU,CAAC,iBAAiB,KAAK,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CACjE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,+BAA+B,EAC/B;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,2BAA2B,CAAC;QAClE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KAChE,EACD,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAC7B,UAAU,CAAC,qBAAqB,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAC1D,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,4BAA4B,EAC5B,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EACjD,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,mBAAmB,GAAG,EAAE,CAAC,CACxD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"dcard.js","sourceRoot":"","sources":["../../src/tools/dcard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,+BAA+B,EAC/B,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC,EAAE,EACzE,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,iBAAiB,KAAK,EAAE,CAAC,CAC1D,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,8BAA8B,EAC9B;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QACrE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QAC/D,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KACpE,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAClC,UAAU,CAAC,iBAAiB,KAAK,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CACjE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,+BAA+B,EAC/B;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,2BAA2B,CAAC;QAClE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KAChE,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAC7B,UAAU,CAAC,qBAAqB,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAC1D,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,iCAAiC,EACjC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EACnD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAClE,CAAC;AACJ,CAAC"}
@@ -1,17 +1,30 @@
1
1
  import { z } from "zod";
2
2
  import { bycrawlGet } from "../client.js";
3
3
  export function registerFacebookTools(server) {
4
- server.tool("facebook_get_page", "Get Facebook page profile by username", { username: z.string().describe("Facebook page username") }, async ({ username }) => bycrawlGet(`/facebook/users/${username}`));
5
- server.tool("facebook_get_page_posts", "Get Facebook page posts by username", { username: z.string().describe("Facebook page username") }, async ({ username }) => bycrawlGet(`/facebook/users/${username}/posts`));
6
- server.tool("facebook_get_post", "Get a Facebook post by URL (supports posts, reels, videos, share links)", { url: z.string().describe("Facebook post URL") }, async ({ url }) => bycrawlGet("/facebook/posts", { url }));
4
+ server.tool("facebook_get_page", "Get Facebook page profile by username", { username: z.string().describe("Facebook page username") }, { readOnlyHint: true }, async ({ username }) => bycrawlGet(`/facebook/users/${username}`));
5
+ server.tool("facebook_get_page_posts", "Get Facebook page posts by username", {
6
+ username: z.string().describe("Facebook page username"),
7
+ count: z.number().optional().describe("Number of posts (1-10, default 3)"),
8
+ }, { readOnlyHint: true }, async ({ username, count }) => bycrawlGet(`/facebook/users/${username}/posts`, { count }));
9
+ server.tool("facebook_get_post", "Get a Facebook post by URL (supports posts, reels, videos, share links)", { url: z.string().describe("Facebook post URL") }, { readOnlyHint: true }, async ({ url }) => bycrawlGet("/facebook/posts", { url }));
7
10
  server.tool("facebook_search_posts", "Search public Facebook posts by keyword", {
8
11
  query: z.string().describe("Search keyword"),
9
- count: z.number().optional().describe("Number of results (max 5)"),
10
- cursor: z.string().optional().describe("Pagination cursor"),
11
- }, async ({ query, count, cursor }) => bycrawlGet("/facebook/posts/search", { q: query, count, cursor }));
12
+ count: z.number().optional().describe("Number of results (max 10, default 5)"),
13
+ }, { readOnlyHint: true }, async ({ query, count }) => bycrawlGet("/facebook/posts/search", { q: query, count }));
12
14
  server.tool("facebook_get_post_comments", "Get comments on a Facebook post by URL", {
13
15
  url: z.string().describe("Facebook post URL"),
14
- cursor: z.string().optional().describe("Pagination cursor"),
15
- }, async ({ url, cursor }) => bycrawlGet("/facebook/posts/comments", { url, cursor }));
16
+ }, { readOnlyHint: true }, async ({ url }) => bycrawlGet("/facebook/posts/comments", { url }));
17
+ server.tool("facebook_marketplace_browse", "Browse Facebook Marketplace listings by location and category", {
18
+ location: z.string().optional().describe("Location slug (e.g. 'taipei', 'newyork')"),
19
+ category: z.string().optional().describe("Category slug (e.g. 'vehicles', 'electronics')"),
20
+ }, { readOnlyHint: true }, async ({ location, category }) => bycrawlGet("/facebook/marketplace/listings", { location, category }));
21
+ server.tool("facebook_marketplace_search", "Search Facebook Marketplace listings by keyword", {
22
+ query: z.string().describe("Search keyword"),
23
+ location: z.string().optional().describe("Location slug (e.g. 'taipei', 'newyork')"),
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 }));
26
+ server.tool("facebook_marketplace_item", "Get detailed Facebook Marketplace listing by ID", {
27
+ listing_id: z.string().describe("Marketplace listing ID"),
28
+ }, { readOnlyHint: true }, async ({ listing_id }) => bycrawlGet(`/facebook/marketplace/items/${listing_id}`));
16
29
  }
17
30
  //# sourceMappingURL=facebook.js.map
@@ -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,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,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,EAC3D,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,mBAAmB,QAAQ,QAAQ,CAAC,CACxE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,yEAAyE,EACzE,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EACjD,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,2BAA2B,CAAC;QAClE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KAC5D,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,wBAAwB,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CACtG,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,wCAAwC,EACxC;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC7C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KAC5D,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,0BAA0B,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CACnF,CAAC;AACJ,CAAC"}
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 registerGmapsTools(server: McpServer): void;
@@ -0,0 +1,13 @@
1
+ import { z } from "zod";
2
+ import { bycrawlGet } from "../client.js";
3
+ export function registerGmapsTools(server) {
4
+ server.tool("gmaps_search_places", "Search Google Maps for places matching a query", {
5
+ q: z.string().describe("Search query (e.g. 'coffee shops in Tokyo')"),
6
+ language: z.string().optional().describe("Language code (e.g. 'en', 'ja', 'zh-TW')"),
7
+ }, { readOnlyHint: true }, async ({ q, language }) => bycrawlGet("/gmaps/places/search", { q, language }));
8
+ server.tool("gmaps_get_place", "Get detailed information about a Google Maps place", {
9
+ query: z.string().describe("Place name or full Google Maps URL"),
10
+ language: z.string().optional().describe("Language code (e.g. 'en', 'ja', 'zh-TW')"),
11
+ }, { readOnlyHint: true }, async ({ query, language }) => bycrawlGet("/gmaps/places", { query, language }));
12
+ }
13
+ //# sourceMappingURL=gmaps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gmaps.js","sourceRoot":"","sources":["../../src/tools/gmaps.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IAClD,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,gDAAgD,EAChD;QACE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QACrE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;KACrF,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,sBAAsB,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAC/E,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,oDAAoD,EACpD;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAChE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;KACrF,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAChF,CAAC;AACJ,CAAC"}
@@ -1,19 +1,19 @@
1
1
  import { z } from "zod";
2
2
  import { bycrawlGet } from "../client.js";
3
3
  export function registerInstagramTools(server) {
4
- server.tool("instagram_search_tags", "Search Instagram hashtags by keyword", { query: z.string().describe("Hashtag to search") }, async ({ query }) => bycrawlGet("/instagram/tags/search", { q: query }));
5
- server.tool("instagram_get_user", "Get Instagram user profile with recent posts", { username: z.string().describe("Instagram username") }, async ({ username }) => bycrawlGet(`/instagram/users/${username}`));
6
- server.tool("instagram_get_post", "Get Instagram post by shortcode", { shortcode: z.string().describe("Post shortcode (from URL, e.g. CxBcDeFgHiJ)") }, async ({ shortcode }) => bycrawlGet(`/instagram/posts/${shortcode}`));
4
+ server.tool("instagram_search_tags", "Search Instagram hashtags by keyword", { query: z.string().describe("Hashtag to search") }, { readOnlyHint: true }, async ({ query }) => bycrawlGet("/instagram/tags/search", { q: query }));
5
+ server.tool("instagram_get_user", "Get Instagram user profile with recent posts", { username: z.string().describe("Instagram username") }, { readOnlyHint: true }, async ({ username }) => bycrawlGet(`/instagram/users/${username}`));
6
+ server.tool("instagram_get_post", "Get Instagram post by shortcode", { shortcode: z.string().describe("Post shortcode (from URL, e.g. CxBcDeFgHiJ)") }, { readOnlyHint: true }, async ({ shortcode }) => bycrawlGet(`/instagram/posts/${shortcode}`));
7
7
  server.tool("instagram_get_post_comments", "Get comments on an Instagram post with pagination", {
8
8
  shortcode: z.string().describe("Post shortcode"),
9
9
  cursor: z.string().optional().describe("Pagination cursor from previous response"),
10
- }, async ({ shortcode, cursor }) => bycrawlGet(`/instagram/posts/${shortcode}/comments`, {
10
+ }, { readOnlyHint: true }, async ({ shortcode, cursor }) => bycrawlGet(`/instagram/posts/${shortcode}/comments`, {
11
11
  ...(cursor ? { cursor } : {}),
12
12
  }));
13
13
  server.tool("instagram_get_user_posts", "Get an Instagram user's posts with pagination", {
14
14
  username: z.string().describe("Instagram username"),
15
15
  cursor: z.string().optional().describe("Pagination cursor from previous response"),
16
- }, async ({ username, cursor }) => bycrawlGet(`/instagram/users/${username}/posts`, {
16
+ }, { readOnlyHint: true }, async ({ username, cursor }) => bycrawlGet(`/instagram/users/${username}/posts`, {
17
17
  ...(cursor ? { cursor } : {}),
18
18
  }));
19
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"instagram.js","sourceRoot":"","sources":["../../src/tools/instagram.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,sCAAsC,EACtC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EACnD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,wBAAwB,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CACxE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,8CAA8C,EAC9C,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,EACvD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CACnE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,iCAAiC,EACjC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC,EAAE,EACjF,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,oBAAoB,SAAS,EAAE,CAAC,CACrE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,6BAA6B,EAC7B,mDAAmD,EACnD;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;KACnF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAC9B,UAAU,CAAC,oBAAoB,SAAS,WAAW,EAAE;QACnD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9B,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,0BAA0B,EAC1B,+CAA+C,EAC/C;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACnD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;KACnF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAC7B,UAAU,CAAC,oBAAoB,QAAQ,QAAQ,EAAE;QAC/C,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9B,CAAC,CACL,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"instagram.js","sourceRoot":"","sources":["../../src/tools/instagram.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,sCAAsC,EACtC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EACnD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,wBAAwB,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CACxE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,8CAA8C,EAC9C,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,EACvD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,oBAAoB,QAAQ,EAAE,CAAC,CACnE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,iCAAiC,EACjC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC,EAAE,EACjF,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,oBAAoB,SAAS,EAAE,CAAC,CACrE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,6BAA6B,EAC7B,mDAAmD,EACnD;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;KACnF,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAC9B,UAAU,CAAC,oBAAoB,SAAS,WAAW,EAAE;QACnD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9B,CAAC,CACL,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,0BAA0B,EAC1B,+CAA+C,EAC/C;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACnD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;KACnF,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAC7B,UAAU,CAAC,oBAAoB,QAAQ,QAAQ,EAAE;QAC/C,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9B,CAAC,CACL,CAAC;AACJ,CAAC"}
@@ -7,8 +7,8 @@ export function registerJob104Tools(server) {
7
7
  area: z.string().optional().describe("Area code filter (e.g. 6001001000)"),
8
8
  page: z.number().optional().describe("Page number (default 1)"),
9
9
  count: z.number().optional().describe("Results per page (max 100, default 20)"),
10
- }, async ({ q, welfare, area, page, count }) => bycrawlGet("/job104/jobs/search", { q, welfare, area, page, count }));
11
- server.tool("job104_get_company", "Get company details from 104.com.tw", { companyId: z.string().describe("104.com.tw company ID") }, async ({ companyId }) => bycrawlGet(`/job104/companies/${companyId}`));
12
- server.tool("job104_get_job", "Get job details (with contact email) from 104.com.tw", { jobId: z.string().describe("104.com.tw job ID") }, async ({ jobId }) => bycrawlGet(`/job104/jobs/${jobId}`));
10
+ }, { readOnlyHint: true }, async ({ q, welfare, area, page, count }) => bycrawlGet("/job104/jobs/search", { q, welfare, area, page, count }));
11
+ server.tool("job104_get_company", "Get company details from 104.com.tw", { companyId: z.string().describe("104.com.tw company ID") }, { readOnlyHint: true }, async ({ companyId }) => bycrawlGet(`/job104/companies/${companyId}`));
12
+ server.tool("job104_get_job", "Get job details (with contact email) from 104.com.tw", { jobId: z.string().describe("104.com.tw job ID") }, { readOnlyHint: true }, async ({ jobId }) => bycrawlGet(`/job104/jobs/${jobId}`));
13
13
  }
14
14
  //# sourceMappingURL=job104.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"job104.js","sourceRoot":"","sources":["../../src/tools/job104.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,gCAAgC,EAChC;QACE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACnD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAC9D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAC1E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KAChF,EACD,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,qBAAqB,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAClH,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,qCAAqC,EACrC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,EAC3D,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,qBAAqB,SAAS,EAAE,CAAC,CACtE,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,sDAAsD,EACtD,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EACnD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,gBAAgB,KAAK,EAAE,CAAC,CACzD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"job104.js","sourceRoot":"","sources":["../../src/tools/job104.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,gCAAgC,EAChC;QACE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACnD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAC9D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAC1E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAC/D,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,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,qBAAqB,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAClH,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,qCAAqC,EACrC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,EAC3D,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,gBAAgB,EAChB,sDAAsD,EACtD,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EACnD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,gBAAgB,KAAK,EAAE,CAAC,CACzD,CAAC;AACJ,CAAC"}
@@ -1,25 +1,25 @@
1
1
  import { z } from "zod";
2
2
  import { bycrawlGet } from "../client.js";
3
3
  export function registerLinkedinTools(server) {
4
- server.tool("linkedin_get_company", "Get LinkedIn company profile", { companyId: z.string().describe("Company ID or vanity name (e.g. 'microsoft')") }, async ({ companyId }) => bycrawlGet(`/linkedin/companies/${companyId}`));
4
+ server.tool("linkedin_get_company", "Get LinkedIn company profile", { companyId: z.string().describe("Company ID or vanity name (e.g. 'microsoft')") }, { readOnlyHint: true }, async ({ companyId }) => bycrawlGet(`/linkedin/companies/${companyId}`));
5
5
  server.tool("linkedin_get_company_jobs", "Get job listings for a LinkedIn company", {
6
6
  companyId: z.string().describe("Company ID or vanity name"),
7
7
  count: z.number().optional().describe("Number of jobs (max 100)"),
8
8
  offset: z.number().optional().describe("Pagination offset"),
9
- }, async ({ companyId, count, offset }) => bycrawlGet(`/linkedin/companies/${companyId}/jobs`, { count, offset }));
9
+ }, { readOnlyHint: true }, async ({ companyId, count, offset }) => bycrawlGet(`/linkedin/companies/${companyId}/jobs`, { count, offset }));
10
10
  server.tool("linkedin_search_jobs", "Search LinkedIn job listings by keyword", {
11
- query: z.string().describe("Search keywords (e.g. 'software engineer')"),
11
+ q: z.string().describe("Search keywords (e.g. 'software engineer')"),
12
12
  location: z.string().optional().describe("Location filter (e.g. 'San Francisco')"),
13
13
  count: z.number().optional().describe("Number of results (max 100)"),
14
14
  offset: z.number().optional().describe("Pagination offset"),
15
- }, async ({ query, location, count, offset }) => bycrawlGet("/linkedin/jobs/search", { query, location, count, offset }));
16
- server.tool("linkedin_get_job", "Get a LinkedIn job posting by ID", { jobId: z.string().describe("LinkedIn job ID") }, async ({ jobId }) => bycrawlGet(`/linkedin/jobs/${jobId}`));
17
- server.tool("linkedin_get_post", "Get a LinkedIn post by ID", { postId: z.string().describe("LinkedIn post or article ID") }, async ({ postId }) => bycrawlGet(`/linkedin/posts/${postId}`));
15
+ }, { readOnlyHint: true }, async ({ q, location, count, offset }) => bycrawlGet("/linkedin/jobs/search", { q, location, count, offset }));
16
+ server.tool("linkedin_get_job", "Get a LinkedIn job posting by ID", { jobId: z.string().describe("LinkedIn job ID") }, { readOnlyHint: true }, async ({ jobId }) => bycrawlGet(`/linkedin/jobs/${jobId}`));
17
+ server.tool("linkedin_get_post", "Get a LinkedIn post by ID", { postId: z.string().describe("LinkedIn post or article ID") }, { readOnlyHint: true }, async ({ postId }) => bycrawlGet(`/linkedin/posts/${postId}`));
18
18
  server.tool("linkedin_search_users", "Search LinkedIn users/people by keyword", {
19
- query: z.string().describe("Search keywords (e.g. 'software engineer')"),
19
+ q: z.string().describe("Search keywords (e.g. 'software engineer')"),
20
20
  count: z.number().optional().describe("Number of results (max 100)"),
21
21
  offset: z.number().optional().describe("Pagination offset"),
22
- }, async ({ query, count, offset }) => bycrawlGet("/linkedin/users/search", { query, count, offset }));
23
- server.tool("linkedin_get_user", "Get LinkedIn user profile by username", { username: z.string().describe("LinkedIn username or profile URL slug") }, async ({ username }) => bycrawlGet(`/linkedin/users/${username}`));
22
+ }, { readOnlyHint: true }, async ({ q, count, offset }) => bycrawlGet("/linkedin/users/search", { q, count, offset }));
23
+ server.tool("linkedin_get_user", "Get LinkedIn user profile by username", { username: z.string().describe("LinkedIn username or profile URL slug") }, { readOnlyHint: true }, async ({ username }) => bycrawlGet(`/linkedin/users/${username}`));
24
24
  }
25
25
  //# sourceMappingURL=linkedin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"linkedin.js","sourceRoot":"","sources":["../../src/tools/linkedin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"linkedin.js","sourceRoot":"","sources":["../../src/tools/linkedin.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,29 @@
1
1
  import { z } from "zod";
2
2
  import { bycrawlGet } from "../client.js";
3
3
  export function registerRedditTools(server) {
4
- server.tool("reddit_get_subreddit", "Get subreddit info by name", { name: z.string().describe("Subreddit name (without r/)") }, async ({ name }) => bycrawlGet(`/reddit/subreddits/${name}`));
4
+ server.tool("reddit_get_subreddit", "Get subreddit info by name", { name: z.string().describe("Subreddit name (without r/)") }, { readOnlyHint: true }, async ({ name }) => bycrawlGet(`/reddit/subreddits/${name}`));
5
5
  server.tool("reddit_get_subreddit_posts", "Get posts from a subreddit", {
6
6
  name: z.string().describe("Subreddit name (without r/)"),
7
7
  sort: z.enum(["hot", "new", "top", "rising"]).optional().describe("Sort order"),
8
+ t: z.enum(["hour", "day", "week", "month", "year", "all"]).optional().describe("Time filter for sort=top"),
8
9
  count: z.number().optional().describe("Number of posts (max 100)"),
9
- }, async ({ name, sort, count }) => bycrawlGet(`/reddit/subreddits/${name}/posts`, { sort, count }));
10
+ after: z.string().optional().describe("Pagination cursor from previous response"),
11
+ }, { readOnlyHint: true }, async ({ name, sort, t, count, after }) => bycrawlGet(`/reddit/subreddits/${name}/posts`, { sort, t, count, after }));
10
12
  server.tool("reddit_search_posts", "Search Reddit posts by keyword", {
11
13
  query: z.string().describe("Search query"),
12
14
  sort: z.enum(["relevance", "hot", "top", "new", "comments"]).optional().describe("Sort order"),
15
+ t: z.enum(["hour", "day", "week", "month", "year", "all"]).optional().describe("Time filter for sort=top"),
13
16
  count: z.number().optional().describe("Number of results (max 100)"),
14
- }, async ({ query, sort, count }) => bycrawlGet("/reddit/posts/search", { q: query, sort, count }));
15
- server.tool("reddit_get_post", "Get a Reddit post by ID", { postId: z.string().describe("Reddit post ID") }, async ({ postId }) => bycrawlGet(`/reddit/posts/${postId}`));
16
- server.tool("reddit_get_user", "Get Reddit user profile by username", { username: z.string().describe("Reddit username") }, async ({ username }) => bycrawlGet(`/reddit/users/${username}`));
17
+ after: z.string().optional().describe("Pagination cursor from previous response"),
18
+ }, { readOnlyHint: true }, async ({ query, sort, t, count, after }) => bycrawlGet("/reddit/posts/search", { q: query, sort, t, count, after }));
19
+ server.tool("reddit_get_post", "Get a Reddit post by ID", { postId: z.string().describe("Reddit post ID") }, { readOnlyHint: true }, async ({ postId }) => bycrawlGet(`/reddit/posts/${postId}`));
20
+ server.tool("reddit_get_user", "Get Reddit user profile by username", { username: z.string().describe("Reddit username") }, { readOnlyHint: true }, async ({ username }) => bycrawlGet(`/reddit/users/${username}`));
21
+ server.tool("reddit_get_user_posts", "Get posts submitted by a Reddit user", {
22
+ username: z.string().describe("Reddit username"),
23
+ sort: z.enum(["new", "hot", "top"]).optional().describe("Sort order"),
24
+ t: z.enum(["hour", "day", "week", "month", "year", "all"]).optional().describe("Time filter for sort=top"),
25
+ count: z.number().optional().describe("Number of posts (max 100)"),
26
+ after: z.string().optional().describe("Pagination cursor from previous response"),
27
+ }, { readOnlyHint: true }, async ({ username, sort, t, count, after }) => bycrawlGet(`/reddit/users/${username}/posts`, { sort, t, count, after }));
17
28
  }
18
29
  //# sourceMappingURL=reddit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reddit.js","sourceRoot":"","sources":["../../src/tools/reddit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,4BAA4B,EAC5B,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,EAC5D,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAC7D,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,4BAA4B,EAC5B;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACxD,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC/E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KACnE,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,sBAAsB,IAAI,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CACjG,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,gCAAgC,EAChC;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC1C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC9F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KACrE,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,sBAAsB,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAChG,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,yBAAyB,EACzB,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EACjD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAC5D,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,qCAAqC,EACrC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,EACpD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAChE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"reddit.js","sourceRoot":"","sources":["../../src/tools/reddit.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { bycrawlGet } from "../client.js";
2
2
  export function registerSystemTools(server) {
3
- server.tool("bycrawl_health", "Check ByCrawl API health status", {}, async () => bycrawlGet("/health"));
3
+ server.tool("bycrawl_health", "Check ByCrawl API health status", {}, { readOnlyHint: true }, async () => bycrawlGet("/health"));
4
+ server.tool("bycrawl_get_account", "Get current account info: plan, credits, subscription status, and API key details", {}, { readOnlyHint: true }, async () => bycrawlGet("/account"));
4
5
  }
5
6
  //# sourceMappingURL=system.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/tools/system.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,iCAAiC,EACjC,EAAE,EACF,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAClC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/tools/system.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,mBAAmB,CAAC,MAAiB;IACnD,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,iCAAiC,EACjC,EAAE,EACF,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAClC,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,mFAAmF,EACnF,EAAE,EACF,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CACnC,CAAC;AACJ,CAAC"}
@@ -6,25 +6,25 @@ export function registerThreadsTools(server) {
6
6
  count: z.number().optional().describe("Number of results (max 25)"),
7
7
  search_type: z.string().optional().describe("Sort order: top (default) or recent"),
8
8
  cursor: z.string().optional().describe("Pagination cursor from previous response"),
9
- }, async ({ query, count, search_type, cursor }) => bycrawlGet("/threads/posts/search", { q: query, count, search_type, cursor }));
10
- server.tool("threads_get_post", "Get a single Threads post by ID or shortcode", { postId: z.string().describe("Post ID or shortcode"), mode: z.enum(["full"]).optional().describe("Use 'full' for view counts") }, async ({ postId, mode }) => bycrawlGet(`/threads/posts/${postId}`, { mode }));
11
- server.tool("threads_get_posts_batch", "Get multiple Threads posts by IDs (batch)", { ids: z.string().describe("Comma-separated post IDs or shortcodes"), mode: z.enum(["full"]).optional().describe("Use 'full' for view counts") }, async ({ ids, mode }) => bycrawlGet("/threads/posts", { ids, mode }));
12
- server.tool("threads_search_users", "Search Threads users by username or name", { query: z.string().describe("Search query"), count: z.number().optional().describe("Number of results (max 25)") }, async ({ query, count }) => bycrawlGet("/threads/users/search", { q: query, count }));
13
- server.tool("threads_get_user", "Get a Threads user profile by username", { username: z.string().describe("Username") }, async ({ username }) => bycrawlGet(`/threads/users/${username}`));
9
+ }, { readOnlyHint: true }, async ({ query, count, search_type, cursor }) => bycrawlGet("/threads/posts/search", { q: query, count, search_type, cursor }));
10
+ server.tool("threads_get_post", "Get a single Threads post by ID or shortcode", { postId: z.string().describe("Post ID or shortcode"), mode: z.enum(["full"]).optional().describe("Use 'full' for view counts") }, { readOnlyHint: true }, async ({ postId, mode }) => bycrawlGet(`/threads/posts/${postId}`, { mode }));
11
+ server.tool("threads_get_posts_batch", "Get multiple Threads posts by IDs (batch)", { ids: z.string().describe("Comma-separated post IDs or shortcodes"), mode: z.enum(["full"]).optional().describe("Use 'full' for view counts") }, { readOnlyHint: true }, async ({ ids, mode }) => bycrawlGet("/threads/posts", { ids, mode }));
12
+ server.tool("threads_search_users", "Search Threads users by username or name", { query: z.string().describe("Search query"), count: z.number().optional().describe("Number of results (max 25)") }, { readOnlyHint: true }, async ({ query, count }) => bycrawlGet("/threads/users/search", { q: query, count }));
13
+ server.tool("threads_get_user", "Get a Threads user profile by username", { username: z.string().describe("Username") }, { readOnlyHint: true }, async ({ username }) => bycrawlGet(`/threads/users/${username}`));
14
14
  server.tool("threads_get_user_posts", "Get a Threads user's posts with pagination", {
15
15
  userId: z.string().describe("Numeric user ID"),
16
16
  cursor: z.string().optional().describe("Pagination cursor"),
17
17
  count: z.number().optional().describe("Number of results"),
18
- }, async ({ userId, cursor, count }) => bycrawlGet(`/threads/users/${userId}/posts`, { cursor, count }));
18
+ }, { readOnlyHint: true }, async ({ userId, cursor, count }) => bycrawlGet(`/threads/users/${userId}/posts`, { cursor, count }));
19
19
  server.tool("threads_get_user_replies", "Get a Threads user's replies with pagination", {
20
20
  userId: z.string().describe("Numeric user ID"),
21
21
  cursor: z.string().optional().describe("Pagination cursor"),
22
22
  count: z.number().optional().describe("Number of results"),
23
- }, async ({ userId, cursor, count }) => bycrawlGet(`/threads/users/${userId}/replies`, { cursor, count }));
23
+ }, { readOnlyHint: true }, async ({ userId, cursor, count }) => bycrawlGet(`/threads/users/${userId}/replies`, { cursor, count }));
24
24
  server.tool("threads_get_public_feed", "Get Threads public For You feed", {
25
25
  cursor: z.string().optional().describe("Pagination cursor"),
26
26
  count: z.number().optional().describe("Number of items"),
27
27
  country: z.string().optional().describe("Country code (default: TW)"),
28
- }, async ({ cursor, count, country }) => bycrawlGet("/threads/feed/public", { cursor, count, country }));
28
+ }, { readOnlyHint: true }, async ({ cursor, count, country }) => bycrawlGet("/threads/feed/public", { cursor, count, country }));
29
29
  }
30
30
  //# sourceMappingURL=threads.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"threads.js","sourceRoot":"","sources":["../../src/tools/threads.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"threads.js","sourceRoot":"","sources":["../../src/tools/threads.ts"],"names":[],"mappings":"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"}
@@ -1,30 +1,30 @@
1
1
  import { z } from "zod";
2
2
  import { bycrawlGet } from "../client.js";
3
3
  export function registerTiktokTools(server) {
4
- server.tool("tiktok_get_video", "Get TikTok video metadata by video ID", { videoId: z.string().describe("TikTok video ID") }, async ({ videoId }) => bycrawlGet(`/tiktok/videos/${videoId}`));
4
+ server.tool("tiktok_get_video", "Get TikTok video metadata by video ID", { videoId: z.string().describe("TikTok video ID") }, { readOnlyHint: true }, async ({ videoId }) => bycrawlGet(`/tiktok/videos/${videoId}`));
5
5
  server.tool("tiktok_get_user", "Get TikTok user info and recent videos", {
6
6
  username: z.string().describe("TikTok username"),
7
7
  count: z.number().optional().describe("Number of recent videos (max 50)"),
8
- }, async ({ username, count }) => bycrawlGet(`/tiktok/users/${username}`, { count }));
8
+ }, { readOnlyHint: true }, async ({ username, count }) => bycrawlGet(`/tiktok/users/${username}`, { count }));
9
9
  server.tool("tiktok_get_user_videos", "Get TikTok user's video list", {
10
10
  username: z.string().describe("TikTok username"),
11
11
  count: z.number().optional().describe("Number of videos (max 50)"),
12
- }, async ({ username, count }) => bycrawlGet(`/tiktok/users/${username}/videos`, { count }));
12
+ }, { readOnlyHint: true }, async ({ username, count }) => bycrawlGet(`/tiktok/users/${username}/videos`, { count }));
13
13
  server.tool("tiktok_get_category_videos", "Browse TikTok videos by category", {
14
14
  category: z.string().optional().describe("Category name (e.g. Food, Dance, Comedy). Omit for trending"),
15
15
  count: z.number().optional().describe("Number of videos (max 50)"),
16
- }, async ({ category, count }) => bycrawlGet("/tiktok/categories", { category, count }));
16
+ }, { readOnlyHint: true }, async ({ category, count }) => bycrawlGet("/tiktok/categories", { category, count }));
17
17
  server.tool("tiktok_get_video_comments", "Get comments for a TikTok video", {
18
18
  videoId: z.string().describe("TikTok video ID"),
19
19
  cursor: z.string().optional().describe("Pagination cursor from previous response"),
20
- }, async ({ videoId, cursor }) => bycrawlGet(`/tiktok/videos/${videoId}/comments`, { cursor }));
20
+ }, { readOnlyHint: true }, async ({ videoId, cursor }) => bycrawlGet(`/tiktok/videos/${videoId}/comments`, { cursor }));
21
21
  server.tool("tiktok_search_videos", "Search TikTok videos by keyword", {
22
- keyword: z.string().describe("Search keyword"),
22
+ q: z.string().describe("Search query"),
23
23
  count: z.number().optional().describe("Number of results (max 30)"),
24
- }, async ({ keyword, count }) => bycrawlGet("/tiktok/search", { keyword, count }));
24
+ }, { readOnlyHint: true }, async ({ q, count }) => bycrawlGet("/tiktok/videos/search", { q, count }));
25
25
  server.tool("tiktok_get_video_subtitles", "Get subtitles/captions for a TikTok video", {
26
26
  videoId: z.string().describe("TikTok video ID"),
27
27
  language: z.string().optional().describe("Subtitle language code (e.g. en, ja, ko, zh-Hans)"),
28
- }, async ({ videoId, language }) => bycrawlGet(`/tiktok/videos/${videoId}/subtitles`, { language }));
28
+ }, { readOnlyHint: true }, async ({ videoId, language }) => bycrawlGet(`/tiktok/videos/${videoId}/subtitles`, { language }));
29
29
  }
30
30
  //# sourceMappingURL=tiktok.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tiktok.js","sourceRoot":"","sources":["../../src/tools/tiktok.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tiktok.js","sourceRoot":"","sources":["../../src/tools/tiktok.ts"],"names":[],"mappings":"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"}
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"}