A Model Context Protocol server for Shopify GraphQL API
This server has 6 tools with mixed quality. Naming is verb-based and generally clear (get_, browse_, list_, upload_, introspect_). However, several critical gaps significantly impact the score: (1) Parameter descriptions exist but are often generic and lack actionable constraints (e.g., 'fields' parameter in get_abandonment is described as 'Optional. Specific fields to retrieve' but provides no guidance on what fields are valid); (2) Output schemas are NOT documented in the code, tool implementations exist but return types are not explicitly declared, forcing LLMs to infer structure; (3) No error handling patterns visible in the tool definitions, tools do not guide recovery or categorize errors; (4) Several tools like introspect_admin_schema accept open-ended string parameters without validation guidance; (5) No pagination guidance for list_inventory_items beyond a cursor parameter. The server is functional but lacks the polish and LLM-optimization patterns that would earn a higher score.
This tool retrieves customer information with spending data and advanced filtering options. It supports sorting by multiple fields, filtering by minimum/maximum spend, and returns detailed customer profiles. When provided with a specific customer_id, it returns comprehensive information for that single customer.
This tool retrieves detailed information about cart or checkout abandonments by ID. It returns data about abandoned carts including items, prices, customer information (if available), and abandonment timing. You can customize which fields are returned in the response.
This tool retrieves detailed information about a specific inventory item by ID or SKU. It returns comprehensive inventory data including tracked status, available quantities across all locations, and associated variant information.
This tool introspects and returns the portion of the Shopify Admin API GraphQL schema relevant to the user prompt. Only use this for the Shopify Admin API, and not any other APIs like the Shopify Storefront API or the Shopify Functions API. It takes two arguments: query and filter. The query argument is the string search term to filter schema elements by name. The filter argument is an array of strings to filter results to show specific sections.
No output schemas documented for any tools. Tool implementations return data, but the structure (field names, types, pagination format) is not visible in code samples. LLMs cannot plan downstream calls or extract required data without knowing what fields to expect.
Parameter descriptions lack actionable constraints. Examples: (1) 'fields' in get_abandonment offers no list of valid field names; (2) 'query' in introspect_admin_schema provides no regex or length guidance; (3) min_spend/max_spend lack numeric constraints or currency guidance; (4) sku_filter has no pattern or length constraints. These open-ended parameters invite hallucinated or invalid values from LLMs.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 43 | - | v1 |
This tool retrieves a list of inventory items with optional filtering by SKU. It supports pagination and provides inventory details like available quantities, costs, and locations where items are stocked.
This tool uploads an image from a public URL to the Shopify CDN Files section. It handles the transfer of image data to Shopify's servers, allowing you to specify alt text and optional filename for the uploaded image.
Mutual exclusivity and parameter dependencies are not documented. Example: get_inventory_item accepts id OR sku but descriptions don't state this constraint or what happens if both are provided. browse_customers's customer_id overrides limit, but this relationship is not explicitly marked as mutually exclusive. LLMs will not infer these rules.
No error handling guidance. Tools provide no error recovery messages, no categorization of retryable vs. fatal errors, and no suggestions for next steps. Example: introspect_admin_schema offers no guidance on malformed queries. get_inventory_item doesn't explain what happens if ID is not found. Agents receive no actionable error messages.
Write operation (upload_image_from_url) lacks confirmation/dry-run pattern. This is an irreversible file upload to Shopify CDN. No guidance on how to prevent accidental uploads, rollback mechanisms, or error recovery. Agents should be warned of consequences before executing.
Pagination is incomplete. list_inventory_items accepts limit and cursor, but the response structure is not documented, does the tool return a next_cursor? A total_count? Whether results are sorted or filtered is ambiguous. Without explicit return structure, LLMs cannot reliably chain pagination calls.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are absent. The tool definitions declare risk levels (READ_ONLY, WRITE) in comments but these are not exposed to the MCP protocol. Clients cannot distinguish safe from destructive operations without reading source code.