etsy-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ETSY_API_KEY | Yes | Your Etsy API keystring from https://www.etsy.com/developers/your-apps | |
| ETSY_API_URL | No | Etsy API base URL (usually leave as default) | https://api.etsy.com/v3/application/ |
| ETSY_MAX_RETRIES | No | Maximum number of retries for failed requests | 3 |
| ETSY_HTTP_TIMEOUT | No | HTTP timeout in seconds | 60 |
| ETSY_REFRESH_TOKEN | Yes | OAuth2 refresh token for your shop (read-only scopes: listings_r, shops_r, transactions_r) | |
| ETSY_DEFAULT_SHOP_ID | No | Optional fallback shop ID if not provided in tool calls |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| etsy_search_listingsA | Search active Etsy listings by keyword. Args: query: Free-text keyword search across listing title and tags. shop_id: Optional Etsy ShopID to scope the search to a single shop. When omitted, queries the global active-listings index. limit: Cap on returned results (max 100 enforced by Etsy). Returns: JSON envelope: {"ok": true, "data": {"results": [...], "count": N}}. |
| etsy_get_listingA | Fetch the full record for a single listing. Args: listing_id: Etsy ListingID (integer). Returns:
JSON envelope. |
| etsy_get_shopA | Fetch the shop record for a single shop. Args: shop_id: Etsy ShopID (integer). Returns:
JSON envelope. |
| etsy_search_ordersA | Search receipts (orders) created in the inclusive [date_from, date_to] window for a shop. Args: date_from: ISO date (YYYY-MM-DD), start of window. date_to: ISO date (YYYY-MM-DD), end of window. shop_id: Etsy ShopID to scope the search to. Falls back to ETSY_DEFAULT_SHOP_ID if omitted. status: Optional receipt status filter ('open', 'unshipped', 'unpaid', 'completed', 'processing', 'all'). limit: Cap on yielded receipts (default 200, max 1000). Etsy caps page size at 100 per request; pagination is handled transparently. Returns:
JSON envelope. |
| etsy_get_orderB | Fetch full receipt (order) detail including transactions. Args: receipt_id: Etsy ReceiptID (integer). shop_id: Etsy ShopID. Falls back to ETSY_DEFAULT_SHOP_ID if omitted. Returns:
JSON envelope. |
| etsy_get_inventoryA | Fetch the current inventory record (variations + offerings) for a listing. Args: listing_id: Etsy ListingID. Returns:
JSON envelope. |
| etsy_get_shop_statsA | Return aggregated stats (orders, favorers, active listings, revenue) for a shop over the given period. Args: shop_id: Etsy ShopID. period: Lookback window in the form 'd', e.g. '7d', '30d', '90d'. Maximum 365 days. Returns:
JSON envelope. |
| etsy_get_active_listingsA | List active listings for a shop, paginating transparently. Args: shop_id: Etsy ShopID. limit: Soft cap on yielded listings (default 200, max 1000). Returns:
JSON envelope. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 8 tools
Each tool targets a distinct resource (listings, inventory, shop, orders) and operation (get, search, stats), with no overlapping purposes.
All tools follow the consistent pattern 'etsy_<verb>_<noun>', using snake_case and clear verbs (get, search) throughout.
8 tools is reasonable for an Etsy API wrapper, covering key read operations without being excessive.
The server provides only read/search operations; missing critical mutation tools like create/update/delete listing or update order, leaving significant gaps for full lifecycle management.