@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.
- package/README.md +365 -4
- package/dist/index.js +26 -7
- package/dist/index.js.map +1 -1
- package/dist/lib/env.d.ts +1 -0
- package/dist/lib/env.js +4 -0
- package/dist/lib/env.js.map +1 -1
- package/dist/lib/tool-error.d.ts +22 -0
- package/dist/lib/tool-error.js +28 -0
- package/dist/lib/tool-error.js.map +1 -0
- package/dist/tools/airbnb.d.ts +3 -0
- package/dist/tools/airbnb.js +121 -0
- package/dist/tools/airbnb.js.map +1 -0
- package/dist/tools/amazon.js +1 -12
- package/dist/tools/amazon.js.map +1 -1
- package/dist/tools/appstore.d.ts +3 -0
- package/dist/tools/appstore.js +59 -0
- package/dist/tools/appstore.js.map +1 -0
- package/dist/tools/booking.d.ts +3 -0
- package/dist/tools/booking.js +116 -0
- package/dist/tools/booking.js.map +1 -0
- package/dist/tools/capterra.d.ts +3 -0
- package/dist/tools/capterra.js +53 -0
- package/dist/tools/capterra.js.map +1 -0
- package/dist/tools/companieshouse.d.ts +3 -0
- package/dist/tools/companieshouse.js +56 -0
- package/dist/tools/companieshouse.js.map +1 -0
- package/dist/tools/ebay.d.ts +3 -0
- package/dist/tools/ebay.js +79 -0
- package/dist/tools/ebay.js.map +1 -0
- package/dist/tools/extract.d.ts +3 -0
- package/dist/tools/extract.js +21 -0
- package/dist/tools/extract.js.map +1 -0
- package/dist/tools/g2.d.ts +3 -0
- package/dist/tools/g2.js +69 -0
- package/dist/tools/g2.js.map +1 -0
- package/dist/tools/glassdoor.d.ts +3 -0
- package/dist/tools/glassdoor.js +72 -0
- package/dist/tools/glassdoor.js.map +1 -0
- package/dist/tools/google.js +1 -12
- package/dist/tools/google.js.map +1 -1
- package/dist/tools/googleads.d.ts +3 -0
- package/dist/tools/googleads.js +61 -0
- package/dist/tools/googleads.js.map +1 -0
- package/dist/tools/googleplay.d.ts +3 -0
- package/dist/tools/googleplay.js +57 -0
- package/dist/tools/googleplay.js.map +1 -0
- package/dist/tools/homedepot.d.ts +3 -0
- package/dist/tools/homedepot.js +71 -0
- package/dist/tools/homedepot.js.map +1 -0
- package/dist/tools/indeed.d.ts +3 -0
- package/dist/tools/indeed.js +98 -0
- package/dist/tools/indeed.js.map +1 -0
- package/dist/tools/index.d.ts +42 -1
- package/dist/tools/index.js +204 -15
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/instagram.js +1 -12
- package/dist/tools/instagram.js.map +1 -1
- package/dist/tools/kuaishou.d.ts +3 -0
- package/dist/tools/kuaishou.js +207 -0
- package/dist/tools/kuaishou.js.map +1 -0
- package/dist/tools/linkedin.js +1 -12
- package/dist/tools/linkedin.js.map +1 -1
- package/dist/tools/metaads.d.ts +3 -0
- package/dist/tools/metaads.js +63 -0
- package/dist/tools/metaads.js.map +1 -0
- package/dist/tools/reddit.js +1 -12
- package/dist/tools/reddit.js.map +1 -1
- package/dist/tools/redfin.d.ts +3 -0
- package/dist/tools/redfin.js +100 -0
- package/dist/tools/redfin.js.map +1 -0
- package/dist/tools/sec.d.ts +3 -0
- package/dist/tools/sec.js +104 -0
- package/dist/tools/sec.js.map +1 -0
- package/dist/tools/target.d.ts +3 -0
- package/dist/tools/target.js +105 -0
- package/dist/tools/target.js.map +1 -0
- package/dist/tools/threads.d.ts +3 -0
- package/dist/tools/threads.js +93 -0
- package/dist/tools/threads.js.map +1 -0
- package/dist/tools/tiktok-shop.js +3 -11
- package/dist/tools/tiktok-shop.js.map +1 -1
- package/dist/tools/tiktok.js +1 -12
- package/dist/tools/tiktok.js.map +1 -1
- package/dist/tools/tripadvisor.d.ts +3 -0
- package/dist/tools/tripadvisor.js +103 -0
- package/dist/tools/tripadvisor.js.map +1 -0
- package/dist/tools/usage.js +2 -10
- package/dist/tools/usage.js.map +1 -1
- package/dist/tools/walmart.js +108 -41
- package/dist/tools/walmart.js.map +1 -1
- package/dist/tools/x.js +1 -12
- package/dist/tools/x.js.map +1 -1
- package/dist/tools/yelp.d.ts +3 -0
- package/dist/tools/yelp.js +65 -0
- package/dist/tools/yelp.js.map +1 -0
- package/dist/tools/youtube.js +1 -12
- package/dist/tools/youtube.js.map +1 -1
- package/dist/tools/zillow.d.ts +3 -0
- package/dist/tools/zillow.js +123 -0
- package/dist/tools/zillow.js.map +1 -0
- package/package.json +12 -2
|
@@ -0,0 +1,79 @@
|
|
|
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
|
+
export function registerEbayTools(server, getClient) {
|
|
10
|
+
server.tool("search_ebay", `Search live or SOLD eBay listings and return them as JSON. Each result carries the item id and URL, title, price and currency, condition, buying format, bid count and time left for auctions, shipping cost and free-shipping flag, seller username with feedback score, image and position, alongside count and total_results.
|
|
11
|
+
|
|
12
|
+
Set sold=true to search COMPLETED listings that actually sold. That is the price-research view and the reason to reach for eBay rather than a retail catalogue: it shows what buyers really paid, not what sellers are asking. On the sold view eBay publishes no headline count, so total_results is NULL — count still tells you how many rows came back.
|
|
13
|
+
|
|
14
|
+
Either query or seller is required. Passing seller ALONE with no keyword pages that seller's entire catalogue, and this is the only way to enumerate a seller's inventory — get_ebay_seller is a profile card and cannot list items.
|
|
15
|
+
|
|
16
|
+
Paginate with page. per_page accepts ONLY 60, 120 or 240; eBay silently falls back to 60 for any other value rather than erroring. category_id must be numeric — an unrecognised id returns the UNFILTERED result set under a 200, so verify the filter took effect. condition 'refurbished' is eBay's parent condition, not one of its three graded tiers. Costs 1 credit per page.`, {
|
|
17
|
+
query: z.string().min(1).max(500).optional()
|
|
18
|
+
.describe("Keyword search, e.g. 'nikon d750 body'. Either this or seller is required; omit it and pass seller alone to page a seller's whole catalogue."),
|
|
19
|
+
seller: z.string().min(1).max(64).optional()
|
|
20
|
+
.describe("Scope results to one eBay seller username. Usable with NO query to page that seller's entire inventory. Either this or query is required."),
|
|
21
|
+
page: z.number().int().min(1).optional()
|
|
22
|
+
.describe("Results page, 1-based. One page per call, 1 credit each."),
|
|
23
|
+
sort_by: z.enum(["best_match", "ending_soonest", "newly_listed", "price_low", "price_high"]).optional()
|
|
24
|
+
.describe("Sort order. Upstream default is 'best_match'. 'Distance: nearest first' is deliberately unavailable — it would rank against our proxy exit, not your location."),
|
|
25
|
+
min_price: z.number().min(0).optional()
|
|
26
|
+
.describe("Minimum price filter, in the listing currency."),
|
|
27
|
+
max_price: z.number().min(0).optional()
|
|
28
|
+
.describe("Maximum price filter, in the listing currency."),
|
|
29
|
+
condition: z.enum(["new", "open_box", "refurbished", "used", "for_parts"]).optional()
|
|
30
|
+
.describe("Item condition filter. 'refurbished' is eBay's PARENT condition and covers all three graded refurbished tiers; it does not select one of them."),
|
|
31
|
+
buying_format: z.enum(["auction", "buy_it_now", "best_offer"]).optional()
|
|
32
|
+
.describe("Listing format filter: timed auction, fixed price, or accepts-best-offer."),
|
|
33
|
+
free_shipping: z.boolean().optional()
|
|
34
|
+
.describe("Restrict to listings with free shipping."),
|
|
35
|
+
sold: z.boolean().optional()
|
|
36
|
+
.describe("Search COMPLETED listings that sold, instead of live inventory — the price-research view. On this view total_results is NULL because eBay publishes no headline count for it."),
|
|
37
|
+
category_id: z.string().optional()
|
|
38
|
+
.describe("eBay numeric category id (the _sacat value in a browse URL). MUST be numeric — an unrecognised id returns the UNFILTERED set under a 200 rather than an error."),
|
|
39
|
+
per_page: z.union([z.literal(60), z.literal(120), z.literal(240)]).optional()
|
|
40
|
+
.describe("Results per page. ONLY 60, 120 or 240 are accepted; eBay silently downgrades anything else to 60. Upstream default is 60."),
|
|
41
|
+
}, async (params) => {
|
|
42
|
+
try {
|
|
43
|
+
const data = await getClient().post("/api/v1/ebay/search", params);
|
|
44
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
return handleApiError(err);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
server.tool("get_ebay_product", `Get one eBay listing in full as JSON: item id and URL, title, price and currency, condition, item specifics (the seller's own spec table), every image, shipping and handling options, the return policy, auction state (bid count, time left, buy-it-now availability, quantity sold and available), and the seller with feedback score and positive-feedback percentage.
|
|
51
|
+
|
|
52
|
+
Accepts an eBay item number or a full ebay.com/itm/... URL — tracking query params are discarded for you. This is a single-listing lookup with no pagination. Costs 1 credit.`, {
|
|
53
|
+
item_id: z.string().min(1)
|
|
54
|
+
.describe("eBay item number, e.g. '335678901234', or a full ebay.com/itm/... URL. Tracking params are stripped."),
|
|
55
|
+
}, async (params) => {
|
|
56
|
+
try {
|
|
57
|
+
const data = await getClient().post("/api/v1/ebay/product", params);
|
|
58
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
return handleApiError(err);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
server.tool("get_ebay_seller", `Get an eBay seller's profile card as JSON: store name and username, feedback score, positive-feedback percentage, items sold, follower count, location, member-since date and the categories they sell in.
|
|
65
|
+
|
|
66
|
+
PROFILE ONLY — this endpoint CANNOT enumerate a catalogue and returns no listings. To read what a seller currently has for sale, call search_ebay with seller set and no query; that path is paginated. Accepts the username exactly as it appears in ebay.com/usr/<name>. No pagination. Costs 1 credit.`, {
|
|
67
|
+
seller: z.string().min(1).max(64)
|
|
68
|
+
.describe("eBay seller username as it appears in ebay.com/usr/<name>, e.g. 'musicmagpie'."),
|
|
69
|
+
}, async (params) => {
|
|
70
|
+
try {
|
|
71
|
+
const data = await getClient().post("/api/v1/ebay/seller", params);
|
|
72
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
return handleApiError(err);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=ebay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ebay.js","sourceRoot":"","sources":["../../src/tools/ebay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { handleApiError } from "../lib/tool-error.js";
|
|
3
|
+
export function registerExtractTool(server, getClient) {
|
|
4
|
+
server.tool("extract_url", `Read any web page. Returns the page as clean Markdown, plain text, or raw HTML. This is the general read-a-page primitive: point it at any http(s) URL - an article, a docs page, a product page, a changelog, a competitor's pricing page - and get the body back as text you can reason over. Returns { url, format, mode, content, content_length }. Formats: 'markdown' (readability extraction, the default and the best choice for reading), 'text' (that Markdown flattened to plain prose), 'html' (the raw unprocessed page). COST IS TIER-PRICED BY THE mode PARAMETER, NOT FLAT: mode='normal' (plain fetch) costs 1 credit, mode='advanced' (full JavaScript rendering, for React/Vue pages that are empty without it) costs 1 credit, mode='ultra' (residential proxy, for hard bot walls and heavy protection) costs 2 credits. Start at 'normal' and escalate only when the content comes back empty or blocked. Billing happens ONLY on a successful extraction - a dead link, a bot wall or a timeout costs nothing. http(s) URLs only; a bare host like 'example.com' is upgraded to https, and loopback, private, link-local and cloud-metadata hosts are rejected with a 400. Returns the whole page in one call - there is no pagination.`, {
|
|
5
|
+
url: z.string().min(1).max(2048)
|
|
6
|
+
.describe("The page to read. http(s) only; a bare host such as 'example.com' is upgraded to https. Internal, loopback and private-network hosts are rejected with a 400."),
|
|
7
|
+
format: z.enum(["html", "markdown", "text"]).optional()
|
|
8
|
+
.describe("Output format. 'markdown' = readability extraction of the main content (default, best for reading). 'text' = that Markdown flattened to plain prose. 'html' = the raw unprocessed page."),
|
|
9
|
+
mode: z.enum(["normal", "advanced", "ultra"]).optional()
|
|
10
|
+
.describe("THE PRICE-BEARING PARAMETER. 'normal' = plain fetch, 1 credit (default). 'advanced' = full JavaScript rendering for pages that are empty without it, 1 credit. 'ultra' = residential proxy for hard bot walls, 2 credits. Escalate only when a cheaper mode returns empty or blocked content."),
|
|
11
|
+
}, async (params) => {
|
|
12
|
+
try {
|
|
13
|
+
const data = await getClient().post("/api/v1/extract", params);
|
|
14
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
return handleApiError(err);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/tools/extract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,SAA6B;IAClF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,gsCAAgsC,EAChsC;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;aAC7B,QAAQ,CAAC,+JAA+J,CAAC;QAC5K,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE;aACpD,QAAQ,CAAC,yLAAyL,CAAC;QACtM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;aACrD,QAAQ,CAAC,+RAA+R,CAAC;KAC7S,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;YAC/D,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"}
|
package/dist/tools/g2.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { handleApiError } from "../lib/tool-error.js";
|
|
3
|
+
export function registerG2Tools(server, getClient) {
|
|
4
|
+
server.tool("search_g2_software", `G2, the B2B software review site. Search it for business software products and get ranked rows back as JSON: product name, star rating, review count, vendor, categories, seller description and logo. Every row carries the product_id and slug that get_g2_product and get_g2_reviews take, so this is the entry point when you only have a product name or a category ("CRM", "project management"). Also returns total_results - G2's Products-tab headline, capped at 10000 - and total_by_type, which breaks the same query across products, sellers, categories and discussions. Paginate with the page parameter; limit is capped at 100 results per request. Pass query or url - at least one is required. COSTS 5 CREDITS PER CALL: G2 is the most expensive platform Scavio serves, so search once with a good query rather than probing. A G2 bot wall comes back as an error that was still billed upstream, so retry sparingly.`, {
|
|
5
|
+
query: z.string().min(1).max(200).optional()
|
|
6
|
+
.describe("Software search term, e.g. 'project management' or 'notion'. Either this or url is required."),
|
|
7
|
+
url: z.string().min(1).max(1000).optional()
|
|
8
|
+
.describe("Full g2.com search URL to run verbatim, e.g. 'https://www.g2.com/search?query=crm'. Either this or query is required."),
|
|
9
|
+
page: z.number().int().min(1).optional()
|
|
10
|
+
.describe("Page number (1-indexed). 20 results per page unless limit says otherwise."),
|
|
11
|
+
limit: z.number().int().min(1).max(100).optional()
|
|
12
|
+
.describe("Results per page, 1-100 (default 20). 100 is our hard cap so a single request cannot ask for a multi-megabyte page; G2 itself keeps paginating at any size, so use page to go deeper."),
|
|
13
|
+
sort: z.enum(["relevance", "popular", "alphabetical", "rating"]).optional()
|
|
14
|
+
.describe("Sort order (default 'relevance'). Closed enum on purpose: G2 silently accepts an unknown sort and answers 200 in some unstated order, so an invalid value would look like it worked."),
|
|
15
|
+
rating: z.number().int().min(1).max(5).optional()
|
|
16
|
+
.describe("Only products at or above this star rating (1-5)."),
|
|
17
|
+
}, async (params) => {
|
|
18
|
+
try {
|
|
19
|
+
const data = await getClient().post("/api/v1/g2/search", params);
|
|
20
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
return handleApiError(err);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
server.tool("get_g2_product", `G2, the B2B software review site. Get one software product's full G2 profile as JSON: overall rating with the per-star histogram, review count, vendor, description and seller website, pricing editions with parsed amounts, feature groups, categories and breadcrumbs, supported languages, integrations, alternatives, head-to-head comparisons, media, community discussions, and G2's AI-derived pros and cons. THIS ENDPOINT CARRIES NO REVIEW TEXT AT ALL - G2 loads review bodies in a separate frame, so call get_g2_reviews for the actual written reviews. No pagination: one call returns the whole profile. product_id accepts either the slug ('notion') or the numeric G2 id ('82623') as a string; both resolve. Pass product_id or url - at least one is required. COSTS 5 CREDITS PER CALL, the most expensive platform Scavio serves. A G2 bot wall comes back as an error that was still billed upstream, so retry sparingly.`, {
|
|
27
|
+
product_id: z.string().min(1).max(200).optional()
|
|
28
|
+
.describe("G2 product slug ('notion') or numeric G2 id as a string ('82623') - both resolve on the same upstream path. Either this or url is required."),
|
|
29
|
+
url: z.string().min(1).max(1000).optional()
|
|
30
|
+
.describe("Full g2.com product URL, e.g. 'https://www.g2.com/products/notion/reviews'. Either this or product_id is required."),
|
|
31
|
+
}, async (params) => {
|
|
32
|
+
try {
|
|
33
|
+
const data = await getClient().post("/api/v1/g2/product", 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_g2_reviews", `G2, the B2B software review site. Get one page of written reviews for a software product as JSON: star rating, title, what the reviewer likes and dislikes, problems solved, reviewer job title, industry and company size, and validated/incentivized flags. This is the ONLY G2 tool that returns review text - get_g2_product deliberately has none. It also carries what the profile page has no form of: exact per-star review counts, pros and cons with per-theme counts, and company_size / role / industry / region / category facets with counts. Reviews are FIXED AT 10 PER PAGE and paginate well past the 10 pages G2's own widget links to, so walk page upward. The rating filter is HALF-STAR-INCLUSIVE: rating=1 returns 0, 0.5 and 1-star reviews. Every filter is a closed enum because an unrecognised filter value MATCHES NOTHING upstream and returns "Reviews (0)", which reads like the product genuinely has no such reviews. Pass product_id or url - at least one is required. COSTS 5 CREDITS PER PAGE, the most expensive platform Scavio serves, so filter down rather than paging blindly.`, {
|
|
41
|
+
product_id: z.string().min(1).max(200).optional()
|
|
42
|
+
.describe("G2 product slug ('notion') or numeric G2 id as a string ('82623'). Either this or url is required."),
|
|
43
|
+
url: z.string().min(1).max(1000).optional()
|
|
44
|
+
.describe("Full g2.com reviews URL. Either this or product_id is required."),
|
|
45
|
+
page: z.number().int().min(1).optional()
|
|
46
|
+
.describe("Page number (1-indexed). Fixed at 10 reviews per page; pages continue well past the 10 G2's own widget links to."),
|
|
47
|
+
sort: z.enum(["relevance", "newest", "most_helpful", "rating_high", "rating_low"]).optional()
|
|
48
|
+
.describe("Review sort order (default 'relevance'). Closed enum: G2 silently accepts an unknown sort and returns a full result set in some unstated order."),
|
|
49
|
+
rating: z.number().int().min(1).max(5).optional()
|
|
50
|
+
.describe("Star bucket, 1-5. HALF-STAR-INCLUSIVE: 1 returns 0, 0.5 and 1-star reviews."),
|
|
51
|
+
company_size: z.enum(["small_business", "mid_market", "enterprise"]).optional()
|
|
52
|
+
.describe("Reviewer company size: small_business (<=50 employees), mid_market (51-1000), enterprise (>1000). An unrecognised value would silently match nothing, hence the closed enum."),
|
|
53
|
+
role: z.enum(["user", "administrator", "executive_sponsor", "internal_consultant", "consultant", "agency", "industry_analyst"]).optional()
|
|
54
|
+
.describe("Reviewer's relationship to the product."),
|
|
55
|
+
region: z.enum(["north_america", "europe", "asia", "latin_america", "anz", "middle_east", "africa"]).optional()
|
|
56
|
+
.describe("Reviewer region."),
|
|
57
|
+
query: z.string().min(1).max(200).optional()
|
|
58
|
+
.describe("Full-text search within this product's reviews. Narrows the review list AND every facet count."),
|
|
59
|
+
}, async (params) => {
|
|
60
|
+
try {
|
|
61
|
+
const data = await getClient().post("/api/v1/g2/reviews", params);
|
|
62
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
return handleApiError(err);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=g2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"g2.js","sourceRoot":"","sources":["../../src/tools/g2.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { handleApiError } from "../lib/tool-error.js";
|
|
3
|
+
// employer_id / company / url repeat on three of the four endpoints. `company`
|
|
4
|
+
// is cosmetic on all of them and does NOT satisfy the identifier requirement —
|
|
5
|
+
// the backend refine takes employer_id or url only.
|
|
6
|
+
const employerIdField = z.string().min(1).max(50).optional()
|
|
7
|
+
.describe("Glassdoor employer id as a STRING, in any form Glassdoor writes it: '1699', 'E1699' or 'IE1699'. A JSON number is rejected. Get one from resolve_glassdoor_company. Either this or url is required.");
|
|
8
|
+
const companyField = z.string().min(1).max(200).optional()
|
|
9
|
+
.describe("Employer name as it appears in a Glassdoor slug, e.g. 'NIKE'. COSMETIC ONLY - the profile resolves on employer_id alone, and this is ignored entirely when url is set. It does NOT satisfy the employer_id-or-url requirement.");
|
|
10
|
+
export function registerGlassdoorTools(server, getClient) {
|
|
11
|
+
server.tool("resolve_glassdoor_company", `START HERE for Glassdoor. Search Glassdoor for a company by name and resolve it to the employer_id that every other Glassdoor tool requires. Returns data with ranked, de-duplicated employer matches, each carrying its employer_id, name and profile URL. The employer_id lives only inside Glassdoor's /Overview/ URLs, so call this first unless you already hold one. No pagination - one ranked set per query. Glassdoor is slow and flaky: expect seconds to tens of seconds, and an occasional 502 after as long as ~3 minutes; retry once before giving up. Costs 1 credit.`, {
|
|
12
|
+
query: z.string().min(1).max(120)
|
|
13
|
+
.describe("Company name to resolve, e.g. 'Nike'."),
|
|
14
|
+
}, async (params) => {
|
|
15
|
+
try {
|
|
16
|
+
const data = await getClient().post("/api/v1/glassdoor/companies", params);
|
|
17
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
return handleApiError(err);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
server.tool("get_glassdoor_company", `Get a Glassdoor employer profile as JSON: description, mission, industry, sector, HQ, size band, revenue band, stock symbol, year founded, overall and per-category ratings, star distribution, CEO approval, awards, FAQ, the five server-rendered reviews, plus reviews_url and salaries_url. THE CHAINING STEP: pass reviews_url or salaries_url back as the url parameter of get_glassdoor_reviews / get_glassdoor_salaries to halve the upstream work those calls do. Requires employer_id or url - company alone is NOT an address and is rejected. Use resolve_glassdoor_company to turn a name into an employer_id. No pagination. Slow (roughly 3-47 seconds) and occasionally 502s; retry once. Costs 1 credit.`, {
|
|
24
|
+
employer_id: employerIdField,
|
|
25
|
+
company: companyField,
|
|
26
|
+
url: z.string().min(1).max(500).optional()
|
|
27
|
+
.describe("Any glassdoor.com employer URL - /Overview/, /Reviews/ or /Salary/, e.g. 'https://www.glassdoor.com/Overview/Working-at-NIKE-EI_IE1699.11,15.htm'. A non-glassdoor.com host is rejected. Either this or employer_id is required."),
|
|
28
|
+
}, async (params) => {
|
|
29
|
+
try {
|
|
30
|
+
const data = await getClient().post("/api/v1/glassdoor/company", 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("get_glassdoor_reviews", `Get Glassdoor employee reviews for one employer as JSON: up to THREE full reviews with per-axis scores, pros, cons, advice to management, job title, location, employment status and employer response - plus complete rating statistics, star distribution, aggregate pro/con highlight terms and per-job-title review counts. HARD CAP OF THREE REVIEWS per call (Glassdoor's login wall) and there is deliberately NO page parameter, so do not attempt to paginate. Move the window with category and employment_status instead, and read filtered_review_count on the response to see how many reviews match. Requires employer_id or url - company alone is NOT an address. Passing the reviews_url from get_glassdoor_company as url skips a fetch. Slow (~75 seconds); retry once on a 502. Costs 1 credit.`, {
|
|
38
|
+
employer_id: employerIdField,
|
|
39
|
+
company: companyField,
|
|
40
|
+
url: z.string().min(1).max(500).optional()
|
|
41
|
+
.describe("Any glassdoor.com employer URL. Preferably the reviews_url returned by get_glassdoor_company, which skips the resolve fetch. A non-glassdoor.com host is rejected. Either this or employer_id is required."),
|
|
42
|
+
category: z.enum(["career_development", "compensation", "culture", "diversity_and_inclusion", "management", "work_life_balance"]).optional()
|
|
43
|
+
.describe("Restrict to reviews Glassdoor files under one topic. Closed set: Glassdoor silently IGNORES an unknown value and serves the unfiltered set under a 200."),
|
|
44
|
+
employment_status: z.enum(["full_time", "part_time", "contract", "intern"]).optional()
|
|
45
|
+
.describe("Restrict to one kind of employment. Closed set: Glassdoor silently IGNORES an unknown value and serves the unfiltered set under a 200."),
|
|
46
|
+
}, async (params) => {
|
|
47
|
+
try {
|
|
48
|
+
const data = await getClient().post("/api/v1/glassdoor/reviews", params);
|
|
49
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
return handleApiError(err);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
server.tool("get_glassdoor_salaries", `Get Glassdoor salary data for one employer as JSON, broken down by job title: base-pay and total-pay percentiles P10-P90 with medians called out, sample counts, currency, pay period and last-reported date. These are Glassdoor's ESTIMATES for each job title, not individual reported salaries. Ten job titles per page - pass page for the next ten and read page_count on the response for how many pages exist. Requires employer_id or url - company alone is NOT an address. Passing the salaries_url from get_glassdoor_company as url skips a fetch. Slow (~41 seconds); retry once on a 502. Costs 1 credit per page.`, {
|
|
56
|
+
employer_id: employerIdField,
|
|
57
|
+
company: companyField,
|
|
58
|
+
url: z.string().min(1).max(500).optional()
|
|
59
|
+
.describe("Any glassdoor.com employer URL. Preferably the salaries_url returned by get_glassdoor_company, which skips the resolve fetch. A non-glassdoor.com host is rejected. Either this or employer_id is required."),
|
|
60
|
+
page: z.number().int().min(1).optional()
|
|
61
|
+
.describe("Results page, 1-based. Ten job titles per page; page_count on the response is how many pages there are. Defaults to 1."),
|
|
62
|
+
}, async (params) => {
|
|
63
|
+
try {
|
|
64
|
+
const data = await getClient().post("/api/v1/glassdoor/salaries", params);
|
|
65
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
return handleApiError(err);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=glassdoor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glassdoor.js","sourceRoot":"","sources":["../../src/tools/glassdoor.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/google.js
CHANGED
|
@@ -1,16 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import {
|
|
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 registerGoogleTools(server, getClient) {
|
|
15
4
|
server.tool("search_google", `Search Google (v2) and return structured SERP results as JSON: organic results (title, URL, snippet), ads, and the AI Overview when Google shows one. Use when the user asks to search the web, find current information, or look something up online. Costs 1 credit.`, {
|
|
16
5
|
query: z.string().min(1).max(500)
|
package/dist/tools/google.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/tools/google.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/tools/google.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { handleApiError } from "../lib/tool-error.js";
|
|
3
|
+
export function registerGoogleAdsTools(server, getClient) {
|
|
4
|
+
server.tool("resolve_google_ads_advertiser", `Google Ads Transparency Center - the public record of ads running on Google Search, YouTube, Maps, Play and Shopping. START HERE: this resolves a brand name or a domain into the advertiser_id that search_google_ads and get_google_ads_creative are keyed by. Returns two kinds of row in one list as JSON: 'advertiser' rows carrying the advertiser id, Google-verified name, verification country and the advertiser's TOTAL AD COUNT AS A RANGE (total_ads_min / total_ads_max - Google never publishes an exact figure), and 'domain' rows carrying a website. A name query returns both kinds; a domain-shaped query returns domains only. NO PAGINATION - this is an autocomplete. limit applies PER ARM: advertisers and domains are capped separately, so a name query can return up to twice limit rows, and 20 per arm is the ceiling. Costs 1 credit.`, {
|
|
5
|
+
query: z.string().min(1).max(200)
|
|
6
|
+
.describe("Brand name or domain to resolve, e.g. 'Nike' or 'nike.com'. A name returns advertiser and domain rows; a domain-shaped query returns domain rows only."),
|
|
7
|
+
region: z.string().min(2).max(12).optional()
|
|
8
|
+
.describe("ISO alpha-2 country code (US, GB, DE) or a Google geo criteria id as a string. Default: no region filter."),
|
|
9
|
+
limit: z.number().int().min(1).max(20).optional()
|
|
10
|
+
.describe("Rows PER ARM, 1-20 (default 10). Advertisers and domains are capped separately, so a name query can return up to twice this many rows in total."),
|
|
11
|
+
}, async (params) => {
|
|
12
|
+
try {
|
|
13
|
+
const data = await getClient().post("/api/v1/googleads/advertisers", params);
|
|
14
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
return handleApiError(err);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
server.tool("search_google_ads", `Google Ads Transparency Center - the public record of ads running on Google Search, YouTube, Maps, Play and Shopping. Lists every ad Google is currently running for ONE advertiser, as JSON: the creative (archived image, rich-media bundle, Google's own renderer link, dimensions), the advertiser id and name, the format, first and last seen dates, how many days it actually ran, plus total_ads_min / total_ads_max and next_cursor. Pass domain or advertiser_id - at least one is required; get the advertiser_id from resolve_google_ads_advertiser. PAGINATION IS BY CURSOR: send next_cursor from the previous response as cursor AND RE-SEND THE SAME FILTERS alongside it; next_cursor is null once the advertiser is exhausted. 100 rows is a HARD UPSTREAM CEILING on limit, not our policy - ask for more and Google returns ZERO rows rather than an error. The text, image and video format sets are DISJOINT: an advertiser's text, image and video ads share no creatives, so a format filter is not a subset of the unfiltered result. region scopes the deep links on every row, and the same advertiser can share zero creatives between two countries. Querying by domain is the ONLY way to get the domain field back on each row - an advertiser_id query drops it entirely. The headline ad total is a RANGE (total_ads_min / total_ads_max), never an exact count. Impression and reach figures are DSA-compelled and EEA-ONLY: impressions_min, impressions_max and first_shown are null outside the EEA and always null for US ads - expected, not a bug. Costs 1 credit per page.`, {
|
|
21
|
+
domain: z.string().min(1).max(253).optional()
|
|
22
|
+
.describe("Advertiser website - bare host, www host or full URL; reduced to the registrable host. THE ONLY WAY to get the domain field back on each row. Either this or advertiser_id is required."),
|
|
23
|
+
advertiser_id: z.string().min(3).max(40).optional()
|
|
24
|
+
.describe("Google advertiser id from resolve_google_ads_advertiser, e.g. 'AR16735076323512287233'. The shape is checked before any request, so a typo costs nothing. Either this or domain is required."),
|
|
25
|
+
region: z.string().min(2).max(12).optional()
|
|
26
|
+
.describe("ISO alpha-2 country code (US, GB, DE) or a Google geo criteria id as a string. Scopes the deep links on every row; the same advertiser can share zero creatives between two countries. Default: worldwide, no region filter."),
|
|
27
|
+
format: z.enum(["text", "image", "video"]).optional()
|
|
28
|
+
.describe("Creative format. The three sets are DISJOINT - an advertiser's text, image and video ads share no creatives. Default: all formats."),
|
|
29
|
+
platform: z.enum(["play", "maps", "search", "shopping", "youtube"]).optional()
|
|
30
|
+
.describe("Google surface the ad ran on. Default: all surfaces."),
|
|
31
|
+
topic: z.enum(["all", "political"]).optional()
|
|
32
|
+
.describe("Ad topic (default 'all'). 'political' restricts to election and issue ads."),
|
|
33
|
+
limit: z.number().int().min(1).max(100).optional()
|
|
34
|
+
.describe("Ads per page, 1-100 (default 40). 100 is a HARD UPSTREAM CEILING: Google answers a larger request with zero rows rather than an error."),
|
|
35
|
+
cursor: z.string().min(1).max(4000).optional()
|
|
36
|
+
.describe("next_cursor from the previous response. RE-SEND THE SAME FILTERS alongside it. next_cursor is null once exhausted."),
|
|
37
|
+
}, async (params) => {
|
|
38
|
+
try {
|
|
39
|
+
const data = await getClient().post("/api/v1/googleads/search", params);
|
|
40
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
return handleApiError(err);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
server.tool("get_google_ads_creative", `Google Ads Transparency Center - the public record of ads running on Google Search, YouTube, Maps, Play and Shopping. Get one ad creative in full as JSON, and the ONLY endpoint that carries its history: every size variation of the asset, the impression bucket, the per-region breakdown with first and last shown dates and a per-surface impression split inside each region, the format, Google's category label, and the funder disclosure on political ads. KEYED BY THE advertiser_id + creative_id PAIR - a creative_id that does not belong to that advertiser is a 404, so take both from the same search_google_ads row. Impression and reach data is DSA-compelled and EEA-ONLY: impressions_min, impressions_max and first_shown are null outside the EEA and always null for US creatives - expected, not a bug, so use an EEA region if you need reach. An impression row can carry a lower bound, an upper bound, or just one of the two. No pagination. Costs 1 credit.`, {
|
|
47
|
+
advertiser_id: z.string().min(3).max(40)
|
|
48
|
+
.describe("Google advertiser id, e.g. 'AR16735076323512287233'. Must be the advertiser the creative belongs to - the lookup is keyed by the pair."),
|
|
49
|
+
creative_id: z.string().min(3).max(40)
|
|
50
|
+
.describe("Creative id from a search_google_ads row. Must belong to the advertiser_id sent with it - a mismatched pair is a 404."),
|
|
51
|
+
}, async (params) => {
|
|
52
|
+
try {
|
|
53
|
+
const data = await getClient().post("/api/v1/googleads/creative", params);
|
|
54
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
return handleApiError(err);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=googleads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"googleads.js","sourceRoot":"","sources":["../../src/tools/googleads.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { handleApiError } from "../lib/tool-error.js";
|
|
3
|
+
const hlField = z.string().min(2).max(20).optional()
|
|
4
|
+
.describe("UI language, e.g. 'en' or 'pt-BR'. Changes the STOREFRONT rather than only the strings - at hl=pt-BR the title, description, install formatting and content rating all move with it. Play silently falls back to English on a language it does not serve. Defaults to 'en'.");
|
|
5
|
+
const glField = z.string().min(2).max(10).optional()
|
|
6
|
+
.describe("Two-letter country code deciding which storefront's price and availability are returned (USD / BRL / JPY on the same app). Play silently falls back to the US storefront on a country it does not serve. Defaults to 'us'.");
|
|
7
|
+
const appIdField = z.string().min(1).max(500)
|
|
8
|
+
.describe("Android package name ('com.spotify.music') or any play.google.com URL carrying one in its id param.");
|
|
9
|
+
export function registerGooglePlayTools(server, getClient) {
|
|
10
|
+
server.tool("search_google_play", `Search Google Play, the Android app store (NOT Google web search), and return ranked apps as JSON: package name, title, developer, rating, install count, price and in-app-purchase range, content rating, icon and screenshots. A branded query returns Play's hero card as result 1 projected to the same row shape, plus Play's related-query rail. NO PAGINATION - Play serves one shelf of about 30 apps and there is no page or cursor parameter, so do not try to page for more. hl changes the STOREFRONT, not just the strings (title, description, install formatting and content rating all move with it), and Play silently falls back to English/US on a value it does not serve. Apps only: games are folded into the apps vertical, but books and films use a different card shape and are not covered. Costs 2 credits.`, {
|
|
11
|
+
query: z.string().min(1).max(200)
|
|
12
|
+
.describe("What to search the store for: an app name, a publisher, or a category phrase, e.g. 'music player'."),
|
|
13
|
+
hl: hlField,
|
|
14
|
+
gl: glField,
|
|
15
|
+
}, async (params) => {
|
|
16
|
+
try {
|
|
17
|
+
const data = await getClient().post("/api/v1/googleplay/search", params);
|
|
18
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
return handleApiError(err);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
server.tool("get_google_play_app", `Get one Google Play (Android app store) listing in full as JSON: installs including the REAL install count Play publishes but never renders on the page, rating and star histogram, description, developer identity and legal contact, price and in-app purchases, categories and gameplay tags, screenshots and trailer, version and Android requirement, release and update dates, changelog, the full permission tree, the Data safety table, the 20 server-rendered reviews, and the similar-apps and more-by-developer rails. Those 20 reviews ride along at no extra cost - only call get_google_play_reviews to page past them or to sort differently. Accepts an Android package name ('com.spotify.music') or any play.google.com URL carrying one in its id param. Costs 2 credits.`, {
|
|
25
|
+
app_id: appIdField,
|
|
26
|
+
hl: hlField,
|
|
27
|
+
gl: glField,
|
|
28
|
+
}, async (params) => {
|
|
29
|
+
try {
|
|
30
|
+
const data = await getClient().post("/api/v1/googleplay/app", 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("get_google_play_reviews", `Get a page of Google Play (Android app store) reviews as JSON: star score, full text, author, thumbs-up count, developer reply, and the APP VERSION the reviewer was running. Page with data.next_cursor sent back as cursor. The cursor is OPAQUE and SINGLE-USE and encodes the sort as well as the position, so send it back with the SAME sort it came from; a cursor past the last review is a 404, not an empty page. count is capped at 200 - a single page that large is megabytes for one call. get_google_play_app already returns 20 reviews for free, so use this only to go past them or to sort differently. A package with no reviews, or one that does not exist, answers a BILLED 404. Costs 2 credits per page.`, {
|
|
38
|
+
app_id: appIdField,
|
|
39
|
+
sort: z.enum(["relevance", "newest", "rating"]).optional()
|
|
40
|
+
.describe("Review ordering. If you are paging with a cursor, this MUST match the sort the cursor came from. Defaults to 'newest'."),
|
|
41
|
+
count: z.number().int().min(1).max(200).optional()
|
|
42
|
+
.describe("Reviews to return, 1-200. Play itself honours far more, but a single page that large is megabytes for one credit - page with cursor instead. Defaults to 50."),
|
|
43
|
+
cursor: z.string().min(1).max(4000).optional()
|
|
44
|
+
.describe("Continuation token from a previous response's next_cursor. Opaque and SINGLE-USE, and it encodes the sort as well as the position, so resend it with the same sort. A cursor past the last review is a 404, not an empty page."),
|
|
45
|
+
hl: hlField,
|
|
46
|
+
gl: glField,
|
|
47
|
+
}, async (params) => {
|
|
48
|
+
try {
|
|
49
|
+
const data = await getClient().post("/api/v1/googleplay/reviews", params);
|
|
50
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
return handleApiError(err);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=googleplay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"googleplay.js","sourceRoot":"","sources":["../../src/tools/googleplay.ts"],"names":[],"mappings":"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"}
|