Shopify商店管理服务

Shopify MCP Server是一个通过GraphQL API与Shopify商店数据交互的服务,提供产品、客户、订单、博客和文章等全面管理功能。

  • by luckyfarnon
  • TypeScript
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 luckyfarnon/Shopify-MCP

使用说明

Shopify MCP服务器

(如果你愿意,请留下一颗星!)

Shopify API的MCP服务器,通过GraphQL API实现与商店数据的交互。此服务器提供用于管理产品、客户、订单等的工具。

📦 包名称: shopify-mcp
🚀 命令: shopify-mcp (不是 shopify-mcp-server)

特性

  • 产品管理:搜索、检索和更新产品信息,包括SEO优化的内容
  • 客户管理:加载客户数据并管理客户标签
  • 订单管理:高级订单查询和筛选
  • 博客管理:使用自定义模板和评论策略创建、检索和更新博客
  • 物品管理:创建和管理内容丰富、作者信息和SEO元数据的博客文章
  • 店铺搜索:跨产品、文章、博客和页面的统一搜索
  • GraphQL集成:与Shopify的GraphQL Admin API直接集成
  • 全面的错误处理:清除API和身份验证问题的错误消息
  • LLM优化:专为与AI语言模型无缝使用而设计

先决条件

  1. Node.js(版本16或更高)
  2. Shopify自定义应用访问令牌(请参阅下面的设置说明)

设置

Shopify访问令牌

要使用此MCP服务器,您需要在Shopify商店中创建一个自定义应用程序:

  1. 从您的Shopify管理员,转到 设置 > 应用程序和销售渠道
  2. 点击 开发应用程序 (您可能需要先启用开发人员预览)
  3. 点击 创建应用程序
  4. 为您的应用程序设置一个名称(例如,“Shopify MCP服务器”)
  5. 点击 配置管理员API作用域
  6. 选择以下范围:
    • read_products, write_products
    • read_customers, write_customers
    • read_orders, write_orders
    • read_content, write_content (博客和文章)
  7. 点击 保存
  8. 点击 安装应用程序
  9. 点击 安装 让应用程序访问您的商店数据
  10. 安装后,您将看到 管理员API访问令牌
  11. 复制此令牌-您需要它进行配置

使用Claude Desktop

将此添加到您的 claude_desktop_config.json:

{
  "mcpServers": {
    "shopify": {
      "command": "npx",
      "args": [
        "shopify-mcp",
        "--accessToken",
        "<YOUR_ACCESS_TOKEN>",
        "--domain",
        "<YOUR_SHOP>.myshopify.com"
      ]
    }
  }
}

Claude Desktop配置文件的位置:

  • MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • 窗户: %APPDATA%/Claude/claude_desktop_config.json

替代方案:使用环境变量在本地运行

如果您更喜欢使用环境变量而不是命令行参数:

  1. 创建一个 .env 使用您的Shopify凭据文件:

    SHOPIFY_ACCESS_TOKEN=your_access_token
    MYSHOPIFY_DOMAIN=your-store.myshopify.com
    
  2. 使用npx运行服务器:

    npx shopify-mcp
    

直接安装(可选)

如果要全局安装该软件包:

npm install -g shopify-mcp

然后运行它:

shopify-mcp --accessToken=<YOUR_ACCESS_TOKEN> --domain=<YOUR_SHOP>.myshopify.com

⚠️ 重要提示: 如果在使用命令行参数时看到有关“SHOPY_ACCESS_TOKEN环境变量是必需的”的错误,则可能安装了不同的包。确保您正在使用 shopify-mcp,不 shopify-mcp-server.

可用工具

产品管理

  1. get-products

    • 使用基于光标的导航获取产品或按标题搜索
    • 输入:
      • searchTitle (可选字符串):按标题筛选产品
      • limit (可选数量,默认值:10):可退回的最大产品数量
      • after (可选字符串):分页光标-获取此光标后的项目
      • before (可选字符串):分页光标-获取此光标之前的项目
      • reverse (可选布尔值,默认值:false):颠倒返回产品的顺序
    • 退货:
      • 对象包含:
        • products:一系列产品,每个产品包含:
          • title:产品名称(SEO优化)
          • description:纯文本产品描述
          • descriptionHtml:HTML格式的产品描述
          • 其他字段:id、句柄、状态、库存、定价等。
          • cursor:分页光标
        • pageInfo:分页信息包含:
          • hasNextPage:当前页面后是否有更多项目
          • hasPreviousPage:当前页面之前是否有更多项目
          • startCursor:当前页面第一项的光标
          • endCursor:当前页面最后一项的光标

    🌟 导航示例:

    1. 基本分页:
    // Get first page of products
    {
      "limit": 10
    }
    
    // Get next page using the endCursor from previous response
    {
      "limit": 10,
      "after": "endCursor_from_previous_response"
    }
    
    // Get previous page using the startCursor from current response
    {
      "limit": 10,
      "before": "startCursor_from_current_response"
    }
    
    1. 分页搜索:
    // Search products with pagination
    {
      "searchTitle": "t-shirt",
      "limit": 5,
      "after": "cursor_from_previous_response"
    }
    
    1. 逆序:
    // Get products in reverse order
    {
      "limit": 10,
      "reverse": true
    }
    

    💡 分页提示:

    1. 存储两者 startCursor 和 endCursor 从每个回复
    2. 使用 hasNextPage 和 hasPreviousPage 显示/隐藏导航控件
    3. 保持不变 limit 页面大小一致的价值
    4. 使用 reverse 当你首先需要最新/最旧的物品时
    5. 与…结合 searchTitle 用于分页搜索结果
  2. get-product-by-id

    • 按ID获取特定产品及其所有详细信息
    • 输入:
      • productId (string):要获取的产品的GID(例如,“gid://shopify/Product/1234567890")
    • 退货:
      • 单个产品对象包含:
        • title:产品名称(SEO优化)
        • description:纯文本产品描述
        • descriptionHtml:HTML格式的产品描述
        • 其他字段:id、句柄、状态、库存、定价、变体、收款等。
  3. update-product

    • 更新产品的任何方面,包括基本细节、SEO和变体
    • 输入:
      • productId (必填字符串):产品的ID(例如,“gid://shopify/Product/1234567890")
      • title (可选字符串):新产品标题
      • descriptionHtml (可选字符串):HTML格式的产品描述
      • seo (可选对象):SEO设置
        • title (可选字符串):SEO优化标题
        • description (可选字符串):搜索引擎的元描述
      • status (可选字符串):产品状态-“ACTIVE”、“ARCHIVED”或“DRAFT”
      • vendor (可选字符串):产品制造商或品牌
      • productType (可选字符串):产品类别或类型
      • tags (可选字符串数组):用于分类的产品标签
      • variants (可选对象数组):要更新的产品变体
        • id (string):要更新的变量ID
        • price (可选字符串):新价格
        • compareAtPrice (可选字符串):原始/价格比较
        • sku (可选字符串):库存单位
        • barcode (可选字符串):产品条形码
        • inventoryPolicy (可选字符串):“DENY”或“CONTINUE”表示缺货行为

    🌟 产品更新入门指南

    1. 基本产品更新:
    // Update product title and status
    {
      "productId": "gid://shopify/Product/1234567890",
      "title": "Awesome T-Shirt",
      "status": "ACTIVE"
    }
    
    1. 更新SEO信息:
    // Make your product more visible in search results
    {
      "productId": "gid://shopify/Product/1234567890",
      "seo": {
        "title": "Awesome T-Shirt | 100% Cotton | Available in 5 Colors",
        "description": "High-quality cotton t-shirt perfect for everyday wear. Available in multiple colors and sizes."
      }
    }
    
    1. 更新产品变体:
    // Change prices and inventory settings
    {
      "productId": "gid://shopify/Product/1234567890",
      "variants": [
        {
          "id": "gid://shopify/ProductVariant/1234567",
          "price": "29.99",
          "compareAtPrice": "39.99",
          "inventoryPolicy": "DENY"
        }
      ]
    }
    
    1. 完成产品更新:
    // Update multiple aspects at once
    {
      "productId": "gid://shopify/Product/1234567890",
      "title": "Premium Cotton T-Shirt",
      "vendor": "Fashion Basics",
      "productType": "Apparel",
      "tags": ["cotton", "t-shirt", "basics", "summer"],
      "seo": {
        "title": "Premium Cotton T-Shirt | Fashion Basics | Multiple Colors",
        "description": "Experience comfort with our premium cotton t-shirt. Perfect for any occasion."
      },
      "variants": [
        {
          "id": "gid://shopify/ProductVariant/1234567",
          "price": "29.99",
          "compareAtPrice": "39.99"
        }
      ]
    }
    

    💡 新用户提示:

    1. 从小做起:在尝试复杂的更改之前,先从简单的更新(如标题或价格)开始
    2. 测试优先:在修改实时产品之前,始终测试草稿产品的更新
    3. 检查ID:确保您有正确的产品和变体ID
    4. SEO最佳实践:
      • 保持SEO标题不超过60个字符
      • 编写描述性元描述(150-160个字符)
      • 自然地包含相关关键字
    5. 定价策略:
      • 使用 compareAtPrice 显示节省
      • 除非尺寸/材料不同,否则保持不同型号的价格一致
    6. 库存管理:
      • 对于库存有限的商品使用“DENY”
      • 对于定制商品,请使用“继续”

    ⚠️ 要避免的常见错误:

    1. 忘记包含产品ID
    2. 使用错误的ID格式(始终使用完整的GID格式)
    3. 设置无效价格(必须是字符串,而不是数字)
    4. 混淆变体ID
    5. 在常规文本字段中使用HTML

    🔍 如何查找ID:

    1. 产品ID:可在产品URL中找到或使用 get-products
    2. 变量ID:使用 get-product-by-id 查看所有变体
    3. 始终使用完整的GID格式:“gid://shopify/Product/1234567890"
  4. update-product-image-alt-text

    • 更新特定产品图像的alt文本
    • 输入:
      • productId (string):图像所属产品的GID(例如,“gid://shopify/Product/1234567890")
      • imageId (string):要更新的产品图像/媒体的GID(例如,“gid://shopify/MediaImage/123")
      • altText (string | null):图像的新描述性alt文本。设置为null以删除。最佳做法是将其保持在125个字符以下,最多512个字符。
    • 退货:
      • 更新的媒体对象包含:
        • id:媒体ID
        • altText:更新的alt文本

收集管理

  1. get-collections
    • 获取收藏或按标题搜索
    • 输入:
      • searchTitle (可选字符串):按标题筛选集合
      • limit (可选数字,默认值:10):要返回的最大集合数

博客管理

  1. get-blogs

    • 获取所有博客或按标题搜索
    • 输入:
      • searchTitle (可选字符串):按标题筛选博客
      • limit (可选数字,默认值:10):要返回的博客的最大数量
    • 退货:
      • 博客数组包含:
        • id:博客ID
        • title:博客标题
        • handle:URL友好句柄
        • templateSuffix:自定义主题的模板后缀
        • commentPolicy:评论审核政策
        • createdAt:创建时间戳
        • updatedAt:上次更新时间戳
  2. update-blog

    • 更新现有博客的详细信息
    • 输入:
      • blogId (string,必填):要更新的博客的GID(例如,“gid://shopify/Blog/1234567890")
      • title (可选字符串):新博客标题
      • handle (可选字符串):新的URL友好句柄
      • templateSuffix (可选字符串):自定义主题的新模板后缀
      • commentPolicy (可选字符串):新的评论策略(“MODERATED”或“CLOSED”)
    • 退货:
      • 用修改后的字段更新博客对象
  3. get-blog-by-id

    • 按ID获取特定博客及其所有详细信息
    • 输入:
      • blogId (string,必填):要获取的博客GID
    • 退货:
      • 博客对象包含:
        • id:博客ID
        • title:博客标题
        • handle:URL友好句柄
        • templateSuffix:模板后缀
        • commentPolicy:评论政策
        • articles:最近的文章(前5篇)

物品管理

  1. get-articles

    • 从特定博客获取文章
    • 输入:
      • blogId (string,必填):从中获取文章的博客GID
      • searchTitle (可选字符串):按标题筛选文章
      • limit (可选数字,默认值:10):要返回的最大文章数
    • 退货:
      • 包含以下内容的文章数组:
        • id:文章ID
        • title:文章标题
        • handle:URL友好句柄
        • author:作者信息
        • publishedAt:出版日期
        • tags:关联标签
        • image:特色图片(如有)
  2. create-article

    • 在指定博客中创建新文章
    • 输入:
      • blogId (string,必填):用于创建文章的博客GID
      • title (string,必填):文章的标题
      • content (string,必填):HTML格式的文章内容
      • author (对象,必填):
        • name (string,必填):文章作者的姓名
      • published (可选布尔值):是否立即发布(默认值:false)
      • tags (可选字符串数组):对文章进行分类的标签
    • 退货:
      • 创建的文章对象包含:
        • id:文章ID
        • title:文章标题
        • handle:URL友好句柄(由标题自动生成)
        • body:文章内容
        • summary:文章摘要(如有提供)
        • author:作者信息
        • tags:关联标签
        • image:特色图片详情(如有提供)
    • 示例用法:
      // Create a published article with formatted content
      {
        "blogId": "gid://shopify/Blog/123456789",
        "title": "My New Article",
        "content": "<p>Article content with <strong>HTML formatting</strong>.</p>",
        "author": {
          "name": "John Doe"
        },
        "published": true,
        "tags": ["news", "updates"]
      }
      
      // Create a draft article with future publication
      {
        "blogId": "gid://shopify/Blog/123456789",
        "title": "Upcoming Article",
        "content": "<p>Draft content...</p>",
        "author": {
          "name": "Jane Smith"
        },
        "published": false,
        "tags": ["draft"]
      }
      
  3. update-article

    • 更新现有文章的详细信息
    • 输入:
      • articleId (string,必填):要更新的文章的GID
      • title (可选字符串):新文章标题
      • body (可选字符串):新文章内容
      • summary (可选字符串):新文章摘要
      • tags (可选字符串数组):新文章标签
      • author (可选对象):作者信息
        • name (string):作者姓名
    • 退货:
      • 使用修改后的字段更新文章对象
  4. get-article-by-id

    • 按ID获取特定文章及其所有详细信息
    • 输入:
      • articleId (string,必填):要获取的文章的GID
    • 退货:
      • 文章对象包含:
        • id:文章ID
        • title:文章标题
        • handle:URL友好句柄
        • author:作者信息
        • body:文章内容
        • blog:家长博客信息
        • tags:关联标签

博客和文章管理的重要注意事项

  1. 处理博客内容

    • 始终使用 get-blogs 首先获取有效的博客ID
    • 使用 get-blog-by-id 获取特定博客的详细信息
    • 更新博客时,只包括要修改的字段
    • 这 commentPolicy 只能设置为“MODERATED”或“CLOSED”
  2. 使用文章

    • 文章必须与现有博客相关联
    • 使用 get-articles 列出特定博客中的文章
    • 在创建或更新文章时 body 字段支持HTML内容
    • 作者信息应始终至少包括姓名
    • 标签区分大小写,应在文章中保持一致
    • 图像URL必须可公开访问
    • 句柄创建是可选的-如果没有提供,Shopify将根据标题生成一个句柄
  3. 文章创建的最佳实践

    • 对文章内容使用语义HTML(例如。, <p>, <h2>, <ul>等等)
    • 保持文章摘要简洁(建议:150-160个字符)
    • 使用一致的标签命名约定
    • 在创建文章之前,始终验证博客ID
    • 在撰写标题和内容时考虑SEO的影响
    • 首先在暂存环境中测试HTML格式
    • 对于草稿,设置 published: false 保存而不发布
    • 使用标签时,保持一致的分类
    • 为任何图像提供描述性alt文本
    • 使用publishDate策略性地安排文章
    • 保持HTML内容干净且结构良好
    • 使用有意义的句柄以获得更好的SEO
    • 格式化内容时考虑移动可读性
  4. 文章创建技巧

    • HTML内容:内容字段接受HTML标记以实现丰富的格式:
      <p>First paragraph with <strong>bold text</strong>.</p>
      <h2>Section Heading</h2>
      <ul>
        <li>List item one</li>
        <li>List item two</li>
      </ul>
      
    • 标签:使用描述性、一致的标签以更好地组织:
      "tags": ["product-updates", "how-to", "tips"]
      
    • 草稿模式:通过将published设置为false来创建未发布的草稿:
      {
        "published": false,
        // other fields...
      }
      
    • 作者信息:始终提供完整的作者详细信息:
      "author": {
        "name": "Full Author Name"
      }
      

店铺搜索

  1. search-shopify
    • 跨产品、文章、博客和页面执行统一搜索
    • 输入:
      • query (string,必填):在商店中查找内容的搜索查询
      • types (可选字符串数组):要搜索的资源类型。可用类型:
        • “文章”
        • “博客”
        • “页面”
        • “产品”
      • first (可选数字,默认值:10,最大值:50):要返回的结果数
    • 退货:
      • 搜索结果数组,每个结果包含:
        • id:资源ID
        • title:资源标题
        • type:资源类型
        • url:资源URL
        • 基于资源类型的其他字段
    • 示例用法:
      // Search for articles and blogs about "kawaii"
      {
        "query": "kawaii",
        "types": ["ARTICLE", "BLOG"],
        "first": 5
      }
      
      // Search across all content types
      {
        "query": "new collection",
        "first": 10
      }
      

页面管理

  1. get-pages

    • 获取所有页面或按标题搜索
    • 输入:
      • searchTitle (可选字符串):按标题筛选页面
      • limit (可选数字,默认值:10):返回的最大页数
    • 退货:
      • 包含以下内容的页面数组:
        • id:页面ID
        • title:页面标题
        • handle:URL友好句柄
        • body:页面内容
        • bodySummary:内容摘要
        • createdAt:创建时间戳
        • updatedAt:上次更新时间戳
  2. update-page

    • 更新现有页面的详细信息
    • 输入:
      • pageId (string,必填):要更新的页面的GID(例如,“gid://shopify/Page/1234567890")
      • title (可选字符串):新页面标题
      • body (可选字符串):新页面内容
      • bodyHtml (可选字符串):新建HTML内容
      • seo (可选对象):SEO设置
        • title (可选字符串):SEO标题
        • description (可选字符串):SEO描述
      • published (可选布尔值):页面是否已发布
    • 退货:
      • 更新了带有修改字段的页面对象
    • 示例用法:
      // Update page content and SEO
      {
        "pageId": "gid://shopify/Page/123456789",
        "title": "About Our Store",
        "bodyHtml": "<h1>Welcome!</h1><p>Learn about our story...</p>",
        "seo": {
          "title": "About Us - Kawaii Store",
          "description": "Discover our journey in bringing kawaii culture to you"
        }
      }
      

收集管理

  1. get-collections

    • 获取所有收藏或按标题搜索
    • 输入:
      • searchTitle (可选字符串):按标题筛选集合
      • limit (可选数字,默认值:10):要返回的最大集合数
    • 退货:
      • 包含以下内容的集合数组:
        • id:集合ID
        • title:收藏标题
        • handle:URL友好句柄
        • description:收藏说明
        • descriptionHtml:HTML格式的描述
        • updatedAt:上次更新时间戳
        • productsCount:收藏中的产品数量
  2. update-collection

    • 更新现有收藏的详细信息
    • 输入:
      • collectionId (string,必填):要更新的集合的GID
      • title (可选字符串):新收藏标题
      • description (可选字符串):新集合描述
      • descriptionHtml (可选字符串):新建HTML描述
      • seo (可选对象):SEO设置
        • title (可选字符串):SEO标题
        • description (可选字符串):SEO描述
    • 退货:
      • 已更新具有修改字段的集合对象
    • 示例用法:
      // Update collection with SEO optimization
      {
        "collectionId": "gid://shopify/Collection/123456789",
        "title": "Summer Kawaii Collection",
        "descriptionHtml": "<p>Discover our cutest summer items!</p>",
        "seo": {
          "title": "Summer Kawaii Collection 2025",
          "description": "Explore our adorable summer collection featuring..."
        }
      }
      

产品管理

  1. get-products

    • 获取所有产品或按标题搜索
    • 输入:
      • searchTitle (可选字符串):按标题筛选产品
      • limit (可选数量,默认值:10):可退回的最大产品数量
    • 退货:
      • 一系列产品包含:
        • id:产品ID
        • title:产品名称
        • handle:URL友好句柄
        • description:产品描述
        • descriptionHtml:HTML格式的描述
        • status:产品状态
        • totalInventory:总库存盘点
        • priceRange:产品价格范围
        • images:产品图片
  2. get-product-by-id

    • 获取特定产品的详细信息
    • 输入:
      • productId (string,必填):要获取的产品的GID
    • 退货:
      • 产品对象包含:
        • id:产品ID
        • title:产品名称
        • handle:URL友好句柄
        • description:产品描述
        • descriptionHtml:HTML格式的描述
        • status:产品状态
        • totalInventory:总库存盘点
        • variants:产品变体
        • images:产品图片
        • collections:相关收藏
  3. update-product

    • 更新产品的详细信息
    • 输入:
      • productId (string,必填):要更新的产品的GID
      • title (可选字符串):新产品标题
      • descriptionHtml (可选字符串):新建HTML描述
    • 退货:
      • 更新的产品对象包含:
        • id:产品ID
        • title:更新标题
        • descriptionHtml:更新的描述
        • updatedAt:更新时间戳

内容管理的最佳实践

  1. 搜索引擎优化

    • 使用描述性标题和句柄
    • 为所有内容提供元描述
    • 自然地包含相关关键字
    • 保持URL干净且有意义
    • 在HTML内容中使用适当的标题层次结构
  2. 内容组织

    • 集合中的集团相关产品
    • 使用一致的命名约定
    • 保持清晰的内容层次结构
    • 保持产品描述详细准确
    • 使用具有描述性alt文本的高质量图像
  3. 性能注意事项

    • 优化图像大小
    • 使用适当的查询限制
    • 缓存频繁访问的内容
    • 尽可能批量更新
    • 监控API使用情况
  4. 内容管理提示

    • 定期内容审核
    • 在所有内容中保持一致的品牌
    • 移动友好格式
    • 定期备份重要内容
    • 重大变更的版本控制

错误处理

所有工具都包括全面的错误处理:

  • ID错误无效
  • 权限错误
  • 速率限制错误
  • 验证错误
  • 网络错误

错误响应包括:

  • 错误代码
  • 导致错误的字段
  • 详细错误消息
  • 解决建议

API限制

  1. 速率限制

    • 遵守Shopify的API价格限制
    • 使用适当的查询限制
    • 对失败的请求实施重试逻辑
    • 监控API使用情况
  2. 内容限制

    • 最大内容长度
    • 支持的HTML标签
    • 图像大小限制
    • API版本兼容性
  3. 认证

    • 所需访问范围
    • 令牌过期
    • IP限制
    • 应用程序权限