fendi-mcp 1.0.0 → 1.0.2
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 +30 -5
- package/dist/api.d.ts +53 -2
- package/dist/api.js +762 -36
- package/dist/license.d.ts +8 -0
- package/dist/license.js +79 -0
- package/dist/server.js +178 -12
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,14 +1,39 @@
|
|
|
1
1
|
# fendi-mcp
|
|
2
2
|
|
|
3
|
-
Fendi resale listings aggregated from Fashionphile and Rebag public catalogs (prices in USD). No API key required. Not affiliated with or endorsed by Fendi; prices are asking prices, not appraisals.
|
|
3
|
+
Fendi resale listings aggregated from Fashionphile and Rebag public catalogs (prices in USD). No API key required. Condition/color/material attributes are parsed from Rebag catalog data (Fashionphile does not publish them); condition filters apply to Rebag data only. Not affiliated with or endorsed by Fendi; prices are asking prices, not appraisals.
|
|
4
4
|
|
|
5
5
|
## Tools
|
|
6
6
|
|
|
7
|
-
- `search_listings` —
|
|
8
|
-
- `list_newest` — Newest catalog listings
|
|
9
|
-
- `get_listing` — Full
|
|
10
|
-
- `price_overview` — Ask-price
|
|
7
|
+
- `search_listings` — Keyword search across Fashionphile and Rebag. Condition filter is Rebag-data only.
|
|
8
|
+
- `list_newest` — Newest catalog listings, sorted by publish date.
|
|
9
|
+
- `get_listing` — Full details: variants, images, parsed condition/color/material, description.
|
|
10
|
+
- `price_overview` — Ask-price stats overall + by condition.
|
|
11
|
+
- `compare_prices` — Group same-model listings across sources with min/max/spread.
|
|
12
|
+
- `find_deals` — Available listings priced below the brand median.
|
|
13
|
+
- `brand_overview` — Catalog sample counts by source, type and condition.
|
|
14
|
+
- `list_collections` — Curated store collections with handles for browse_collection, e.g. sale or category collections.
|
|
15
|
+
- `browse_collection` — Listings inside one collection handle from list_collections, e.g. a sale or category collection.
|
|
16
|
+
- `find_by_attribute` — Listings filtered by color, exterior material or condition, plus the common values in the sample.
|
|
11
17
|
|
|
12
18
|
## Source
|
|
13
19
|
|
|
14
20
|
[fendi-mcp](https://github.com/mrfentmen/awesome-mcps/tree/main/servers/fendi-mcp)
|
|
21
|
+
|
|
22
|
+
<!-- paywall -->
|
|
23
|
+
## Premium tools
|
|
24
|
+
|
|
25
|
+
These tools need a license key:
|
|
26
|
+
|
|
27
|
+
* `cross_market_match`
|
|
28
|
+
* `price_ladder`
|
|
29
|
+
|
|
30
|
+
Buy a key at https://mcp-marketplace.io/server/io-github-mrfentmen-fendi-mcp and set it in your MCP client config:
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
"env": { "MCP_LICENSE_KEY": "mcp_live_..." }
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
The key is checked against MCP Marketplace, cached for 24 hours, and keeps
|
|
37
|
+
working offline once one check has succeeded. Every other tool on this server
|
|
38
|
+
stays free.
|
|
39
|
+
<!-- /paywall -->
|
package/dist/api.d.ts
CHANGED
|
@@ -2,7 +2,58 @@ export declare class FendiError extends Error {
|
|
|
2
2
|
constructor(message: string);
|
|
3
3
|
}
|
|
4
4
|
export declare function errorMessage(e: unknown): string;
|
|
5
|
-
export declare function searchListings(query: string, limit?: string): Promise<string>;
|
|
6
|
-
export declare function listNewest(limit?: string, page?: string): Promise<string>;
|
|
5
|
+
export declare function searchListings(query: string, limit?: string, maxPrice?: string, condition?: string): Promise<string>;
|
|
6
|
+
export declare function listNewest(limit?: string, page?: string, productType?: string, maxPrice?: string, condition?: string): Promise<string>;
|
|
7
7
|
export declare function getListing(handle: string, source?: string): Promise<string>;
|
|
8
8
|
export declare function priceOverview(limit?: string): Promise<string>;
|
|
9
|
+
export declare function comparePrices(query: string, limit?: string): Promise<string>;
|
|
10
|
+
export declare function findDeals(limit?: string, sample?: string): Promise<string>;
|
|
11
|
+
export declare function brandOverview(): Promise<string>;
|
|
12
|
+
export declare function listCollections(query?: string): Promise<string>;
|
|
13
|
+
export declare function browseCollection(handle: string, source?: string, limit?: string, maxPrice?: string, condition?: string): Promise<string>;
|
|
14
|
+
export declare function find_by_attribute(color?: string, material?: string, condition?: string, maxPrice?: string, limit?: string, sample?: string): Promise<string>;
|
|
15
|
+
export interface MatchedListing {
|
|
16
|
+
source: string;
|
|
17
|
+
title: string;
|
|
18
|
+
handle: string;
|
|
19
|
+
price: number | null;
|
|
20
|
+
available: boolean;
|
|
21
|
+
condition: string | null;
|
|
22
|
+
url: string;
|
|
23
|
+
size: string | null;
|
|
24
|
+
}
|
|
25
|
+
export interface CrossMarketMatchArgs {
|
|
26
|
+
model?: string;
|
|
27
|
+
query?: string;
|
|
28
|
+
pages?: number;
|
|
29
|
+
limit?: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The same model priced on both sites. The join is on the model name inside the
|
|
33
|
+
* title, which is a real limitation: it cannot see that a "Baguette" and a
|
|
34
|
+
* "Baguette II" are different bags, and it will happily treat two colourways of
|
|
35
|
+
* one bag as one comparison.
|
|
36
|
+
*/
|
|
37
|
+
export declare function crossMarketMatch(args: CrossMarketMatchArgs): Promise<string>;
|
|
38
|
+
export interface PriceLadderArgs {
|
|
39
|
+
model?: string;
|
|
40
|
+
query?: string;
|
|
41
|
+
pages?: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The real floor: the cheapest listing that can actually be bought, as opposed to
|
|
45
|
+
* the cheapest listing, which on these sites is often sold out and is therefore
|
|
46
|
+
* not a price at all.
|
|
47
|
+
*/
|
|
48
|
+
export declare function priceLadder(args: PriceLadderArgs): Promise<string>;
|
|
49
|
+
export interface SourceTaxonomyArgs {
|
|
50
|
+
source?: string;
|
|
51
|
+
top?: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The two sites' product types side by side. They are not reconcilable: the
|
|
55
|
+
* catalogs use disjoint vocabularies, so a category filter on one site means
|
|
56
|
+
* nothing on the other and a cross-site count by category is not a like-for-like
|
|
57
|
+
* comparison.
|
|
58
|
+
*/
|
|
59
|
+
export declare function sourceTaxonomy(args: SourceTaxonomyArgs): Promise<string>;
|