@scavio/mcp-server 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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,71 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { handleApiError } from "../lib/tool-error.js";
|
|
3
|
+
// No zod `.default()` anywhere in this file. The MCP SDK applies a zod default
|
|
4
|
+
// BEFORE the handler runs, so a defaulted field is posted on every call whether
|
|
5
|
+
// the model set it or not. That matters more here than elsewhere: Home Depot
|
|
6
|
+
// does NOT fall back on an unknown sort — it answers 200 with an empty page
|
|
7
|
+
// that scrape.do still bills — so a bad value costs credits and returns
|
|
8
|
+
// nothing. Upstream defaults are documented in the describe text instead.
|
|
9
|
+
export function registerHomeDepotTools(server, getClient) {
|
|
10
|
+
server.tool("search_home_depot", `Search Home Depot and return the product grid as JSON. Each row carries the item id and URL, title, brand and model number, price with any promotion or was-price, rating and review count, badges, image, and per-store pickup and delivery availability.
|
|
11
|
+
|
|
12
|
+
PAGE SIZE IS FIXED AT 12 products and cannot be changed — there is no per_page param. Paging is the only way to read further, so budget for it: 100 products is 9 calls, and at 2 credits each that is 18 credits.
|
|
13
|
+
|
|
14
|
+
sort_by is a CLOSED enum. Home Depot does not fall back on an unrecognised sort — it answers 200 with an EMPTY page that is still billed — so only send one of the listed values. 'Newest' (arrivaldate) is deliberately absent because Home Depot accepts it on category pages and rejects it on keyword search.
|
|
15
|
+
|
|
16
|
+
Out-of-range pages come back as billed 200 shells that we restate as 404. Costs 2 credits per page.`, {
|
|
17
|
+
query: z.string().min(1).max(500)
|
|
18
|
+
.describe("Product search query, e.g. 'cordless drill 20v'."),
|
|
19
|
+
page: z.number().int().min(1).optional()
|
|
20
|
+
.describe("Results page, 1-based. 12 products per page, FIXED — paging is the only way to read further. One page per call, 2 credits each."),
|
|
21
|
+
sort_by: z.enum(["best_match", "top_sellers", "top_rated", "price_low", "price_high"]).optional()
|
|
22
|
+
.describe("Sort order. CLOSED enum — an unrecognised value returns a billed, EMPTY page rather than an error, so never send anything outside this list. Upstream default is 'best_match'. 'Newest' is unavailable on keyword search."),
|
|
23
|
+
min_price: z.number().min(0).optional()
|
|
24
|
+
.describe("Minimum price filter in USD."),
|
|
25
|
+
max_price: z.number().min(0).optional()
|
|
26
|
+
.describe("Maximum price filter in USD."),
|
|
27
|
+
}, async (params) => {
|
|
28
|
+
try {
|
|
29
|
+
const data = await getClient().post("/api/v1/homedepot/search", params);
|
|
30
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
return handleApiError(err);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
server.tool("get_home_depot_product", `Get one Home Depot item in full as JSON: title, item id and URL, brand and model number, pricing and promotions, images and videos, the specification table, dimensions, feature bullets, attached documents (manuals, spec sheets, warranties) and the return policy.
|
|
37
|
+
|
|
38
|
+
This carries only a 10-REVIEW PREVIEW. Do not treat it as the review source — call get_home_depot_reviews, which is the paginated surface with the full bodies and the rating distribution.
|
|
39
|
+
|
|
40
|
+
Accepts an item id or a full homedepot.com/p/... URL; tracking params are discarded for you. An unknown item id arrives from Home Depot as a billed 200 shell and is restated as a 404. No pagination. Costs 2 credits.`, {
|
|
41
|
+
item_id: z.string().min(1)
|
|
42
|
+
.describe("Home Depot item id, e.g. '206566893', or a full homedepot.com/p/... URL. Tracking params are stripped."),
|
|
43
|
+
}, async (params) => {
|
|
44
|
+
try {
|
|
45
|
+
const data = await getClient().post("/api/v1/homedepot/product", params);
|
|
46
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
return handleApiError(err);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
server.tool("get_home_depot_reviews", `Get one page of Home Depot reviews for an item as JSON: the full review bodies with author, date, rating, title, text, verified-purchase and recommend flags, plus the overall rating distribution, per-attribute ratings, customer photos and any seller or manufacturer responses.
|
|
53
|
+
|
|
54
|
+
30 reviews per page — use page to walk them. total_pages is the LAST page that exists: asking past it is a 404, so stop there rather than probing for more. This is the paginated review surface; get_home_depot_product only carries a 10-review preview.
|
|
55
|
+
|
|
56
|
+
Costs 2 credits per page.`, {
|
|
57
|
+
item_id: z.string().min(1)
|
|
58
|
+
.describe("Home Depot item id, e.g. '206566893', or a full homedepot.com/p/... URL."),
|
|
59
|
+
page: z.number().int().min(1).optional()
|
|
60
|
+
.describe("Review page, 1-based. 30 reviews per page. Requesting past total_pages returns a 404. One page per call, 2 credits each."),
|
|
61
|
+
}, async (params) => {
|
|
62
|
+
try {
|
|
63
|
+
const data = await getClient().post("/api/v1/homedepot/reviews", params);
|
|
64
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
return handleApiError(err);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=homedepot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"homedepot.js","sourceRoot":"","sources":["../../src/tools/homedepot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,+EAA+E;AAC/E,gFAAgF;AAChF,6EAA6E;AAC7E,4EAA4E;AAC5E,wEAAwE;AACxE,0EAA0E;AAE1E,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,SAA6B;IACrF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB;;;;;;oGAMgG,EAChG;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;aAC9B,QAAQ,CAAC,kDAAkD,CAAC;QAC/D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;aACrC,QAAQ,CAAC,iIAAiI,CAAC;QAC9I,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE;aAC9F,QAAQ,CAAC,2NAA2N,CAAC;QACxO,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;aACpC,QAAQ,CAAC,8BAA8B,CAAC;QAC3C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;aACpC,QAAQ,CAAC,8BAA8B,CAAC;KAC5C,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;YACxE,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,wBAAwB,EACxB;;;;wNAIoN,EACpN;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;aACvB,QAAQ,CAAC,wGAAwG,CAAC;KACtH,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,wBAAwB,EACxB;;;;0BAIsB,EACtB;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;aACvB,QAAQ,CAAC,0EAA0E,CAAC;QACvF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;aACrC,QAAQ,CAAC,0HAA0H,CAAC;KACxI,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;AACJ,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
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 companyField = () => z.string().min(1).max(200)
|
|
10
|
+
.describe("Indeed company slug as it appears in indeed.com/cmp/<slug>, e.g. 'Infosys', or a full profile URL. Slugs are untidy in the wild ('Tata-Consultancy-Services-(tcs)'). This is what company_slug on a job response returns — prefer that over guessing, since an unknown slug is a real 404 that is BILLED.");
|
|
11
|
+
export function registerIndeedTools(server, getClient) {
|
|
12
|
+
server.tool("search_indeed_jobs", `Search Indeed job postings as JSON. Each posting carries its job key, title, employer name and employer rating, location, salary range, job type, benefits, posting age, apply route, and the company_slug that get_indeed_company takes.
|
|
13
|
+
|
|
14
|
+
Either query or location is required, and a LOCATION-ONLY search is valid — pass location with no query to list every posting in a metro.
|
|
15
|
+
|
|
16
|
+
Two parameters are closed sets because Indeed silently ignores anything else and returns the UNFILTERED set, which means you get billed for a much wider search than you asked for: radius accepts only 0, 5, 10, 15, 25, 35, 50 or 100 miles (Indeed's own default is 50), and max_age_days accepts only 1, 3, 7 or 14.
|
|
17
|
+
|
|
18
|
+
min_salary filters on INDEED'S OWN SALARY ESTIMATE for the role, not on a posted figure, so postings that publish no salary at all still match it.
|
|
19
|
+
|
|
20
|
+
Paginate with page: 10 postings per page. Costs 2 credits per page.`, {
|
|
21
|
+
query: z.string().min(1).max(500).optional()
|
|
22
|
+
.describe("Job keyword search, e.g. 'software engineer'. Either this or location is required."),
|
|
23
|
+
location: z.string().min(1).max(200).optional()
|
|
24
|
+
.describe("City and state ('Austin, TX'), postal code, state, country, or 'Remote'. Valid on its own with NO query — that lists every posting in the location. Either this or query is required."),
|
|
25
|
+
page: z.number().int().min(1).optional()
|
|
26
|
+
.describe("Results page, 1-based. 10 postings per page, 2 credits per page."),
|
|
27
|
+
radius: z.union([
|
|
28
|
+
z.literal(0), z.literal(5), z.literal(10), z.literal(15),
|
|
29
|
+
z.literal(25), z.literal(35), z.literal(50), z.literal(100),
|
|
30
|
+
]).optional()
|
|
31
|
+
.describe("Miles from location. ONLY 0, 5, 10, 15, 25, 35, 50 or 100 — Indeed accepts no other value and silently ignores it, returning the unfiltered set. Indeed's own default is 50."),
|
|
32
|
+
max_age_days: z.union([z.literal(1), z.literal(3), z.literal(7), z.literal(14)]).optional()
|
|
33
|
+
.describe("Only postings from the last 1, 3, 7 or 14 days. ONLY those four values — anything else is silently ignored upstream."),
|
|
34
|
+
job_type: z.enum(["full_time", "part_time", "contract", "temporary", "internship"]).optional()
|
|
35
|
+
.describe("Employment type filter."),
|
|
36
|
+
min_salary: z.number().min(0).optional()
|
|
37
|
+
.describe("Minimum annual salary. Filters on INDEED'S OWN ESTIMATE for the role, not on a posted figure — postings that publish no salary still match."),
|
|
38
|
+
remote: z.boolean().optional()
|
|
39
|
+
.describe("Only remote postings."),
|
|
40
|
+
}, async (params) => {
|
|
41
|
+
try {
|
|
42
|
+
const data = await getClient().post("/api/v1/indeed/search", params);
|
|
43
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
return handleApiError(err);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
server.tool("get_indeed_job", `Get one Indeed job posting in full as JSON: the complete description as both text and HTML, structured salary, employment types, benefits, geocoded address, employer name and rating, applicant count, and the link to the original ATS posting.
|
|
50
|
+
|
|
51
|
+
Accepts the 16-hex Indeed job key, or any indeed.com URL carrying jk= (/viewjob, /rc/clk and /pagead/clk all work) — tracking parameters are discarded for you. Job keys come from search_indeed_jobs.
|
|
52
|
+
|
|
53
|
+
An unknown job key is a real 404 upstream that is still BILLED, so do not probe with guessed keys. Single-posting lookup, no pagination. Costs 2 credits.`, {
|
|
54
|
+
job_id: z.string().min(1)
|
|
55
|
+
.describe("Indeed job key (16 hex characters), e.g. 'db268b11ac6ba55b', or any indeed.com URL carrying jk=. Tracking params are stripped."),
|
|
56
|
+
}, async (params) => {
|
|
57
|
+
try {
|
|
58
|
+
const data = await getClient().post("/api/v1/indeed/job", params);
|
|
59
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
return handleApiError(err);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
server.tool("get_indeed_company", `Get an Indeed employer profile as JSON: description, industry, headquarters, company size, revenue, CEO approval, the overall rating plus per-category ratings (work/life balance, pay and benefits, job security, management, culture), reported salaries by role, open roles, and office locations.
|
|
66
|
+
|
|
67
|
+
Accepts the indeed.com/cmp/<slug> slug or a full profile URL. Take the slug from company_slug on a search_indeed_jobs result — an unknown slug is a real 404 upstream that is still BILLED.
|
|
68
|
+
|
|
69
|
+
Profile only, no reviews and no pagination: call get_indeed_company_reviews for the review bodies. Costs 2 credits.`, {
|
|
70
|
+
company: companyField(),
|
|
71
|
+
}, async (params) => {
|
|
72
|
+
try {
|
|
73
|
+
const data = await getClient().post("/api/v1/indeed/company", 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("get_indeed_company_reviews", `Get Indeed EMPLOYEE reviews for a company as JSON: review text with per-category ratings, pros and cons, and the reviewer's job title and location, plus aggregated sentiment and the topic, location and job-title breakdowns.
|
|
81
|
+
|
|
82
|
+
These are reviews of the employer written by staff — use them for employer-brand and workplace research, not for product reviews.
|
|
83
|
+
|
|
84
|
+
Accepts the indeed.com/cmp/<slug> slug or a full profile URL; an unknown slug is a real 404 upstream that is still BILLED. Paginate with page: 20 reviews per page. Costs 2 credits per page.`, {
|
|
85
|
+
company: companyField(),
|
|
86
|
+
page: z.number().int().min(1).optional()
|
|
87
|
+
.describe("Reviews page, 1-based. 20 reviews per page, 2 credits per page."),
|
|
88
|
+
}, async (params) => {
|
|
89
|
+
try {
|
|
90
|
+
const data = await getClient().post("/api/v1/indeed/company/reviews", params);
|
|
91
|
+
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
return handleApiError(err);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=indeed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indeed.js","sourceRoot":"","sources":["../../src/tools/indeed.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -1,3 +1,44 @@
|
|
|
1
1
|
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import type { ScavioClient } from "../lib/client.js";
|
|
3
|
-
export declare
|
|
3
|
+
export declare const PLATFORM_KEYS: string[];
|
|
4
|
+
/**
|
|
5
|
+
* What registers when SCAVIO_PLATFORMS is unset.
|
|
6
|
+
*
|
|
7
|
+
* Registering everything is not an option any more. The full surface is 191
|
|
8
|
+
* tools, which serialises to 262KB of tools/list (measured, not estimated) —
|
|
9
|
+
* roughly 70k tokens pushed into the context of EVERY session before the user
|
|
10
|
+
* has typed anything, and past the hard tool-count ceiling some clients
|
|
11
|
+
* enforce. The 100-tool surface this replaces already cost ~26k tokens.
|
|
12
|
+
*
|
|
13
|
+
* The default is therefore exactly what 0.12.x registered, plus extract:
|
|
14
|
+
* upgrading must never silently remove a tool someone already depends on. A
|
|
15
|
+
* user who had TikTok or LinkedIn working yesterday still has it today, and
|
|
16
|
+
* the context cost is unchanged from the version they were already running.
|
|
17
|
+
* extract joins them because it is a single tool and the read-any-page
|
|
18
|
+
* primitive an agent reaches for in almost every session.
|
|
19
|
+
*
|
|
20
|
+
* The 22 platforms added in 0.13.0 are opt-in via SCAVIO_PLATFORMS — growth
|
|
21
|
+
* goes behind the flag, the existing contract does not move.
|
|
22
|
+
*/
|
|
23
|
+
export declare const DEFAULT_PLATFORMS: string[];
|
|
24
|
+
/**
|
|
25
|
+
* Turn a SCAVIO_PLATFORMS value into the canonical platform keys to register.
|
|
26
|
+
*
|
|
27
|
+
* Accepts a comma-separated list of platform keys, plus three keywords:
|
|
28
|
+
* all — every platform (191 tools)
|
|
29
|
+
* default — expands to DEFAULT_PLATFORMS, so `default,sec,g2` is additive
|
|
30
|
+
* none — no platform tools at all, leaving only get_usage
|
|
31
|
+
*
|
|
32
|
+
* Unknown entries are warned about and skipped rather than fatal: a typo in one
|
|
33
|
+
* key must not take down a server the user has already wired into a client.
|
|
34
|
+
* A list that is entirely typos falls back to the default for the same reason.
|
|
35
|
+
* Always returned in PLATFORMS order, never in the order the user typed.
|
|
36
|
+
*/
|
|
37
|
+
export declare function resolvePlatforms(raw: string | undefined | null): string[];
|
|
38
|
+
/**
|
|
39
|
+
* Register the allowlisted platform tools plus get_usage.
|
|
40
|
+
*
|
|
41
|
+
* `platformsRaw` lets the HTTP transport pass a per-request override (header or
|
|
42
|
+
* query param), since a hosted remote has no per-user env var to read.
|
|
43
|
+
*/
|
|
44
|
+
export declare function registerAllTools(server: McpServer, getClient: () => ScavioClient, platformsRaw?: string | undefined): string[];
|
package/dist/tools/index.js
CHANGED
|
@@ -1,25 +1,214 @@
|
|
|
1
|
+
import { env } from "../lib/env.js";
|
|
2
|
+
import { registerExtractTool } from "./extract.js";
|
|
1
3
|
import { registerGoogleTools } from "./google.js";
|
|
2
4
|
import { registerYoutubeTools } from "./youtube.js";
|
|
3
|
-
import { registerAmazonTools } from "./amazon.js";
|
|
4
|
-
import { registerWalmartTools } from "./walmart.js";
|
|
5
|
-
import { registerUsageTool } from "./usage.js";
|
|
6
5
|
import { registerTiktokTools } from "./tiktok.js";
|
|
7
|
-
import { registerTiktokShopTools } from "./tiktok-shop.js";
|
|
8
6
|
import { registerInstagramTools } from "./instagram.js";
|
|
9
7
|
import { registerRedditTools } from "./reddit.js";
|
|
10
8
|
import { registerXTools } from "./x.js";
|
|
11
9
|
import { registerLinkedinTools } from "./linkedin.js";
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
10
|
+
import { registerThreadsTools } from "./threads.js";
|
|
11
|
+
import { registerKuaishouTools } from "./kuaishou.js";
|
|
12
|
+
import { registerAmazonTools } from "./amazon.js";
|
|
13
|
+
import { registerWalmartTools } from "./walmart.js";
|
|
14
|
+
import { registerEbayTools } from "./ebay.js";
|
|
15
|
+
import { registerTargetTools } from "./target.js";
|
|
16
|
+
import { registerHomeDepotTools } from "./homedepot.js";
|
|
17
|
+
import { registerTiktokShopTools } from "./tiktok-shop.js";
|
|
18
|
+
import { registerBookingTools } from "./booking.js";
|
|
19
|
+
import { registerAirbnbTools } from "./airbnb.js";
|
|
20
|
+
import { registerTripadvisorTools } from "./tripadvisor.js";
|
|
21
|
+
import { registerYelpTools } from "./yelp.js";
|
|
22
|
+
import { registerZillowTools } from "./zillow.js";
|
|
23
|
+
import { registerRedfinTools } from "./redfin.js";
|
|
24
|
+
import { registerIndeedTools } from "./indeed.js";
|
|
25
|
+
import { registerGlassdoorTools } from "./glassdoor.js";
|
|
26
|
+
import { registerAppStoreTools } from "./appstore.js";
|
|
27
|
+
import { registerGooglePlayTools } from "./googleplay.js";
|
|
28
|
+
import { registerG2Tools } from "./g2.js";
|
|
29
|
+
import { registerCapterraTools } from "./capterra.js";
|
|
30
|
+
import { registerGoogleAdsTools } from "./googleads.js";
|
|
31
|
+
import { registerMetaAdsTools } from "./metaads.js";
|
|
32
|
+
import { registerSecTools } from "./sec.js";
|
|
33
|
+
import { registerCompaniesHouseTools } from "./companieshouse.js";
|
|
34
|
+
import { registerUsageTool } from "./usage.js";
|
|
35
|
+
/**
|
|
36
|
+
* Every registrable surface, keyed by platform. Iteration order here is the
|
|
37
|
+
* order tools are registered, and therefore the order they appear in
|
|
38
|
+
* tools/list — keep it stable so client-side tool caches stay stable.
|
|
39
|
+
*
|
|
40
|
+
* Keys match the platform keys in gtm/fanout-spec.json. Lookups are normalised
|
|
41
|
+
* (case-insensitive, punctuation-insensitive), so `meta-ads`, `metaads` and
|
|
42
|
+
* `META_ADS` all resolve to the same entry.
|
|
43
|
+
*
|
|
44
|
+
* `get_usage` is deliberately NOT in here: it reports the caller's own credit
|
|
45
|
+
* balance, costs nothing, and is what every install guide tells a user to call
|
|
46
|
+
* to verify the server works. It registers unconditionally.
|
|
47
|
+
*/
|
|
48
|
+
const PLATFORMS = {
|
|
49
|
+
// Core
|
|
50
|
+
extract: registerExtractTool,
|
|
51
|
+
// Search
|
|
52
|
+
google: registerGoogleTools,
|
|
53
|
+
// Social and video
|
|
54
|
+
youtube: registerYoutubeTools,
|
|
55
|
+
tiktok: registerTiktokTools,
|
|
56
|
+
instagram: registerInstagramTools,
|
|
57
|
+
reddit: registerRedditTools,
|
|
58
|
+
x: registerXTools,
|
|
59
|
+
linkedin: registerLinkedinTools,
|
|
60
|
+
threads: registerThreadsTools,
|
|
61
|
+
kuaishou: registerKuaishouTools,
|
|
62
|
+
// Retail and marketplaces
|
|
63
|
+
amazon: registerAmazonTools,
|
|
64
|
+
walmart: registerWalmartTools,
|
|
65
|
+
ebay: registerEbayTools,
|
|
66
|
+
target: registerTargetTools,
|
|
67
|
+
homedepot: registerHomeDepotTools,
|
|
68
|
+
"tiktok-shop": registerTiktokShopTools,
|
|
69
|
+
// Travel and local
|
|
70
|
+
booking: registerBookingTools,
|
|
71
|
+
airbnb: registerAirbnbTools,
|
|
72
|
+
tripadvisor: registerTripadvisorTools,
|
|
73
|
+
yelp: registerYelpTools,
|
|
74
|
+
// Real estate
|
|
75
|
+
zillow: registerZillowTools,
|
|
76
|
+
redfin: registerRedfinTools,
|
|
77
|
+
// Jobs and employer data
|
|
78
|
+
indeed: registerIndeedTools,
|
|
79
|
+
glassdoor: registerGlassdoorTools,
|
|
80
|
+
// App stores
|
|
81
|
+
appstore: registerAppStoreTools,
|
|
82
|
+
googleplay: registerGooglePlayTools,
|
|
83
|
+
// Software reviews
|
|
84
|
+
g2: registerG2Tools,
|
|
85
|
+
capterra: registerCapterraTools,
|
|
86
|
+
// Ad libraries
|
|
87
|
+
googleads: registerGoogleAdsTools,
|
|
88
|
+
metaads: registerMetaAdsTools,
|
|
89
|
+
// Company and financial filings
|
|
90
|
+
sec: registerSecTools,
|
|
91
|
+
companieshouse: registerCompaniesHouseTools,
|
|
92
|
+
};
|
|
93
|
+
export const PLATFORM_KEYS = Object.keys(PLATFORMS);
|
|
94
|
+
/**
|
|
95
|
+
* What registers when SCAVIO_PLATFORMS is unset.
|
|
96
|
+
*
|
|
97
|
+
* Registering everything is not an option any more. The full surface is 191
|
|
98
|
+
* tools, which serialises to 262KB of tools/list (measured, not estimated) —
|
|
99
|
+
* roughly 70k tokens pushed into the context of EVERY session before the user
|
|
100
|
+
* has typed anything, and past the hard tool-count ceiling some clients
|
|
101
|
+
* enforce. The 100-tool surface this replaces already cost ~26k tokens.
|
|
102
|
+
*
|
|
103
|
+
* The default is therefore exactly what 0.12.x registered, plus extract:
|
|
104
|
+
* upgrading must never silently remove a tool someone already depends on. A
|
|
105
|
+
* user who had TikTok or LinkedIn working yesterday still has it today, and
|
|
106
|
+
* the context cost is unchanged from the version they were already running.
|
|
107
|
+
* extract joins them because it is a single tool and the read-any-page
|
|
108
|
+
* primitive an agent reaches for in almost every session.
|
|
109
|
+
*
|
|
110
|
+
* The 22 platforms added in 0.13.0 are opt-in via SCAVIO_PLATFORMS — growth
|
|
111
|
+
* goes behind the flag, the existing contract does not move.
|
|
112
|
+
*/
|
|
113
|
+
export const DEFAULT_PLATFORMS = [
|
|
114
|
+
"extract",
|
|
115
|
+
"google",
|
|
116
|
+
"youtube",
|
|
117
|
+
"amazon",
|
|
118
|
+
"walmart",
|
|
119
|
+
"reddit",
|
|
120
|
+
"tiktok",
|
|
121
|
+
"tiktok-shop",
|
|
122
|
+
"instagram",
|
|
123
|
+
"x",
|
|
124
|
+
"linkedin",
|
|
125
|
+
];
|
|
126
|
+
/** Names users reasonably type that are not the canonical key. */
|
|
127
|
+
const ALIASES = {
|
|
128
|
+
twitter: "x",
|
|
129
|
+
metaadlibrary: "metaads",
|
|
130
|
+
facebookads: "metaads",
|
|
131
|
+
googleadstransparency: "googleads",
|
|
132
|
+
};
|
|
133
|
+
function normalize(value) {
|
|
134
|
+
return value.trim().toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
135
|
+
}
|
|
136
|
+
const CANONICAL_BY_NORMALIZED = new Map();
|
|
137
|
+
for (const key of PLATFORM_KEYS)
|
|
138
|
+
CANONICAL_BY_NORMALIZED.set(normalize(key), key);
|
|
139
|
+
for (const [alias, key] of Object.entries(ALIASES))
|
|
140
|
+
CANONICAL_BY_NORMALIZED.set(normalize(alias), key);
|
|
141
|
+
const warned = new Set();
|
|
142
|
+
function warnOnce(message) {
|
|
143
|
+
if (warned.has(message))
|
|
144
|
+
return;
|
|
145
|
+
warned.add(message);
|
|
146
|
+
// stderr only — stdout is the JSON-RPC stream.
|
|
147
|
+
console.error(message);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Turn a SCAVIO_PLATFORMS value into the canonical platform keys to register.
|
|
151
|
+
*
|
|
152
|
+
* Accepts a comma-separated list of platform keys, plus three keywords:
|
|
153
|
+
* all — every platform (191 tools)
|
|
154
|
+
* default — expands to DEFAULT_PLATFORMS, so `default,sec,g2` is additive
|
|
155
|
+
* none — no platform tools at all, leaving only get_usage
|
|
156
|
+
*
|
|
157
|
+
* Unknown entries are warned about and skipped rather than fatal: a typo in one
|
|
158
|
+
* key must not take down a server the user has already wired into a client.
|
|
159
|
+
* A list that is entirely typos falls back to the default for the same reason.
|
|
160
|
+
* Always returned in PLATFORMS order, never in the order the user typed.
|
|
161
|
+
*/
|
|
162
|
+
export function resolvePlatforms(raw) {
|
|
163
|
+
if (raw === undefined || raw === null || raw.trim() === "")
|
|
164
|
+
return [...DEFAULT_PLATFORMS];
|
|
165
|
+
const selected = new Set();
|
|
166
|
+
const unknown = [];
|
|
167
|
+
let explicitNone = false;
|
|
168
|
+
for (const token of raw.split(",")) {
|
|
169
|
+
const key = normalize(token);
|
|
170
|
+
if (key === "")
|
|
171
|
+
continue;
|
|
172
|
+
if (key === "all" || key === "*")
|
|
173
|
+
return [...PLATFORM_KEYS];
|
|
174
|
+
if (key === "none") {
|
|
175
|
+
explicitNone = true;
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
if (key === "default") {
|
|
179
|
+
for (const d of DEFAULT_PLATFORMS)
|
|
180
|
+
selected.add(d);
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
const canonical = CANONICAL_BY_NORMALIZED.get(key);
|
|
184
|
+
if (canonical)
|
|
185
|
+
selected.add(canonical);
|
|
186
|
+
else
|
|
187
|
+
unknown.push(token.trim());
|
|
188
|
+
}
|
|
189
|
+
if (unknown.length > 0) {
|
|
190
|
+
warnOnce(`[scavio-mcp] Ignoring unknown SCAVIO_PLATFORMS ${unknown.length === 1 ? "value" : "values"}: ${unknown.join(", ")}. ` +
|
|
191
|
+
`Known platforms: ${PLATFORM_KEYS.join(", ")} (or "all").`);
|
|
192
|
+
}
|
|
193
|
+
if (selected.size === 0) {
|
|
194
|
+
if (explicitNone)
|
|
195
|
+
return [];
|
|
196
|
+
warnOnce(`[scavio-mcp] SCAVIO_PLATFORMS matched no known platform; falling back to the default set: ${DEFAULT_PLATFORMS.join(", ")}.`);
|
|
197
|
+
return [...DEFAULT_PLATFORMS];
|
|
198
|
+
}
|
|
199
|
+
return PLATFORM_KEYS.filter((key) => selected.has(key));
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Register the allowlisted platform tools plus get_usage.
|
|
203
|
+
*
|
|
204
|
+
* `platformsRaw` lets the HTTP transport pass a per-request override (header or
|
|
205
|
+
* query param), since a hosted remote has no per-user env var to read.
|
|
206
|
+
*/
|
|
207
|
+
export function registerAllTools(server, getClient, platformsRaw = env.SCAVIO_PLATFORMS) {
|
|
208
|
+
const platforms = resolvePlatforms(platformsRaw);
|
|
209
|
+
for (const key of platforms)
|
|
210
|
+
PLATFORMS[key](server, getClient);
|
|
23
211
|
registerUsageTool(server, getClient);
|
|
212
|
+
return platforms;
|
|
24
213
|
}
|
|
25
214
|
//# sourceMappingURL=index.js.map
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/instagram.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 registerInstagramTools(server, getClient) {
|
|
15
4
|
server.tool("get_instagram_profile", `Get an Instagram user's profile as JSON. Returns user ID, username, full name, biography, external URL, profile picture, verified/private flags, and follower/following/post counts. The profile fields are inlined at the root of data, there is no data.user wrapper. Provide either username or user_id. Costs 10 credits.`, {
|
|
16
5
|
username: z.string().optional()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instagram.js","sourceRoot":"","sources":["../../src/tools/instagram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"instagram.js","sourceRoot":"","sources":["../../src/tools/instagram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,UAAU,sBAAsB,CAAC,MAAiB,EAAE,SAA6B;IACrF,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,+TAA+T,EAC/T;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC5B,QAAQ,CAAC,0DAA0D,CAAC;QACvE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC3B,QAAQ,CAAC,gFAAgF,CAAC;KAC9F,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,0BAA0B,EAC1B,+cAA+c,EAC/c;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC5B,QAAQ,CAAC,wCAAwC,CAAC;QACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC3B,QAAQ,CAAC,4BAA4B,CAAC;QACzC,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,oIAAoI,CAAC;QACjJ,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC1B,QAAQ,CAAC,+EAA+E,CAAC;KAC7F,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,0BAA0B,EAC1B,wMAAwM,EACxM;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC5B,QAAQ,CAAC,wCAAwC,CAAC;QACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC3B,QAAQ,CAAC,4BAA4B,CAAC;QACzC,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,kCAAkC,CAAC;QAC/C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC1B,QAAQ,CAAC,2DAA2D,CAAC;KACzE,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,2BAA2B,EAC3B,oOAAoO,EACpO;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC5B,QAAQ,CAAC,wCAAwC,CAAC;QACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC3B,QAAQ,CAAC,4BAA4B,CAAC;QACzC,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,kCAAkC,CAAC;QAC/C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC1B,QAAQ,CAAC,2DAA2D,CAAC;KACzE,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,gNAAgN,EAChN;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC5B,QAAQ,CAAC,wCAAwC,CAAC;QACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC3B,QAAQ,CAAC,4BAA4B,CAAC;KAC1C,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;IAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,wbAAwb,EACxb;QACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aACvB,QAAQ,CAAC,sEAAsE,CAAC;QACnF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC5B,QAAQ,CAAC,mBAAmB,CAAC;QAChC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC7B,QAAQ,CAAC,qCAAqC,CAAC;KACnD,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,6BAA6B,EAC7B,wTAAwT,EACxT;QACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC7B,QAAQ,CAAC,qCAAqC,CAAC;QAClD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aACvB,QAAQ,CAAC,yDAAyD,CAAC;QACtE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC1B,QAAQ,CAAC,2DAA2D,CAAC;QACxE,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;aACzD,QAAQ,CAAC,gGAAgG,CAAC;KAC9G,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;YAC/E,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,+BAA+B,EAC/B,wVAAwV,EACxV;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;aACjB,QAAQ,CAAC,+BAA+B,CAAC;QAC5C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;aACnB,QAAQ,CAAC,uEAAuE,CAAC;QACpF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC1B,QAAQ,CAAC,iEAAiE,CAAC;KAC/E,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,yCAAyC,EAAE,MAAM,CAAC,CAAC;YACvF,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,wBAAwB,EACxB,uXAAuX,EACvX;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,QAAQ,EAAE;aAC1B,QAAQ,CAAC,qDAAqD,CAAC;KACnE,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;IAEF,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,mWAAmW,EACnW;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,QAAQ,EAAE;aAC1B,QAAQ,CAAC,qDAAqD,CAAC;KACnE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,mCAAmC,EAAE,MAAM,CAAC,CAAC;YACjF,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,8BAA8B,EAC9B,iSAAiS,EACjS;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC5B,QAAQ,CAAC,wCAAwC,CAAC;QACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC3B,QAAQ,CAAC,4BAA4B,CAAC;QACzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;aAChD,QAAQ,CAAC,mCAAmC,CAAC;QAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC1B,QAAQ,CAAC,2DAA2D,CAAC;KACzE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;YAChF,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,+BAA+B,EAC/B,8RAA8R,EAC9R;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC5B,QAAQ,CAAC,wCAAwC,CAAC;QACrD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC3B,QAAQ,CAAC,4BAA4B,CAAC;QACzC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;aAChD,QAAQ,CAAC,mCAAmC,CAAC;QAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aAC1B,QAAQ,CAAC,2DAA2D,CAAC;KACzE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,mCAAmC,EAAE,MAAM,CAAC,CAAC;YACjF,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"}
|