Skip to main content
Glama
README.md
# Magento MCP Server

An [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) server for **Adobe Commerce / Magento 2** administration. Connects AI assistants like Claude, Windsurf, Cursor, and other MCP-compatible clients to your Magento instance for business-level operations — catalog management, promotions, CMS, diagnostics, and more.

## Features

- **30+ tools** for Magento administration via the standard MCP protocol
- **OAuth 1.0 (HMAC-SHA256)** integration authentication — no 2FA prompts
- **Two-phase commit** for bulk operations (prepare → review → commit)
- **Built-in guardrails** — bulk caps, price change warnings, confirmation requirements
- **Multi-store aware** — explicit scope handling for websites, stores, and store views
- **Audit logging** — every action logged with timestamps, user, and parameters

## Available Tools

### Auth & Scope
- `auth.login` / `auth.logout` / `auth.whoami` — session management
- `scope.list_websites_stores` / `scope.set_default` — multi-store scope

### Catalog
- `catalog.search_products` — search with filters, pagination, field projection
- `catalog.get_product` — full product details by SKU
- `catalog.prepare_bulk_update` / `catalog.commit_bulk_update` — two-phase bulk product updates

### Pricing
- `pricing.prepare_bulk_price_update` / `pricing.commit_bulk_price_update` — safe bulk price changes with threshold warnings

### Promotions
- `promotions.search_rules` / `promotions.get_rule` — find and inspect cart price rules
- `promotions.prepare_cart_price_rule_create` / `promotions.commit_cart_price_rule_create` — create rules safely
- `promotions.update_rule` / `promotions.enable_rule` / `promotions.disable_rule`
- `promotions.generate_coupons` / `promotions.export_coupons`

### CMS
- `cms.search_pages` / `cms.get_page` — find and read CMS pages
- `cms.prepare_bulk_update_pages` / `cms.commit_bulk_update_pages`
- `cms.search_blocks` / `cms.get_block`
- `cms.prepare_bulk_update_blocks` / `cms.commit_bulk_update_blocks`

### SEO
- `seo.prepare_bulk_update_url_keys` / `seo.commit_bulk_update_url_keys` — URL key changes with collision detection
- `seo.bulk_update_meta` — bulk meta title/description/keyword updates
- `seo.report_redirect_chains` — find redirect chain issues

### Diagnostics
- `diagnostics.product_display_check` — why isn't my product showing?
- `diagnostics.indexer_status_report` — indexer health check
- `diagnostics.inventory_salable_report` — MSI stock/salable quantity

### Cache
- `cache.purge_by_url` / `cache.purge_product` / `cache.purge_category` — targeted cache invalidation (Fastly or fallback)

## Quick Start

### Prerequisites

- Node.js 18+
- A Magento 2 / Adobe Commerce instance
- An [Integration](https://experienceleague.adobe.com/docs/commerce-admin/systems/integrations.html) configured in Magento with appropriate API permissions

### Installation

```bash
git clone https://github.com/thomastx05/magento-mcp.git
cd magento-mcp
npm install
npm run build
```

### Magento Integration Setup

1. In Magento Admin, go to **System > Integrations > Add New Integration**
2. Give it a name (e.g., "MCP Server")
3. Under **API**, select the resources you want to expose
4. Save and **Activate** the integration
5. Copy the four OAuth credentials:
   - Consumer Key
   - Consumer Secret
   - Access Token
   - Access Token Secret

### MCP Client Configuration

Add to your MCP client config (e.g., `mcp_config.json` for Windsurf, `claude_desktop_config.json` for Claude Desktop):

```json
{
  "mcpServers": {
    "magento-mcp": {
      "command": "node",
      "args": ["C:/path/to/magento-mcp/dist/index.js"],
      "env": {
        "MAGENTO_BASE_URL": "https://your-magento-instance.com",
        "MAGENTO_OAUTH_CONSUMER_KEY": "your_consumer_key",
        "MAGENTO_OAUTH_CONSUMER_SECRET": "your_consumer_secret",
        "MAGENTO_OAUTH_TOKEN": "your_access_token",
        "MAGENTO_OAUTH_TOKEN_SECRET": "your_access_token_secret"
      }
    }
  }
}
```

### Alternative: Username/Password Auth

If you prefer admin token auth instead of OAuth (requires handling 2FA if enabled):

```json
{
  "env": {
    "MAGENTO_BASE_URL": "https://your-magento-instance.com",
    "MAGENTO_ADMIN_USERNAME": "your_admin_user",
    "MAGENTO_ADMIN_PASSWORD": "your_admin_password"
  }
}
```

## Usage

Once configured, call `auth.login` first to establish a session, then use any tool:

```
> auth.login
Login successful (OAuth 1.0 integration)

> catalog.search_products { filters: { name: { value: "%eye drops%", condition: "like" } } }
Found 12 products...

> diagnostics.inventory_salable_report { sku: "PROD-001" }
Qty: 3,805 | In Stock: Yes | Backorders: Enabled
```

## Architecture

```
src/
  index.ts              # MCP server entry point (McpServer + StdioServerTransport)
  config/index.ts       # Configuration & guardrail defaults
  actions/              # Tool handlers (one file per domain)
    auth.ts
    catalog.ts
    pricing.ts
    promotions.ts
    cms.ts
    seo.ts
    diagnostics.ts
    cache.ts
    scope.ts
  client/
    magentoRest.ts      # REST client with OAuth 1.0 signing
    fastlyClient.ts     # Optional Fastly CDN integration
  session/
    sessionStore.ts     # In-memory session & OAuth credential storage
    planStore.ts        # Two-phase commit plan storage
    idempotencyLedger.ts
  validation/
    schemas.ts          # Zod input schemas for all tools
    guardrails.ts       # Safety checks (bulk caps, price thresholds, confirmations)
  protocol/
    types.ts            # TypeScript interfaces
  audit/
    auditLogger.ts      # Action audit trail (JSONL)
```

## Security

- **No credentials stored on disk** — OAuth tokens are passed via environment variables and kept in memory only
- **Magento ACL enforced** — the integration's API permissions control what the server can do
- **Guardrails on top** — bulk operation caps, price change thresholds, and confirmation requirements provide defense-in-depth
- **Two-phase commit** — destructive bulk operations require explicit review and confirmation
- **Audit trail** — every action is logged with timestamp, user, parameters, and result

## Configuration

Guardrails and limits are configurable in `src/config/index.ts`:

| Setting | Default | Description |
|---------|---------|-------------|
| `maxSkusPerBulkCommit` | 500 | Max products per bulk update |
| `maxCouponQtyPerGeneration` | 1000 | Max coupons per generation |
| `priceChangeThresholdPercent` | 50 | Warning threshold for price changes (%) |
| `maxDiscountPercent` | 50 | Max percent discount without override |
| `allowedCatalogUpdateFields` | name, description, status, visibility, ... | Whitelist for bulk catalog updates |

## Optional: Fastly CDN Integration

For targeted cache purge via Fastly, add these environment variables:

```json
{
  "env": {
    "FASTLY_SERVICE_ID": "your_service_id",
    "FASTLY_API_TOKEN": "your_api_token"
  }
}
```

## License

MIT

TDQS

B3.1/5.0

Scored across 38 tools

Disambiguation5/5

All 38 tools are grouped by domain prefix (auth_, cache_, catalog_, etc.) and each tool within its group has a distinct purpose, e.g., cache_purge_by_url vs cache_purge_category. No two tools overlap in functionality.

Naming Consistency5/5

Tool names consistently follow the pattern <domain>_<verb>_<object?>, all in snake_case. Verbs are uniform (e.g., get, search, prepare, commit, enable, disable) with no mixing of styles or conventions.

Tool Count4/5

38 tools is slightly above the typical range but justified by the broad domain of Magento e-commerce administration. Each tool serves a clear, non-redundant purpose, though consolidation could be explored.

Completeness3/5

Covers authentication, cache, catalog (bulk operations only), CMS, diagnostics, pricing, promotions, scope, and SEO. Missing individual CRUD for products, delete operations, customer management, and order management, which are notable gaps for a Magento server.

Maintenance

ActivityInactive
ResponsivenessNo issues