@scavio/mcp-server 0.12.0 → 0.13.1

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 (101) hide show
  1. package/README.md +365 -4
  2. package/dist/index.js +26 -7
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/env.d.ts +1 -0
  5. package/dist/lib/env.js +4 -0
  6. package/dist/lib/env.js.map +1 -1
  7. package/dist/lib/tool-error.d.ts +22 -0
  8. package/dist/lib/tool-error.js +28 -0
  9. package/dist/lib/tool-error.js.map +1 -0
  10. package/dist/tools/airbnb.d.ts +3 -0
  11. package/dist/tools/airbnb.js +121 -0
  12. package/dist/tools/airbnb.js.map +1 -0
  13. package/dist/tools/amazon.js +1 -12
  14. package/dist/tools/amazon.js.map +1 -1
  15. package/dist/tools/appstore.d.ts +3 -0
  16. package/dist/tools/appstore.js +59 -0
  17. package/dist/tools/appstore.js.map +1 -0
  18. package/dist/tools/booking.d.ts +3 -0
  19. package/dist/tools/booking.js +116 -0
  20. package/dist/tools/booking.js.map +1 -0
  21. package/dist/tools/capterra.d.ts +3 -0
  22. package/dist/tools/capterra.js +53 -0
  23. package/dist/tools/capterra.js.map +1 -0
  24. package/dist/tools/companieshouse.d.ts +3 -0
  25. package/dist/tools/companieshouse.js +56 -0
  26. package/dist/tools/companieshouse.js.map +1 -0
  27. package/dist/tools/ebay.d.ts +3 -0
  28. package/dist/tools/ebay.js +79 -0
  29. package/dist/tools/ebay.js.map +1 -0
  30. package/dist/tools/extract.d.ts +3 -0
  31. package/dist/tools/extract.js +21 -0
  32. package/dist/tools/extract.js.map +1 -0
  33. package/dist/tools/g2.d.ts +3 -0
  34. package/dist/tools/g2.js +69 -0
  35. package/dist/tools/g2.js.map +1 -0
  36. package/dist/tools/glassdoor.d.ts +3 -0
  37. package/dist/tools/glassdoor.js +72 -0
  38. package/dist/tools/glassdoor.js.map +1 -0
  39. package/dist/tools/google.js +1 -12
  40. package/dist/tools/google.js.map +1 -1
  41. package/dist/tools/googleads.d.ts +3 -0
  42. package/dist/tools/googleads.js +61 -0
  43. package/dist/tools/googleads.js.map +1 -0
  44. package/dist/tools/googleplay.d.ts +3 -0
  45. package/dist/tools/googleplay.js +57 -0
  46. package/dist/tools/googleplay.js.map +1 -0
  47. package/dist/tools/homedepot.d.ts +3 -0
  48. package/dist/tools/homedepot.js +71 -0
  49. package/dist/tools/homedepot.js.map +1 -0
  50. package/dist/tools/indeed.d.ts +3 -0
  51. package/dist/tools/indeed.js +98 -0
  52. package/dist/tools/indeed.js.map +1 -0
  53. package/dist/tools/index.d.ts +42 -1
  54. package/dist/tools/index.js +204 -15
  55. package/dist/tools/index.js.map +1 -1
  56. package/dist/tools/instagram.js +1 -12
  57. package/dist/tools/instagram.js.map +1 -1
  58. package/dist/tools/kuaishou.d.ts +3 -0
  59. package/dist/tools/kuaishou.js +207 -0
  60. package/dist/tools/kuaishou.js.map +1 -0
  61. package/dist/tools/linkedin.js +1 -12
  62. package/dist/tools/linkedin.js.map +1 -1
  63. package/dist/tools/metaads.d.ts +3 -0
  64. package/dist/tools/metaads.js +63 -0
  65. package/dist/tools/metaads.js.map +1 -0
  66. package/dist/tools/reddit.js +1 -12
  67. package/dist/tools/reddit.js.map +1 -1
  68. package/dist/tools/redfin.d.ts +3 -0
  69. package/dist/tools/redfin.js +100 -0
  70. package/dist/tools/redfin.js.map +1 -0
  71. package/dist/tools/sec.d.ts +3 -0
  72. package/dist/tools/sec.js +104 -0
  73. package/dist/tools/sec.js.map +1 -0
  74. package/dist/tools/target.d.ts +3 -0
  75. package/dist/tools/target.js +105 -0
  76. package/dist/tools/target.js.map +1 -0
  77. package/dist/tools/threads.d.ts +3 -0
  78. package/dist/tools/threads.js +93 -0
  79. package/dist/tools/threads.js.map +1 -0
  80. package/dist/tools/tiktok-shop.js +3 -11
  81. package/dist/tools/tiktok-shop.js.map +1 -1
  82. package/dist/tools/tiktok.js +1 -12
  83. package/dist/tools/tiktok.js.map +1 -1
  84. package/dist/tools/tripadvisor.d.ts +3 -0
  85. package/dist/tools/tripadvisor.js +103 -0
  86. package/dist/tools/tripadvisor.js.map +1 -0
  87. package/dist/tools/usage.js +2 -10
  88. package/dist/tools/usage.js.map +1 -1
  89. package/dist/tools/walmart.js +108 -41
  90. package/dist/tools/walmart.js.map +1 -1
  91. package/dist/tools/x.js +1 -12
  92. package/dist/tools/x.js.map +1 -1
  93. package/dist/tools/yelp.d.ts +3 -0
  94. package/dist/tools/yelp.js +65 -0
  95. package/dist/tools/yelp.js.map +1 -0
  96. package/dist/tools/youtube.js +1 -12
  97. package/dist/tools/youtube.js.map +1 -1
  98. package/dist/tools/zillow.d.ts +3 -0
  99. package/dist/tools/zillow.js +123 -0
  100. package/dist/tools/zillow.js.map +1 -0
  101. package/package.json +12 -2
@@ -0,0 +1,104 @@
1
+ import { z } from "zod";
2
+ import { handleApiError } from "../lib/tool-error.js";
3
+ // SEC EDGAR - US Securities and Exchange Commission regulatory filings. Six
4
+ // tools, 1 credit each, flat: the SEC publishes this data itself and even
5
+ // include_history, the one call that can buy up to 10 upstream fetches, is
6
+ // deliberately still one credit.
7
+ //
8
+ // LOOKUP FIRST. Callers hold a ticker (AAPL); the API is keyed by CIK
9
+ // (0000320193). resolve_sec_company exists to bridge that, and both `cik` and
10
+ // `ticker` accept either spelling, which softens the problem without removing
11
+ // it - a company NAME still has to be resolved before anything else runs.
12
+ //
13
+ // No zod `.default()` anywhere in this file, deliberately: the MCP SDK applies
14
+ // a zod default BEFORE the handler runs, so a declared default is posted on
15
+ // every single call whether the model asked for it or not. Defaults belong to
16
+ // the backend, which applies them when a field is absent; they are documented
17
+ // in the .describe() text instead.
18
+ /** Both spellings are accepted by both fields; one of the two is required. */
19
+ const filerRef = {
20
+ cik: z.string().min(1).max(20).optional()
21
+ .describe("Filer CIK in any spelling EDGAR uses: '320193', '0000320193' or 'CIK0000320193'. A ticker is accepted here too. Either this or ticker is required."),
22
+ ticker: z.string().min(1).max(20).optional()
23
+ .describe("Ticker symbol, dotted or dashed ('BRK.B' and 'BRK-B' both resolve). Wins over cik when both are given. Either this or cik is required."),
24
+ };
25
+ const formItem = z.string().min(1).max(50);
26
+ const locationCode = z.string().regex(/^[A-Za-z0-9]{2}$/, "must be a 2-character EDGAR location code");
27
+ export function registerSecTools(server, getClient) {
28
+ const call = (path) => async (params) => {
29
+ try {
30
+ const data = await getClient().post(path, params);
31
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
32
+ }
33
+ catch (err) {
34
+ return handleApiError(err);
35
+ }
36
+ };
37
+ server.tool("resolve_sec_company", `START HERE for SEC EDGAR, the US Securities and Exchange Commission's public filing system. Resolves a ticker ('AAPL') or a company name to the CIK ('0000320193') that every other SEC tool is keyed by. Returns matching filers as JSON: company name, CIK, ticker symbol, listing exchange, and ready-made submissions, company-facts and EDGAR URLs, tiered by how unambiguous the match is (exact symbol, then exact name, then prefix, then substring) with each row carrying its tier as \`match\`. Not paginated - \`limit\` only sizes the response (1-100, default 10). Costs 1 credit.`, {
38
+ query: z.string().min(1).max(200)
39
+ .describe("A ticker ('AAPL', 'BRK.B'), a company name, or a fragment of one."),
40
+ limit: z.number().int().min(1).max(100).optional()
41
+ .describe("Rows to return, 1-100. Backend default is 10. Sizes the response; this is NOT a page param."),
42
+ exchange: z.enum(["NASDAQ", "NYSE", "OTC", "CBOE"]).optional()
43
+ .describe("Restrict to one listing venue. Closed set, matched case-insensitively. Filers the SEC lists with no exchange at all are excluded by ANY value, so omit this to see them."),
44
+ }, call("/api/v1/sec/lookup"));
45
+ server.tool("get_sec_company", `Get a US SEC EDGAR filer's profile as JSON: legal and former names, SIC industry, filer category, EIN, LEI, state of incorporation, fiscal year end, business and mailing addresses, every ticker with its exchange, which forms it files and how often, plus a preview of its 10 most recent filings. Requires cik or ticker - if you only have a company name, call resolve_sec_company first. Not paginated. Costs 1 credit.`, { ...filerRef }, call("/api/v1/sec/company"));
46
+ server.tool("get_sec_filings", `List one US SEC EDGAR filer's filings as JSON: accession number, form and root form, filing and period dates, 8-K item codes, and direct links to the primary document, the filing index and the attachment directory. Paginated with page + limit (1-500 per page, backend default 50). \`form\` matches the form AND its root form here, so '10-K' also returns the 10-K/A amendments - ask for '10-K/A' to get only amendments. EDGAR's "recent" block is not a fixed window (about a decade for a quiet filer, about a year for a prolific one); include_history reaches further back through up to 10 archived shards and is still 1 credit, with \`history_truncated\` set when the filer had more. Requires cik or ticker. Costs 1 credit.`, {
47
+ ...filerRef,
48
+ form: z.union([formItem, z.array(formItem).min(1).max(25)]).optional()
49
+ .describe("Form types to keep: '10-K', ['10-K','10-Q'] or '10-K,8-K'. Matched against the form AND its root form, so '10-K' also returns 10-K/A."),
50
+ date_from: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "must be YYYY-MM-DD").optional()
51
+ .describe("Earliest filing date, inclusive, as YYYY-MM-DD."),
52
+ date_to: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "must be YYYY-MM-DD").optional()
53
+ .describe("Latest filing date, inclusive, as YYYY-MM-DD."),
54
+ page: z.number().int().min(1).optional()
55
+ .describe("Results page, 1-based."),
56
+ limit: z.number().int().min(1).max(500).optional()
57
+ .describe("Filings per page, 1-500. Backend default is 50."),
58
+ include_history: z.boolean().optional()
59
+ .describe("Also fetch the archived filing history beyond EDGAR's recent block - up to 10 shards, still 1 credit. Off by default. Check history_truncated in the response to see whether the filer had more."),
60
+ }, call("/api/v1/sec/filings"));
61
+ server.tool("get_sec_concept", `Get every value a US SEC EDGAR filer reported for one XBRL financial concept as JSON, newest period first, with the form and filing each number came from. XBRL tags are CASE-SENSITIVE: 'netincomeloss' is a 404 upstream, not a match - call get_sec_facts first to list the tags a filer actually reports. Restatements are KEPT, not collapsed, and each row carries the SEC's \`latest\` comparability flag that tells a quarter apart from its year-to-date twin. Here \`form\` is an EXACT match, so '10-K' EXCLUDES 10-K/A - the opposite of get_sec_filings. Not paginated - \`limit\` only sizes the response (1-2000, default 250). Requires cik or ticker. Costs 1 credit.`, {
62
+ ...filerRef,
63
+ concept: z.string().min(1).max(120).regex(/^[A-Za-z][A-Za-z0-9]*$/, "must be an XBRL tag name, e.g. NetIncomeLoss")
64
+ .describe("The XBRL tag to pull, CASE-SENSITIVE: 'NetIncomeLoss', 'Revenues', 'Assets'. Use get_sec_facts to discover valid tags for this filer."),
65
+ taxonomy: z.string().min(1).max(40).regex(/^[A-Za-z][A-Za-z0-9-]*$/, "must be an XBRL taxonomy, e.g. us-gaap").optional()
66
+ .describe("XBRL taxonomy: 'us-gaap' (backend default), 'dei', 'ifrs-full' or 'srt'."),
67
+ unit: z.string().min(1).max(40).optional()
68
+ .describe("Keep only facts reported in this unit. A concept can be reported in more than one - per-share figures are 'USD/shares' while the same statement's totals are 'USD'."),
69
+ form: formItem.optional()
70
+ .describe("Keep only facts sourced from this form type. EXACT match here, so '10-K' excludes 10-K/A."),
71
+ limit: z.number().int().min(1).max(2000).optional()
72
+ .describe("Facts to return, 1-2000, newest period first. Backend default is 250. Sizes the response; there is no paging."),
73
+ }, call("/api/v1/sec/concept"));
74
+ server.tool("get_sec_facts", `Get the index of every XBRL concept a US SEC EDGAR filer reports as JSON - tag, label, description, units and most recent value - across us-gaap, dei and any other taxonomy it uses. This is the discovery step: find the tag here, then pull its full history with get_sec_concept. Not paginated - \`limit\` only sizes the response (1-2000, default 250). Requires cik or ticker. Costs 1 credit.`, {
75
+ ...filerRef,
76
+ taxonomy: z.string().min(1).max(40).optional()
77
+ .describe("Restrict to one XBRL taxonomy, e.g. 'us-gaap' or 'dei'. Omit to see every taxonomy the filer uses."),
78
+ query: z.string().min(1).max(200).optional()
79
+ .describe("Case-insensitive substring match against the tag name and its label, e.g. 'revenue'."),
80
+ limit: z.number().int().min(1).max(2000).optional()
81
+ .describe("Concepts to return, 1-2000. Backend default is 250. Sizes the response; there is no paging."),
82
+ }, call("/api/v1/sec/facts"));
83
+ server.tool("search_sec_filings", `Full-text search across US SEC EDGAR filing DOCUMENTS. Coverage STARTS IN 2001 - nothing filed earlier is in this index. Each hit comes back as JSON with the document URL, form, filing date and filer identity, plus facets breaking the whole result set down by company, form, industry and state. Accepts NO query at all: a cik, ticker, form or date filter on its own is a valid search. Paginated with page at 100 documents per page and CAPPED AT PAGE 100, because the index refuses a result window past 10,000. Use get_sec_filings instead when you want one known filer's complete filing list rather than a text match. Costs 1 credit.`, {
84
+ query: z.string().min(1).max(500).optional()
85
+ .describe("Full-text query over filing documents. A quoted phrase ('\"climate risk\"') is matched exactly; bare words are matched as a bag of terms. Optional - filters alone are a valid search."),
86
+ cik: z.union([z.string().min(1).max(20), z.array(z.string().min(1).max(20)).min(1).max(25)]).optional()
87
+ .describe("Restrict to one or more filers by CIK, as a string or an array of up to 25. Tickers are accepted here too."),
88
+ ticker: z.union([z.string().min(1).max(20), z.array(z.string().min(1).max(20)).min(1).max(25)]).optional()
89
+ .describe("Restrict to one or more filers by ticker symbol, as a string or an array of up to 25."),
90
+ form: z.union([formItem, z.array(formItem).min(1).max(25)]).optional()
91
+ .describe("Form types to keep: '8-K', ['10-K','10-Q'] or '10-K,10-Q'."),
92
+ date_from: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "must be YYYY-MM-DD").optional()
93
+ .describe("Earliest filing date, inclusive, as YYYY-MM-DD. Full-text coverage starts in 2001."),
94
+ date_to: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, "must be YYYY-MM-DD").optional()
95
+ .describe("Latest filing date, inclusive, as YYYY-MM-DD."),
96
+ location: z.union([locationCode, z.array(locationCode).min(1).max(25)]).optional()
97
+ .describe("Filer business-address locations as EDGAR's own 2-character codes ('CA', 'NY', and its alphanumeric codes for foreign jurisdictions), as a string or an array of up to 25."),
98
+ sort: z.enum(["relevance", "newest", "oldest"]).optional()
99
+ .describe("Result ordering. Backend default is the index's own relevance ranking."),
100
+ page: z.number().int().min(1).max(100).optional()
101
+ .describe("Results page, 1-based, 100 documents per page. Page 100 is the last page for ANY query - the index refuses a result window past 10,000."),
102
+ }, call("/api/v1/sec/search"));
103
+ }
104
+ //# sourceMappingURL=sec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sec.js","sourceRoot":"","sources":["../../src/tools/sec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ScavioClient } from "../lib/client.js";
3
+ export declare function registerTargetTools(server: McpServer, getClient: () => ScavioClient): void;
@@ -0,0 +1,105 @@
1
+ import { z } from "zod";
2
+ import { handleApiError } from "../lib/tool-error.js";
3
+ // Every description opens "Target.com, the US retailer" on purpose: read out of
4
+ // context, a tool called get_target_* is easily taken for "the target of the
5
+ // operation". The brand has to be established in the first clause, before the
6
+ // model has decided what the tool is for.
7
+ //
8
+ // No zod `.default()` anywhere in this file. The MCP SDK applies a zod default
9
+ // BEFORE the handler runs, so a defaulted field is posted on every call whether
10
+ // the model set it or not. Upstream defaults are documented in the describe
11
+ // text and left for the backend to apply.
12
+ const SORT_DESCRIPTION = "Sort order. Upstream default is 'relevance'.";
13
+ const storeIdField = z.string().optional()
14
+ .describe("Numeric Target store id. Unlike Walmart, this IS a real request param — it selects the store whose prices, promotions and availability you get back. Upstream default is '3991'.");
15
+ export function registerTargetTools(server, getClient) {
16
+ server.tool("search_target_products", `Target.com, the US retailer — search its catalogue by keyword and return the product grid as JSON. Each row carries the tcin (Target's product id), title, brand, URL, current price and list price, rating and review count, badges and promotions, image, and seller_id / seller_name.
17
+
18
+ seller_id and seller_name are NULL for first-party stock, which is most of Target. NULL means "sold by Target", not missing data — only Target Plus marketplace rows name a third-party vendor.
19
+
20
+ Paginate with page. count sets the page size and is capped at 28: Target rejects anything above that outright (upstream default 24). store_id picks the store whose prices and availability you see.
21
+
22
+ LATENCY, not price, is the thing to plan around: Target refuses proxy pools and is reached through a headless browser, so a search takes roughly 9 seconds and can hold a concurrency slot much longer under retry. Do not put it in a tight loop. Costs 1 credit per page.`, {
23
+ keyword: z.string().min(1).max(500)
24
+ .describe("Product search keyword, e.g. 'office chair'."),
25
+ page: z.number().int().min(1).optional()
26
+ .describe("Results page, 1-based. One page per call, 1 credit each."),
27
+ count: z.number().int().min(1).max(28).optional()
28
+ .describe("Products per page, 1-28. Target rejects anything above 28 outright. Upstream default is 24."),
29
+ sort: z.enum(["relevance", "featured", "price_low", "price_high", "rating_high", "best_seller", "newest"]).optional()
30
+ .describe(SORT_DESCRIPTION),
31
+ store_id: storeIdField,
32
+ }, async (params) => {
33
+ try {
34
+ const data = await getClient().post("/api/v1/target/search", params);
35
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
36
+ }
37
+ catch (err) {
38
+ return handleApiError(err);
39
+ }
40
+ });
41
+ server.tool("get_target_category", `Target.com, the US retailer — list the products inside one Target category as JSON. Same shape as search_target_products plus the category breadcrumb: tcin, title, brand, URL, price and list price, rating and review count, badges and promotions, image, and seller_id / seller_name.
42
+
43
+ seller_id and seller_name are NULL for first-party stock, which is most of Target — NULL means "sold by Target", not missing data.
44
+
45
+ category_id is the segment after \`N-\` in a target.com /c/ URL. Paginate with page; count is capped at 28 (upstream default 24). store_id picks the store whose prices and availability you see.
46
+
47
+ This is the SLOWEST Target endpoint at roughly 37 seconds per call, with 502-then-retry cases observed near 100 seconds. Use it for catalogue sweeps you can wait on, not for interactive lookups. Costs 1 credit per page.`, {
48
+ category_id: z.string().min(1)
49
+ .describe("Target category id — the segment after `N-` in a target.com /c/ URL, e.g. '5xtg6' from /c/office-chairs/-/N-5xtg6."),
50
+ page: z.number().int().min(1).optional()
51
+ .describe("Results page, 1-based. One page per call, 1 credit each."),
52
+ count: z.number().int().min(1).max(28).optional()
53
+ .describe("Products per page, 1-28. Target rejects anything above 28 outright. Upstream default is 24."),
54
+ sort: z.enum(["relevance", "featured", "price_low", "price_high", "rating_high", "best_seller", "newest"]).optional()
55
+ .describe(SORT_DESCRIPTION),
56
+ store_id: storeIdField,
57
+ }, async (params) => {
58
+ try {
59
+ const data = await getClient().post("/api/v1/target/category", params);
60
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
61
+ }
62
+ catch (err) {
63
+ return handleApiError(err);
64
+ }
65
+ });
66
+ server.tool("get_target_product", `Target.com, the US retailer — get one product's full detail by TCIN as JSON: title, brand, current price and list price, rating and review count, images, the specification table and feature bullets, variants, the return policy, and fulfillment for the chosen store (ship, order pickup, drive up, same-day delivery).
67
+
68
+ Pass a child TCIN and Target answers with its variation PARENT, with the child present in variants — that is the normal response, not a wrong match.
69
+
70
+ seller_id / seller_name are NULL for first-party stock, which is most of Target; NULL means "sold by Target". Unlike Walmart, store_id IS a real request param here — prices and availability are your choice.
71
+
72
+ Fastest Target endpoint at roughly 4 seconds. Single-product lookup, no pagination. For review bodies call get_target_reviews. Costs 1 credit.`, {
73
+ tcin: z.string().min(1)
74
+ .describe("Target TCIN, the numeric product id from a target.com /p/ URL, e.g. '54551690'. A child TCIN is answered by its variation parent, with the child listed under variants."),
75
+ store_id: storeIdField,
76
+ }, async (params) => {
77
+ try {
78
+ const data = await getClient().post("/api/v1/target/product", params);
79
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
80
+ }
81
+ catch (err) {
82
+ return handleApiError(err);
83
+ }
84
+ });
85
+ server.tool("get_target_reviews", `Target.com, the US retailer — get a product's reviews by TCIN as JSON: the overall rating with its star distribution, per-attribute averages (quality, value, and so on), the recommendation percentage, guest photos, and the review bodies with author, date, rating, title and text.
86
+
87
+ HARD CAP: 8 REVIEW BODIES MAXIMUM, no matter how large review_count is. Target publishes no more than that anonymously. There is NO page and NO offset param — \`limit\` only TRIMS the 8 you would already receive, it cannot fetch more. If you need a deep review corpus, this endpoint cannot supply it and no amount of extra calls will change that.
88
+
89
+ Roughly 40 seconds per call. Costs 1 credit.`, {
90
+ tcin: z.string().min(1)
91
+ .describe("Target TCIN, the numeric product id from a target.com /p/ URL, e.g. '54551690'."),
92
+ limit: z.number().int().min(1).optional()
93
+ .describe("TRIMS the returned review bodies only. The ceiling is 8 regardless — Target publishes 8 anonymously and offers no paging, so a limit above 8 changes nothing."),
94
+ store_id: storeIdField,
95
+ }, async (params) => {
96
+ try {
97
+ const data = await getClient().post("/api/v1/target/reviews", params);
98
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
99
+ }
100
+ catch (err) {
101
+ return handleApiError(err);
102
+ }
103
+ });
104
+ }
105
+ //# sourceMappingURL=target.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target.js","sourceRoot":"","sources":["../../src/tools/target.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ScavioClient } from "../lib/client.js";
3
+ export declare function registerThreadsTools(server: McpServer, getClient: () => ScavioClient): void;
@@ -0,0 +1,93 @@
1
+ import { z } from "zod";
2
+ import { handleApiError } from "../lib/tool-error.js";
3
+ /**
4
+ * The handle surcharge. Threads' upstream handle lookup is dead, so a username
5
+ * has to be resolved through people search first — a second upstream call, and
6
+ * 2 extra credits. user_id is always the cheap path.
7
+ */
8
+ const usernameField = z.string().min(1).max(60).optional()
9
+ .describe("Threads handle without the @, e.g. 'natgeo'. Costs 2 EXTRA credits (4 instead of 2) because the handle must be resolved to a numeric id first. Prefer user_id when you have it. Either username or user_id is required.");
10
+ const userIdField = z.string().min(1).optional()
11
+ .describe("Numeric Threads user id, e.g. '63625256886' — the user_id field returned by get_threads_profile or search_threads_users. This is the cheap path: 2 credits. Either username or user_id is required.");
12
+ const cursorField = z.string().optional()
13
+ .describe("Pagination cursor. Pass data.next_cursor from the previous response to get the next page.");
14
+ export function registerThreadsTools(server, getClient) {
15
+ server.tool("get_threads_profile", `Get a Threads (Meta's text app, threads.net) user profile as JSON. Returns user_id, username, full_name, biography, profile_pic_url, follower_count, is_verified and is_private. Address the user by user_id for 2 credits, or by username for 4 credits — the handle costs 2 extra because Threads' upstream handle lookup is dead and the handle has to be resolved through people search first. Resolve a handle to a user_id once with search_threads_users, then reuse that user_id across calls to stay on the 2-credit path. Pass exactly one of username or user_id: sending neither, or both in conflict, returns 422; an unknown user returns 404. Not paginated.`, {
16
+ username: usernameField,
17
+ user_id: userIdField,
18
+ }, async (params) => {
19
+ try {
20
+ const data = await getClient().post("/api/v1/threads/profile", params);
21
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
22
+ }
23
+ catch (err) {
24
+ return handleApiError(err);
25
+ }
26
+ });
27
+ server.tool("get_threads_user_posts", `List a Threads user's own posts as JSON. Returns data.posts, each with post_id, code, text, taken_at, like_count, reply_count, repost_count, media_type, cover_url, video_url and the author object (user_id, username, full_name, follower_count, is_verified). Cursor-paginated: pass data.next_cursor back as cursor while data.has_more is true. Costs 2 credits per page when addressed by user_id, or 4 credits per page when addressed by username — the handle costs 2 extra because it has to be resolved to a numeric id first, so resolve once and page by user_id. Pass exactly one of username or user_id (422 otherwise, 404 for an unknown user).`, {
28
+ username: usernameField,
29
+ user_id: userIdField,
30
+ cursor: cursorField,
31
+ }, async (params) => {
32
+ try {
33
+ const data = await getClient().post("/api/v1/threads/user/posts", params);
34
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
35
+ }
36
+ catch (err) {
37
+ return handleApiError(err);
38
+ }
39
+ });
40
+ server.tool("get_threads_user_replies", `List the replies a Threads user has written to other people's posts, as JSON — the "Replies" tab of their profile, not their own posts (use get_threads_user_posts for those). Returns data.posts, each with post_id, code, text, taken_at, like_count, reply_count, repost_count, media_type, cover_url, video_url and the author object. Cursor-paginated: pass data.next_cursor back as cursor while data.has_more is true. Costs 2 credits per page when addressed by user_id, or 4 credits per page when addressed by username — the handle costs 2 extra because it has to be resolved to a numeric id first. Pass exactly one of username or user_id (422 otherwise, 404 for an unknown user).`, {
41
+ username: usernameField,
42
+ user_id: userIdField,
43
+ cursor: cursorField,
44
+ }, async (params) => {
45
+ try {
46
+ const data = await getClient().post("/api/v1/threads/user/replies", params);
47
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
48
+ }
49
+ catch (err) {
50
+ return handleApiError(err);
51
+ }
52
+ });
53
+ server.tool("get_threads_post", `Get a single Threads post by its id or its threads.net URL, as JSON. Returns a flat post object: post_id, code, text, taken_at, like_count, reply_count, repost_count, media_type, cover_url, video_url and the author (user_id, username, full_name, biography, follower_count, is_verified, is_private). Does NOT return the replies — call get_threads_post_comments with the post_id for those. Pass exactly one of post_id or url; sending neither returns 422. Always costs 2 credits (there is no handle surcharge on this tool). Not paginated.`, {
54
+ post_id: z.string().min(1).optional()
55
+ .describe("Threads post id, e.g. '3349029093483693129'. Either this or url is required."),
56
+ url: z.string().url().optional()
57
+ .describe("Full threads.net post URL, e.g. 'https://www.threads.net/@natgeo/post/C8xY'. Either this or post_id is required."),
58
+ }, async (params) => {
59
+ try {
60
+ const data = await getClient().post("/api/v1/threads/post", params);
61
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
62
+ }
63
+ catch (err) {
64
+ return handleApiError(err);
65
+ }
66
+ });
67
+ server.tool("get_threads_post_comments", `List the replies to a Threads post as JSON. Returns data.comments, each with post_id, code, text, taken_at, like_count, reply_count, repost_count, media_type, cover_url, video_url and the author object (user_id, username, full_name, follower_count, is_verified). Cursor-paginated: pass data.next_cursor back as cursor while data.has_more is true. Takes a post_id only — there is no username or URL form here; get the post_id from get_threads_post, get_threads_user_posts or a threads.net URL. Always costs 2 credits per page.`, {
68
+ post_id: z.string().min(1)
69
+ .describe("Threads post id, e.g. '3349029093483693129'. Required — this tool does not accept a URL."),
70
+ cursor: cursorField,
71
+ }, async (params) => {
72
+ try {
73
+ const data = await getClient().post("/api/v1/threads/post/comments", params);
74
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
75
+ }
76
+ catch (err) {
77
+ return handleApiError(err);
78
+ }
79
+ });
80
+ server.tool("search_threads_users", `Search Threads PROFILES by name or handle, as JSON. Returns data.users, each with user_id, username, full_name, biography, profile_pic_url, follower_count, is_verified and is_private. This is people search and it is the ONLY search Threads exposes — there is no post or content search on Threads, so this tool cannot find posts by keyword, hashtag or topic. Its main use is resolving a handle to a numeric user_id once, so that get_threads_profile, get_threads_user_posts and get_threads_user_replies can be called on the cheap 2-credit user_id path instead of the 4-credit username path. Costs 2 credits. Not paginated — one result set per query.`, {
81
+ query: z.string().min(1).max(200)
82
+ .describe("Name or handle to search for, e.g. 'national geographic' or 'natgeo'."),
83
+ }, async (params) => {
84
+ try {
85
+ const data = await getClient().post("/api/v1/threads/search/users", params);
86
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
87
+ }
88
+ catch (err) {
89
+ return handleApiError(err);
90
+ }
91
+ });
92
+ }
93
+ //# sourceMappingURL=threads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threads.js","sourceRoot":"","sources":["../../src/tools/threads.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,8 @@
1
1
  import { z } from "zod";
2
- import { McpError, ErrorCode } from "@modelcontextprotocol/sdk/types.js";
2
+ import { handleApiError } from "../lib/tool-error.js";
3
+ // ApiError is imported here (and nowhere else in tools/) because get_tiktok_shop_product
4
+ // has to special-case a 404 before falling through to the shared handler.
3
5
  import { ApiError } from "../lib/errors.js";
4
- function handleApiError(err) {
5
- if (err instanceof ApiError) {
6
- if (err.status === 429)
7
- return { isError: true, content: [{ type: "text", text: "Rate limited. Wait and retry." }] };
8
- if (err.status === 401)
9
- throw new McpError(ErrorCode.InternalError, "Invalid SCAVIO_API_KEY. Check your configuration.");
10
- return { isError: true, content: [{ type: "text", text: `Scavio API error (${err.status}): ${err.message}` }] };
11
- }
12
- throw new McpError(ErrorCode.InternalError, String(err));
13
- }
14
6
  const REGIONS_FULL = ["US", "GB", "SG", "MY", "PH", "TH", "VN", "ID"];
15
7
  const REGIONS_LISTING = ["US", "GB"];
16
8
  export function registerTiktokShopTools(server, getClient) {
@@ -1 +1 @@
1
- {"version":3,"file":"tiktok-shop.js","sourceRoot":"","sources":["../../src/tools/tiktok-shop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tiktok-shop.js","sourceRoot":"","sources":["../../src/tools/tiktok-shop.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,5 @@
1
1
  import { z } from "zod";
2
- import { McpError, ErrorCode } from "@modelcontextprotocol/sdk/types.js";
3
- import { ApiError } from "../lib/errors.js";
4
- function handleApiError(err) {
5
- if (err instanceof ApiError) {
6
- if (err.status === 429)
7
- return { isError: true, content: [{ type: "text", text: "Rate limited. Wait and retry." }] };
8
- if (err.status === 401)
9
- throw new McpError(ErrorCode.InternalError, "Invalid SCAVIO_API_KEY. Check your configuration.");
10
- return { isError: true, content: [{ type: "text", text: `Scavio API error (${err.status}): ${err.message}` }] };
11
- }
12
- throw new McpError(ErrorCode.InternalError, String(err));
13
- }
2
+ import { handleApiError } from "../lib/tool-error.js";
14
3
  export function registerTiktokTools(server, getClient) {
15
4
  server.tool("get_tiktok_profile", `Get a TikTok user's profile data as JSON under data.user: username, display name, bio, follower/following counts, video count, total likes, and avatar URL. Use when the user wants info about a TikTok account. Provide either username or sec_user_id. This is also how you obtain the sec_user_id that get_tiktok_user_posts, get_tiktok_user_followers and get_tiktok_user_followings require. Costs 1 credit.`, {
16
5
  username: z.string().optional()
@@ -1 +1 @@
1
- {"version":3,"file":"tiktok.js","sourceRoot":"","sources":["../../src/tools/tiktok.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,SAAS,cAAc,CAAC,GAAY;IAClC,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+BAA+B,EAAE,CAAC,EAAE,CAAC;QACrH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,mDAAmD,CAAC,CAAC;QACzH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,GAAG,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;IAClH,CAAC;IACD,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,SAA6B;IAClF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,oZAAoZ,EACpZ;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC5B,QAAQ,CAAC,2DAA2D,CAAC;QACxE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC/B,QAAQ,CAAC,0EAA0E,CAAC;KACxF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;YACtE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,0RAA0R,EAC1R;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;aACpB,QAAQ,CAAC,sDAAsD,CAAC;QACnE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;aAC5B,QAAQ,CAAC,8EAA8E,CAAC;QAC3F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;aAC/C,QAAQ,CAAC,oCAAoC,CAAC;QACjD,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;aACvC,QAAQ,CAAC,2DAA2D,CAAC;KACzE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;YACzE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,2RAA2R,EAC3R;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;aACjB,QAAQ,CAAC,sEAAsE,CAAC;KACpF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;YACpE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,kPAAkP,EAClP;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;aACjB,QAAQ,CAAC,kBAAkB,CAAC;QAC/B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;aAC5B,QAAQ,CAAC,0EAA0E,CAAC;QACvF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;aAC/C,QAAQ,CAAC,qCAAqC,CAAC;KACnD,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,+BAA+B,EAAE,MAAM,CAAC,CAAC;YAC7E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,kOAAkO,EAClO;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;aACjB,QAAQ,CAAC,kBAAkB,CAAC;QAC/B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;aACnB,QAAQ,CAAC,+DAA+D,CAAC;QAC5E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;aAC5B,QAAQ,CAAC,0EAA0E,CAAC;QACvF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;aAC/C,QAAQ,CAAC,oCAAoC,CAAC;KAClD,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,uCAAuC,EAAE,MAAM,CAAC,CAAC;YACrF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,4QAA4Q,EAC5Q;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;aAChC,QAAQ,CAAC,eAAe,CAAC;QAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;aAC5B,QAAQ,CAAC,0EAA0E,CAAC;QACvF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;aAC/C,QAAQ,CAAC,oCAAoC,CAAC;QACjD,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;aACvC,QAAQ,CAAC,gDAAgD,CAAC;QAC7D,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;aAClE,QAAQ,CAAC,+FAA+F,CAAC;KAC7G,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;YAC5E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,8MAA8M,EAC9M;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;aAChC,QAAQ,CAAC,eAAe,CAAC;QAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;aAC5B,QAAQ,CAAC,0EAA0E,CAAC;QACvF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;aAC/C,QAAQ,CAAC,oCAAoC,CAAC;KAClD,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;YAC3E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,mOAAmO,EACnO;QACE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAChC,QAAQ,CAAC,gDAAgD,CAAC;QAC7D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC9B,QAAQ,CAAC,yEAAyE,CAAC;KACvF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;YACtE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,wPAAwP,EACxP;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;aACnB,QAAQ,CAAC,kDAAkD,CAAC;QAC/D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;aAC5B,QAAQ,CAAC,0EAA0E,CAAC;QACvF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;aAC/C,QAAQ,CAAC,oCAAoC,CAAC;KAClD,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,+BAA+B,EAAE,MAAM,CAAC,CAAC;YAC7E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,4SAA4S,EAC5S;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;aACpB,QAAQ,CAAC,sDAAsD,CAAC;QACnE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;aAC/C,QAAQ,CAAC,oCAAoC,CAAC;QACjD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC9B,QAAQ,CAAC,0CAA0C,CAAC;QACvD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC5B,QAAQ,CAAC,uFAAuF,CAAC;KACrG,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,+BAA+B,EAAE,MAAM,CAAC,CAAC;YAC7E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,sTAAsT,EACtT;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;aACpB,QAAQ,CAAC,sDAAsD,CAAC;QACnE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;aAC/C,QAAQ,CAAC,oCAAoC,CAAC;QACjD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC9B,QAAQ,CAAC,0CAA0C,CAAC;QACvD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC5B,QAAQ,CAAC,uFAAuF,CAAC;KACrG,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,gCAAgC,EAAE,MAAM,CAAC,CAAC;YAC9E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"tiktok.js","sourceRoot":"","sources":["../../src/tools/tiktok.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ScavioClient } from "../lib/client.js";
3
+ export declare function registerTripadvisorTools(server: McpServer, getClient: () => ScavioClient): void;
@@ -0,0 +1,103 @@
1
+ import { z } from "zod";
2
+ import { handleApiError } from "../lib/tool-error.js";
3
+ // No zod `.default()` anywhere in this file, on purpose. The MCP SDK applies a
4
+ // zod default BEFORE the handler runs, so a defaulted field is posted on every
5
+ // single call whether the model set it or not — which is exactly how the
6
+ // shipped Walmart tool ended up sending a value the backend enum rejected.
7
+ // Upstream defaults are documented in the .describe() text instead and left for
8
+ // the backend to apply.
9
+ const geoIdField = () => z.string().min(1).max(500).optional()
10
+ .describe("Tripadvisor geo id — the 'g' half of the g/d pair every Tripadvisor URL is keyed by. Accepts '30196', 'g30196', or any tripadvisor.com URL carrying one. Get it from resolve_tripadvisor_location.");
11
+ const categoryField = () => z.enum(["restaurants", "hotels", "attractions"]).optional()
12
+ .describe("Which of Tripadvisor's three location families to read. These are separate URL families, not a filter — they are not interchangeable. Upstream default is 'restaurants'.");
13
+ export function registerTripadvisorTools(server, getClient) {
14
+ server.tool("resolve_tripadvisor_location", `START HERE for Tripadvisor. Resolves a place or business NAME to the Tripadvisor ids every other Tripadvisor tool is keyed by, as JSON.
15
+
16
+ Each row is either a GEO (a city, region or other destination — its geo_id is what search_tripadvisor takes) or a BUSINESS (a restaurant, hotel or attraction — its geo_id + location_id PAIR is what get_tripadvisor_location and get_tripadvisor_reviews take). Rows also carry the display name, type, and parent geography so you can pick the right "Springfield".
17
+
18
+ Call this first whenever you only have a name. Those ids exist nowhere except inside Tripadvisor's own URLs, so there is no other entry point into this platform.
19
+
20
+ limit only SIZES this response (1-20, upstream default 12) — it is not a page parameter and this lookup has no pagination. Costs 2 credits.`, {
21
+ query: z.string().min(1).max(120)
22
+ .describe("A place or business name to resolve, e.g. 'Austin' or 'Franklin Barbecue'."),
23
+ limit: z.number().int().min(1).max(20).optional()
24
+ .describe("Rows to return, 1-20. Upstream default is 12. Sizes the response only — NOT a page parameter."),
25
+ }, async (params) => {
26
+ try {
27
+ const data = await getClient().post("/api/v1/tripadvisor/locations", params);
28
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
29
+ }
30
+ catch (err) {
31
+ return handleApiError(err);
32
+ }
33
+ });
34
+ server.tool("search_tripadvisor", `List the restaurants, hotels or attractions in a Tripadvisor geo, in Tripadvisor's own ranked order, as JSON. Each row carries rating, review count, price band, address, coordinates, phone, opening hours, the Travelers' Choice badge, and the location_id + geo_id pair needed to look the place up in detail.
35
+
36
+ Either geo_id or url is required. If you only have a place NAME, call resolve_tripadvisor_location first — geo ids exist only inside Tripadvisor's own URLs.
37
+
38
+ category picks one of three separate URL families (restaurants, hotels, attractions), not a filter over one list; upstream default is restaurants.
39
+
40
+ Paginate with page: 30 locations per page. A page beyond the last is a 404, NOT an empty result — stop when a page 404s. Costs 2 credits per page.`, {
41
+ geo_id: geoIdField(),
42
+ category: categoryField(),
43
+ page: z.number().int().min(1).optional()
44
+ .describe("Results page, 1-based. 30 locations per page. A page past the last is a 404, not an empty list."),
45
+ url: z.string().min(1).max(500).optional()
46
+ .describe("A full tripadvisor.com listing URL, e.g. 'https://www.tripadvisor.com/Restaurants-g30196-Austin_Texas.html', as an alternative to geo_id + category. Country sites (tripadvisor.co.uk, .fr) work. Either this or geo_id is required."),
47
+ }, async (params) => {
48
+ try {
49
+ const data = await getClient().post("/api/v1/tripadvisor/search", params);
50
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
51
+ }
52
+ catch (err) {
53
+ return handleApiError(err);
54
+ }
55
+ });
56
+ server.tool("get_tripadvisor_location", `Get one Tripadvisor restaurant, hotel or attraction in full as JSON: rating, the review histogram and per-aspect sub-ratings, its ranking within the city, price band, cuisines, amenities, address, coordinates, contact details, photos — and the FIRST PAGE OF REVIEWS.
57
+
58
+ Because page 1 of the reviews already rides along here, do NOT call get_tripadvisor_reviews to read it; use that tool only to page PAST the first page.
59
+
60
+ Either location_id or url is required, and a bare d-id additionally needs geo_id — Tripadvisor will not resolve a location without its geography. Get both from resolve_tripadvisor_location. An unknown location id is answered upstream with a 200 city listing that is BILLED and restated here as a 404, so use resolved ids rather than guesses.
61
+
62
+ No pagination on this tool. Costs 2 credits.`, {
63
+ location_id: z.string().min(1).max(500).optional()
64
+ .describe("Tripadvisor location id — the 'd' half of the pair. Accepts '1899234', 'd1899234', or a full _Review URL. Either this or url is required."),
65
+ geo_id: geoIdField(),
66
+ category: categoryField(),
67
+ url: z.string().min(1).max(500).optional()
68
+ .describe("A full tripadvisor.com _Review URL, e.g. 'https://www.tripadvisor.com/Restaurant_Review-g30196-d1899234-Reviews.html', as an alternative to the id pair. Either this or location_id is required."),
69
+ }, async (params) => {
70
+ try {
71
+ const data = await getClient().post("/api/v1/tripadvisor/location", params);
72
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
73
+ }
74
+ catch (err) {
75
+ return handleApiError(err);
76
+ }
77
+ });
78
+ server.tool("get_tripadvisor_reviews", `Get a page of Tripadvisor reviews for one location as JSON: review text and rating, trip date and trip type, the reviewer's home town and contribution count, and any management response.
79
+
80
+ Use this to page PAST page 1 — page 1 is already included in get_tripadvisor_location, so calling this for it spends a second 2-credit call on reviews you already have.
81
+
82
+ Page size differs by family: 15 per page for restaurants, 10 for hotels and attractions. category must therefore MATCH the location's own type on any page past the first, or the offsets do not line up. A page beyond the last is a 404, not an empty result.
83
+
84
+ Consecutive pages can REPEAT one review at the boundary — de-duplicate on review_id when concatenating pages. Either location_id or url is required (a bare d-id also needs geo_id). Costs 2 credits per page.`, {
85
+ location_id: z.string().min(1).max(500).optional()
86
+ .describe("Tripadvisor location id — '1899234', 'd1899234', or a full _Review URL. Either this or url is required."),
87
+ geo_id: geoIdField(),
88
+ category: categoryField(),
89
+ url: z.string().min(1).max(500).optional()
90
+ .describe("A full tripadvisor.com _Review URL, as an alternative to the id pair. Either this or location_id is required."),
91
+ page: z.number().int().min(1).optional()
92
+ .describe("Reviews page, 1-based. 15 per page for restaurants, 10 for hotels and attractions — set category to match the location's own type. A page past the last is a 404."),
93
+ }, async (params) => {
94
+ try {
95
+ const data = await getClient().post("/api/v1/tripadvisor/reviews", params);
96
+ return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
97
+ }
98
+ catch (err) {
99
+ return handleApiError(err);
100
+ }
101
+ });
102
+ }
103
+ //# sourceMappingURL=tripadvisor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tripadvisor.js","sourceRoot":"","sources":["../../src/tools/tripadvisor.ts"],"names":[],"mappings":"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"}