etsy-mcp
Provides read-only access to an Etsy shop's data, including listings, orders, inventory, shop details, and stats. Allows searching listings, retrieving specific listing details, searching orders by date range, fetching order receipts with line items, getting variation-level inventory, and viewing shop statistics.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@etsy-mcpShow me orders from yesterday"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
# etsy-mcp
The first production-grade Model Context Protocol server for Etsy. Plug Claude into your Etsy shop's listings, inventory, orders, and stats — read-only, in five minutes.
Why this exists
Etsy's Open API v3 is well-documented and stable, but every seller who wants to put an LLM on top of their shop ends up writing the same OAuth-and-pagination glue from scratch. Existing MCP integrations are thin demos, missing token refresh, retry logic, and the per-shop pagination Etsy actually requires.
If you sell on Etsy and you've ever wanted Claude (or any MCP-aware AI assistant) to just know what's in your shop — what's listed, what shipped yesterday, what's running low — that gap is the difference between "summarize today's orders" working out of the box and "summarize today's orders" requiring a custom integration.
etsy-mcp closes that gap. It's a tiny, well-tested, MIT-licensed MCP server that exposes eight read-only Etsy endpoints to any MCP client. Built from years of running production ecommerce automation at scale.
Related MCP server: @mcpengine/etsy
What you can do with it
Wire this server into Claude Code, Claude Desktop, or any MCP host, then ask things like:
"Search my shop for any listing with the word
vintagein the title and tell me how many are below quantity 5.""How many orders did I get yesterday? Group by buyer and total revenue."
"Pull receipt 5550001 and tell me which transactions shipped — and what's left to ship."
"What were my shop stats over the last 30 days? Compare orders, favorers, and active listings."
"For listing 1234567890, show me every variation, its SKU, and current quantity."
Claude reads your shop directly. No copy-paste, no spreadsheets, no custom pipelines.
Tools (v0.1, all read-only)
Tool | What it does |
| Keyword search across active listings, optionally shop-scoped. |
| Fetch one listing by ID. |
| Fetch the shop record (name, currency, counts, vacation). |
| List receipts (orders) in a date window for one shop. |
| Fetch one receipt by ID, including line-item transactions. |
| Variation-level inventory (SKU, quantity, price) for a listing. |
| Composed period rollup: orders, favorers, revenue, listings. |
| Paginated list of every active listing in a shop. |
Write endpoints (create draft listing, update inventory, mark receipt shipped) are intentionally not in v0.1. They are planned for v0.2 once read-only ergonomics settle.
Install
pip install etsy-mcpv0.1 ships from this repository. PyPI publication is pending — for now, install with
pip install git+https://github.com/alveyautomation/etsy-mcpor clone and runpip install -e .locally.
Configure credentials
The server reads everything from environment variables. Copy .env.example to .env and fill in your tenant:
ETSY_API_URL=https://api.etsy.com/v3/application/ # default; usually leave alone
ETSY_API_KEY=your-keystring-from-etsy-developers
ETSY_REFRESH_TOKEN=oauth2-refresh-token-for-your-shop
ETSY_DEFAULT_SHOP_ID= # optional fallback
ETSY_HTTP_TIMEOUT=60 # optional, seconds
ETSY_MAX_RETRIES=3 # optionalGetting an Etsy API key
Visit https://www.etsy.com/developers/your-apps and register an app.
Copy the Keystring — that's
ETSY_API_KEY.Configure the redirect URI for your one-time OAuth bootstrap (e.g.
http://localhost:3000/callback).
Getting a refresh token
Etsy uses OAuth 2.0 with PKCE. To bootstrap, run any standard OAuth-PKCE flow once with these parameters:
response_type=codeclient_id=<your keystring>redirect_uri=<your registered URI>scope=listings_r shops_r transactions_r(read-only — the minimum this server needs)state=<random>code_challenge=<PKCE>andcode_challenge_method=S256
Exchange the resulting authorization code at POST https://api.etsy.com/v3/public/oauth/token for an access + refresh token. Save the refresh token as ETSY_REFRESH_TOKEN. The server will use it to mint short-lived access tokens automatically.
Use minimum-scope read tokens. v0.1 only calls
GETendpoints, but defense in depth means you should never grant write scopes (*_w) to the server's refresh token. When v0.2 lands with write tools, opt-in by minting a fresh higher-scope token — never the other way around.
Wire into Claude Code
Add to ~/.claude/claude_code_config.json (or your project's MCP config):
{
"mcpServers": {
"etsy": {
"command": "etsy-mcp",
"env": {
"ETSY_API_KEY": "your-keystring",
"ETSY_REFRESH_TOKEN": "your-refresh-token",
"ETSY_DEFAULT_SHOP_ID": "12345678"
}
}
}
}Restart Claude Code. The eight etsy_* tools will appear in any new session.
Wire into Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows) and add the same mcpServers block as above. Restart the desktop app.
Tool reference
Every tool returns a JSON envelope:
{ "ok": true, "data": { ... } }
{ "ok": false, "error": "human-readable message" }etsy_search_listings
etsy_search_listings(
query: str, # required
shop_id: int | None = None, # scope to a single shop
limit: int = 50, # max 100 (Etsy server cap)
)When shop_id is provided, this hits /shops/{shop_id}/listings/active. Otherwise it hits the global /listings/active index.
etsy_get_listing
etsy_get_listing(listing_id: int)Returns the listing record, or data: null on 404.
etsy_get_shop
etsy_get_shop(shop_id: int)The shop record includes shop_name, currency_code, listing_active_count, num_favorers, is_vacation, and more.
etsy_search_orders
etsy_search_orders(
date_from: str, # ISO date "YYYY-MM-DD"
date_to: str, # ISO date "YYYY-MM-DD"
shop_id: int | None = None, # falls back to default
status: str | None = None, # 'open' | 'unshipped' | 'completed' | 'all'
limit: int = 200, # max 1000
)Etsy caps page size at 100; pagination is transparent. The response includes limit_reached: true when limit was the truncation point.
etsy_get_order
etsy_get_order(receipt_id: int, shop_id: int | None = None)Returns the full receipt (with transactions[]), or data: null on 404.
etsy_get_inventory
etsy_get_inventory(listing_id: int)Returns products[] with sku, property_values, and offerings[] (quantity, price, enabled). Use the offering quantity as the canonical "qty I can sell" number per variation.
etsy_get_shop_stats
etsy_get_shop_stats(shop_id: int, period: str = "30d")A composed rollup. Etsy doesn't expose a first-class shop/stats endpoint at v3, so this synthesizes one from the shop record (favorers, active-listing count) and the receipts in the window. Returned shape:
{
"shop_id": 12345678,
"period": "30d",
"period_days": 30,
"date_from": "2026-03-27",
"date_to": "2026-04-26",
"favorers": 314,
"active_listings": 87,
"orders": 42,
"revenue_minor_units": 152400,
"currency_code": "USD"
}period accepts <N>d form, max 365 days.
etsy_get_active_listings
etsy_get_active_listings(shop_id: int, limit: int = 200)Paginated dump of every active listing in a shop. Useful for catalog-wide reasoning ("audit my titles for missing keywords"). Soft cap is 1000 to keep one tool invocation bounded.
Local development
git clone https://github.com/alveyautomation/etsy-mcp
cd etsy-mcp
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e ".[dev]"
pytest # 49 tests, ~3sPre-commit hooks (gitleaks, trufflehog, ruff, formatter, tenant-fingerprint scrubber):
pip install pre-commit
pre-commit installIntegration tests against a real Etsy sandbox are gated behind ETSY_INTEGRATION_TESTS=1. They are not required for normal contribution.
Troubleshooting
Failed to refresh Etsy access token — your refresh token expired or was revoked. Etsy refresh tokens last 90 days from issue, but only if used regularly. Re-run the OAuth-PKCE bootstrap to mint a new one.
Missing required environment variables — the server tried to start before its .env was loaded. Either export the vars in the parent shell, or ensure your MCP host config includes them in the env block.
HTTP 403 on receipts/transactions — the refresh token's scopes are missing transactions_r. Re-bootstrap with the read scopes listed above.
Empty results despite known data — confirm the shop_id. Etsy's /shops/{shop_id}/... endpoints only return data for shops the OAuth token has been authorized against.
Pagination feels slow — Etsy caps page size at 100 per request, not us. For large date windows (long order histories), expect multiple round-trips. Lower the limit argument to bound the call.
Contributing
Issues and pull requests welcome. Please:
Run
pytestbefore opening a PR (pip install -e ".[dev]").Run
pre-commit run --all-files.Keep additions to v0.1 scope read-only. Write endpoints land in v0.2.
Synthetic data only in tests — no real shop names, listing IDs, or receipt numbers.
License
MIT — see LICENSE.
Disclaimer
etsy-mcp is an unofficial, third-party integration. It is not endorsed by, affiliated with, or supported by Etsy, Inc. "Etsy" is a trademark of Etsy, Inc. Use at your own risk; verify behavior against your shop before depending on it for production decisions.
Available Tools
8 toolsetsy_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. data.listings is the list of active-listing records.
| Name | Required | Description | Default |
|---|---|---|---|
| shop_id | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries full burden. It notes pagination behavior and a soft cap on limit, but does not clarify that the operation is read-only or mention any other behavioral traits, which is insufficient for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise, using a clear docstring format with Args and Returns. Every sentence adds value; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 2 parameters and an output schema (not shown but present), the description adequately covers the tool's functionality. It explains return structure ('JSON envelope, data.listings'), which is sufficient with the output schema present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description adds meaning beyond the schema. It defines shop_id as 'Etsy ShopID' (repetitive but confirms type) and explains limit as a 'soft cap' with default 200 and max 1000, providing valuable context not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'List active listings for a shop, paginating transparently' which specifies the action (list), resource (active listings), and scope (for a shop, with automatic pagination). Distinguishes from siblings like etsy_get_listing (single) and etsy_search_listings (search across shops).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implicitly describes usage for listing active listings of a shop, but provides no explicit guidance on when to use this tool versus alternatives, nor any conditions or exclusions among the 7 sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
etsy_get_inventoryA
Fetch the current inventory record (variations + offerings) for a listing.
Args: listing_id: Etsy ListingID.
Returns:
JSON envelope. data is the inventory record (with products[]
carrying property values, SKU, price, and offerings[] with
quantity), or null if absent.
| Name | Required | Description | Default |
|---|---|---|---|
| listing_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions the return structure (JSON envelope, products, offerings) and that data can be null, but does not specify whether the operation is read-only, authentication needs, or rate limits. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, with a clear header sentence and structured Args/Returns sections. No redundancy or unnecessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, output schema exists), the description covers purpose, parameter, and return value. It lacks usage guidelines, but for a straightforward fetch operation, it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter listing_id is described as 'Etsy ListingID', adding meaning beyond the schema title 'Listing Id'. The description explains its purpose clearly, compensating for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Fetch') and resource ('inventory record'), specifying it includes variations and offerings for a listing. It distinguishes from siblings like etsy_get_listing (listing details) and etsy_get_active_listings (list of listings).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool returns but does not explicitly state when to use it versus alternatives. No guidance on when not to use or prerequisites is provided, though the purpose is clear enough for an agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
etsy_get_listingA
Fetch the full record for a single listing.
Args: listing_id: Etsy ListingID (integer).
Returns:
JSON envelope. data is the listing record, or null if not found.
| Name | Required | Description | Default |
|---|---|---|---|
| listing_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states it 'fetches' (read-only) and returns null if not found, which is helpful. However, it does not disclose any potential side effects, permissions, rate limits, or other behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with no wasted words. It front-loads the purpose, then clearly lists args and returns. Every sentence serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no annotations, output schema exists), the description adequately covers the essentials. It mentions what the tool does, the argument needed, and the return format including the null case. Could mention error handling beyond null, but not necessary for basic completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the schema by specifying 'Etsy ListingID (integer)' for the listing_id parameter. This clarifies the parameter's type and scope, which is valuable given the schema only provides 'Listing Id' and type integer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Fetch the full record for a single listing,' which is a specific verb+resource. It distinguishes from sibling tools like etsy_search_listings (which searches multiple) and etsy_get_active_listings (which gets multiple active listings).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives. It lacks explicit when-to-use or when-not-to-use information, leaving the agent to infer from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. data is the receipt record, or null if missing.
| Name | Required | Description | Default |
|---|---|---|---|
| receipt_id | Yes | ||
| shop_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It discloses the behavior (fetch receipt with transactions), fallback for shop_id, and return format. However, it omits information on authentication or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is short and structured with Args and Returns sections. No unnecessary words, but the overall structure is clear and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and an output schema (stated but not shown), description covers basics: purpose, parameters, return format. However, it lacks guidance on when to use this tool vs. search_orders, which is a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must add meaning. It explains receipt_id is an integer and shop_id is an integer with a fallback to default. This adds value, but could provide more detail on source of IDs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states 'Fetch full receipt (order) detail including transactions' with a clear verb and resource. It specifies that it includes transactions, distinguishing it from sibling tools like etsy_get_listing and etsy_search_orders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like etsy_search_orders. The description only mentions fallback behavior for shop_id but does not provide context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
etsy_get_shopA
Fetch the shop record for a single shop.
Args: shop_id: Etsy ShopID (integer).
Returns:
JSON envelope. data is the shop record (with name, currency_code,
listing_active_count, num_favorers, etc.), or null if not found.
| Name | Required | Description | Default |
|---|---|---|---|
| shop_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It discloses return format (JSON envelope with data field), example fields (name, currency_code, etc.), and null behavior on not found. Lacks error or auth info, but sufficient for a simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with args/returns section. Every sentence adds value: purpose, parameter, return details. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (one param, no nested objects, output schema exists), description covers purpose, parameter, return structure and field examples. Sufficient for an agent to understand usage and outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter (shop_id) with 0% schema description coverage. Description adds 'Etsy ShopID (integer)' context, clarifying it's the shop identifier. Compensates for missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Fetch the shop record for a single shop,' which is a specific verb-resource pair. It clearly distinguishes from sibling tools like etsy_get_shop_stats (stats) or etsy_get_listing (listing entity).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus siblings. Does not mention alternatives or conditions like 'use this instead of etsy_get_shop_stats when only basic shop info is needed.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. data is a dict with orders, favorers,
active_listings, revenue_minor_units, currency_code, and
the resolved date_from / date_to.
| Name | Required | Description | Default |
|---|---|---|---|
| shop_id | Yes | ||
| period | No | 30d |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full burden for behavioral disclosure. It describes the return format but omits any mention of side effects, error conditions, authorization requirements, or rate limits, limiting transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear structure using Args and Returns sections; every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two parameters and an output schema, the description adequately explains both parameters and the return structure, but lacks details on error conditions or authentication requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds substantial meaning beyond the input schema, explaining shop_id as 'Etsy ShopID' and period as a lookback window with format '<N>d' and maximum 365 days, compensating for 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Return' and the resource 'aggregated stats (orders, favorers, active listings, revenue) for a shop over a given period', and it is distinct from sibling tools that handle listings, inventory, orders, or searches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention exclusions or prerequisites, leaving the agent to infer usage solely from the purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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}}.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| shop_id | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It discloses the return format (JSON envelope with ok, data, results, count) and an enforced limit of 100, but lacks details on authentication, rate limits, or any read-only guarantee.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with Args and Returns sections. Every sentence adds value with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter search tool with an output schema, the description covers purpose, parameters, and return format adequately. It lacks explicit comparison to siblings, but is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully explains all three parameters: query as free-text, shop_id as optional scoping, and limit with a cap. This adds meaningful detail beyond the schema names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search active Etsy listings by keyword' with a specific verb and resource. It distinguishes from siblings like 'etsy_get_listings' by focusing on keyword search and optional shop_id scoping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context that omitting shop_id queries the global index, but does not explicitly compare to sibling tools like 'etsy_get_active_listings' or give when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. data.orders is the list of receipt records.
| Name | Required | Description | Default |
|---|---|---|---|
| date_from | Yes | ||
| date_to | Yes | ||
| shop_id | No | ||
| status | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It discloses transparent pagination handling, limit cap (1000, with 100 per page), default shop_id fallback, and return format. It does not mention read-only nature or rate limits, but for a search tool the disclosed behaviors are substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a summary sentence followed by bullet-pointed parameter details. Every sentence adds value, no redundancy. It is concise yet comprehensive, fitting all necessary information into a compact format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists (not shown but indicated), the description adequately covers return structure ('JSON envelope with data.orders'). All parameters, default behaviors, and pagination are explained. No critical gaps remain for a search tool with moderate complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds extensive meaning beyond the input schema: date format (ISO), inclusive window semantics, shop_id fallback to ETSY_DEFAULT_SHOP_ID, status enum values, limit with transparent pagination. Schema coverage is 0%, so description fully compensates, making each parameter's purpose and constraints clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it searches receipts/orders by date window for a shop. 'Search receipts (orders) created in the inclusive [date_from, date_to] window for a shop.' is a specific verb+resource+scope. However, it does not differentiate from sibling tools like etsy_get_order or etsy_search_listings, leaving ambiguity about when to use this versus alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for searching orders within a date range, with optional filters. Yet it provides no explicit guidance on when not to use it or references to sibling tools for alternative use cases. The context of searching by shop and date window is clear but lacks exclusionary criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
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.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted Amazon Seller Central and Amazon Ads MCP server for Claude, ChatGPT, Cursor, and agents.
Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.
Hosted MCP server to manage a restaurant menu from AI agents - 39 tools over the DuckHub API.
MCP server for Argo RPG Platform — connects AI assistants to campaign data via OAuth2
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceThis is a deployable remote MCP server that lets OpenAI Agent Builder connect directly to Etsy using Etsy OAuth 2.0 with PKCE.
- FlicenseCqualityDmaintenanceComprehensive MCP server for the Etsy API v3, providing 50+ tools to manage listings, shops, orders, payments, and more through natural language.1003
- AlicenseAqualityCmaintenanceA full-featured MCP server for the Etsy Open API v3 that enables managing an Etsy shop, including listings, inventory, images, digital files, and orders, through Claude or any MCP-compatible client.261MIT
- FlicenseNot gradedqualityBmaintenanceA custom MCP server exposing database, ticketing, and external-API tools to both Claude Desktop and a self-built autonomous agent powered by Groq's free-tier LLaMA 3.3.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/alveyautomation/etsy-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server