Skip to main content
Glama
jigarkkarangiya

magento-sql-mcp-server

README.md
# Magento SQL MCP Server

[![npm version](https://img.shields.io/npm/v/magento-sql-mcp-server)](https://www.npmjs.com/package/magento-sql-mcp-server)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![Node.js](https://img.shields.io/badge/Node.js-18%2B-green)](https://nodejs.org/)

An [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that provides AI assistants with **read-only** access to a Magento 2 / Adobe Commerce **MySQL database**. It auto-detects local DDEV environments, connects to Adobe Commerce Cloud via CLI tunnels, and ships 50+ tools for orders, catalog, customers, CMS, config, indexers, and diagnostics.

> **Complementary MCP:** Documentation MCPs (see [Related MCPs](#related-mcps)) cover official Adobe Commerce docs. **This package** covers your **live database**.

---

## Features

- **50+ read-only tools** for orders, products, customers, CMS, config, EAV, MSI, B2B, staging, cron, and indexers
- **Read-only by design** — blocks INSERT/UPDATE/DELETE/DDL; masks password, token, and credit-card columns
- **Multi-environment profiles** — local DDEV, Adobe Commerce Cloud (staging/production), direct remote DB, SSH tunnel
- **Zero-config local dev** — reads `app/etc/env.php`, auto-detects DDEV MySQL port (cached 120s)
- **Commerce-aware** — detects staging (`updated_in`), MSI, B2B; EAV joins use `row_id` on Commerce
- **CMS helpers** — `get_cms_page`, `audit_cms_page_blocks`
- **Parameter aliases** — `query` to `sql`, `path` to `pathPattern`, `entity_type` to `entity_type_code`
- **Per-call profile override** — pass `profile: "staging"` on any tool without restarting MCP
- **MCP standards** — Zod schemas, structured output, tool annotations, server instructions
- **Resources and prompts** — table reference, EAV cheatsheet, order-debug and MSI-troubleshoot workflows
- **Dual transport** — stdio (default) and optional HTTP for LibreChat / remote hosts

---

## Quick setup for Cursor

### Prerequisites

| Requirement | Notes |
|-------------|-------|
| Node.js 18+ | `node --version` |
| Magento project | Must contain `app/etc/env.php` |
| DDEV | Optional; auto-detected for local profiles |
| Adobe Commerce Cloud CLI | Required for Cloud staging/production tunnels |

### Option A: npx (recommended)

1. Open **Cursor** → **Settings** → **MCP** → **Add new MCP server**
2. Configure:

| Field | Value |
|-------|-------|
| Name | `magento-sql` |
| Type | `command` |
| Command | `npx -y magento-sql-mcp-server` |

3. Set environment variables:

| Variable | Required | Example |
|----------|----------|---------|
| `MAGENTO_ROOT` | Yes | `/absolute/path/to/magento` |
| `MAGENTO_SQL_PROFILE` | No | `local` (defaults to auto-detect) |

4. Restart Cursor. Verify with: `Call get_connection_status`

### Option B: Project config (`.cursor/mcp.json`)

Create in your Magento project root:

```json
{
  "mcpServers": {
    "magento-sql": {
      "command": "npx",
      "args": ["-y", "magento-sql-mcp-server"],
      "env": {
        "MAGENTO_ROOT": "/absolute/path/to/magento",
        "MAGENTO_SQL_PROFILE": "local"
      }
    }
  }
}
```

Run from source (development):

```json
{
  "mcpServers": {
    "magento-sql": {
      "command": "node",
      "args": ["/absolute/path/to/magento-sql-mcp-server/dist/index.js"],
      "env": {
        "MAGENTO_ROOT": "/absolute/path/to/magento",
        "MAGENTO_SQL_PROFILE": "local"
      }
    }
  }
}
```

### Option C: Init profile scaffold

```bash
npx magento-sql-mcp-server --init
```

Creates `.cursor/magento-sql-mcp.json` from `examples/magento-sql-mcp.example.json`.

Profiles named `default`, `local`, or `dev` auto-fallback to DDEV/env.php detection without a config file.

---

## Setup for other tools

### Claude Desktop

| OS | Config path |
|----|-------------|
| macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` |
| Windows | `%APPDATA%\Claude\claude_desktop_config.json` |
| Linux | `~/.config/Claude/claude_desktop_config.json` |

Use the same `mcpServers` JSON as Cursor.

### VS Code / GitHub Copilot

`.vscode/mcp.json` — same env vars; use `"servers"` key instead of `"mcpServers"`.

### Windsurf

`~/.codeium/windsurf/mcp_config.json` — same structure as Claude Desktop.

---

## Connection profiles

### Profile file

Create `.cursor/magento-sql-mcp.json` in your Magento project (see `examples/magento-sql-mcp.example.json`):

```json
{
  "defaultProfile": "local",
  "profiles": {
    "local": { "mode": "auto" },
    "staging": {
      "mode": "direct",
      "database": {
        "host": "127.0.0.1",
        "port": 30000,
        "dbname": "your_project_stg",
        "username": "your_project_stg",
        "password": "${MAGENTO_STAGING_DB_PASSWORD}"
      }
    },
    "production": {
      "mode": "direct",
      "database": {
        "host": "127.0.0.1",
        "port": 30000,
        "dbname": "your_project_id",
        "username": "your_project_id",
        "password": "${MAGENTO_PRODUCTION_DB_PASSWORD}"
      }
    }
  }
}
```

Set passwords in MCP `env` (never commit credentials):

```json
"env": {
  "MAGENTO_STAGING_DB_PASSWORD": "from-tunnel-info",
  "MAGENTO_PRODUCTION_DB_PASSWORD": "from-tunnel-info",
  "MAGENTO_SQL_PROFILE": "local"
}
```

Global shared profiles: `~/.config/magento-sql-mcp/config.json`

### Connection modes

| Mode | Use case |
|------|----------|
| `auto` | Local dev: reads `env.php`, detects DDEV port |
| `env-php` | Same as `auto` |
| `direct` | Connect to host:port (Cloud tunnel on `127.0.0.1:30000`, VPN, allowlisted IP) |
| `ssh-tunnel` | MCP opens SSH port forward (non-Cloud hosts with standard SSH keys) |

Config values support `${ENV_VAR}` references for secrets.

Per-tool override: pass `profile` on any tool call without changing `MAGENTO_SQL_PROFILE`.

---

## Adobe Commerce Cloud setup

Cloud MySQL runs on `database.internal:3306` inside the environment. It is not reachable from the public internet. Use an SSH tunnel (same approach as DBeaver with SSH enabled).

```
Laptop                    Cloud environment
127.0.0.1:30000  --SSH--> database.internal:3306
```

### Step 1: Install and authenticate Cloud CLI

Documentation: [Adobe Commerce Cloud CLI](https://experienceleague.adobe.com/en/docs/commerce-cloud-service/user-guide/dev-tools/cloud-cli/cloud-cli-overview)

```bash
magento-cloud login
magento-cloud auth:info
magento-cloud project:list
magento-cloud environments -p YOUR_PROJECT_ID
```

Non-interactive auth: `magento-cloud auth:api-token-login` or `export MAGENTO_CLOUD_CLI_TOKEN=...`

### Step 2: Open tunnel

```bash
# Staging
magento-cloud tunnel:open -p YOUR_PROJECT_ID -e staging

# Production
magento-cloud tunnel:open -p YOUR_PROJECT_ID -e production
```

Example output:

```
SSH tunnel opened to database at: mysql://user:pass@127.0.0.1:30000/dbname?compression=1
```

Default ports (single environment open):

| Port | Service |
|------|---------|
| 30000 | MySQL (primary) |
| 30001 | MySQL slave / MBI |
| 30002+ | OpenSearch, Valkey, etc. |

**Note:** Staging and production both use port `30000`. Close the current tunnel before opening another:

```bash
magento-cloud tunnel:close
magento-cloud tunnel:open -p YOUR_PROJECT_ID -e staging
```

### Step 3: Get credentials

```bash
magento-cloud tunnel:info -p YOUR_PROJECT_ID -e staging
magento-cloud tunnel:info -P database
```

On the remote container (SSH):

```bash
echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp
```

CLI reference: [Cloud CLI reference](https://experienceleague.adobe.com/en/docs/commerce-cloud-service/user-guide/dev-tools/cloud-cli/cloud-cli-reference)

### Step 4: Configure MCP profiles

Cloud profiles use `direct` mode to `127.0.0.1:30000`. The tunnel must remain open while MCP is connected.

Add `.cursor/mcp.json` and `.cursor/magento-sql-mcp.json` to `.gitignore`.

### Step 5: Switch environments

| Target | Steps |
|--------|-------|
| Local | `tunnel:close` → `MAGENTO_SQL_PROFILE=local` → reload MCP |
| Staging | `tunnel:open -e staging` → `MAGENTO_SQL_PROFILE=staging` or `profile: "staging"` per tool |
| Production | `tunnel:open -e production` → `MAGENTO_SQL_PROFILE=production` |

### Step 6: Verify connection

```bash
magento-cloud tunnels
```

MCP tools:

- `get_connection_status` (with `profile: "staging"` or `"production"`)
- `detect_magento_environment`

| Check | Staging | Production |
|-------|---------|------------|
| Database name | Often `*_stg` suffix | Usually project ID |
| Cloud URL | `mcstaging.yourdomain.com` | `mcprod.yourdomain.com` |
| Order volume (7d) | Typically low | Active traffic |

```bash
magento-cloud url -p YOUR_PROJECT_ID -e staging
```

### Step 7: Close tunnel

```bash
magento-cloud tunnel:close
```

### Cloud config URLs vs storefront URLs

`core_config_data` base URLs (`web/unsecure/base_url`, `web/secure/base_url`) on staging often still show the production domain (DB cloned from production). Actual storefront URLs are set by Cloud routes and Fastly.

### Timezone-aware order queries

Store timezone: `general/locale/timezone` in `core_config_data`. Order `created_at` is stored in UTC. Convert store-local date ranges to UTC before querying `sales_order`. Use `get_magento_config` with `pathPattern: "general/locale/%"` to read the timezone.

---

## Tools

Call `list_available_tools` for the full catalog with edition tags (OSS / MSI / B2B / Commerce).

### Connection and environment

| Tool | Description |
|------|-------------|
| `list_connection_profiles` | List configured DB profiles |
| `get_connection_status` | Test connectivity, host, database, latency |
| `detect_magento_environment` | Detect OSS vs Commerce, MSI, B2B, staging columns |
| `run_database_health_check` | Snapshot: connection, indexers, crons, queue backlog |

### SQL and schema

| Tool | Parameters | Description |
|------|------------|-------------|
| `execute_select_query` | `sql` or `query`, `limit?`, `profile?` | Read-only SELECT/SHOW/DESCRIBE/EXPLAIN (auto LIMIT 100) |
| `validate_select_query` | `sql` or `query` | Validate SQL safety without executing |
| `explain_select_query` | `sql` or `query` | EXPLAIN plan for a SELECT |
| `list_tables` | `pattern?` | List tables (optional SQL LIKE pattern) |
| `describe_table` | `table` | Column definitions from INFORMATION_SCHEMA |
| `search_columns` | `pattern` | Find tables containing a column name |
| `get_table_indexes` | `table` | Index details |
| `get_foreign_keys` | `table` | Foreign key relationships |
| `count_table_rows` | `table` | Row count for one table |
| `get_largest_tables` | `limit?` | Top tables by storage size |

### Catalog and products

| Tool | Tag | Description |
|------|-----|-------------|
| `find_product_by_sku` | OSS | Product entity + stock + websites |
| `get_product_attributes` | OSS | Name, price, status, visibility, url_key |
| `get_configurable_children` | OSS | Configurable to simple child SKUs |
| `get_product_categories` | OSS | Category assignments with names |
| `get_eav_attribute` | OSS | Attribute metadata + join hints |
| `get_catalog_rule_price` | OSS | Indexed catalog rule price |
| `get_msi_stock_status` | MSI | Physical qty, reservations, salable qty |
| `get_staging_upcoming_updates` | Commerce | Future staging campaigns for a SKU |

### Sales and customers

| Tool | Description |
|------|-------------|
| `find_order_by_increment_id` | Order header + line items |
| `find_customer_by_email` | Exact email only + order stats |
| `find_customers_by_name` | Firstname/lastname LIKE search |
| `find_active_quote_by_email` | Most recent active cart |
| `get_active_quote_items` | Quote line items with parent-child nesting |
| `get_order_shipment_tracks` | Shipment tracking numbers |
| `get_order_tax_breakdown` | Tax rates applied to an order |
| `get_b2b_negotiable_quotes` | B2B negotiable quotes (optional `company_id`) |

### Operations, CMS, and config

| Tool | Description |
|------|-------------|
| `get_magento_config` | `core_config_data` with `value_status` + scope inheritance |
| `get_cms_page` | CMS page by identifier + embedded block IDs |
| `get_cms_block` | CMS block by identifier or `block_id` |
| `audit_cms_page_blocks` | Active/inactive audit of blocks in a page |
| `get_indexer_status` | `indexer_state` + `mview_state` |
| `get_cron_schedule` | Recent cron entries |
| `get_failed_cron_jobs` | Failed/stuck crons (24h) |
| `get_db_queue_backlog` | Queue backlog (sampled on large DBs) |
| `get_store_hierarchy` | Websites, store groups, store views |
| `get_module_versions` | Installed module versions |
| `get_url_rewrite` | URL rewrite lookup |
| `audit_plaintext_secrets` | Flag plaintext secrets in config |
| `get_heavy_log_tables` | Oversized log/visitor tables |
| `list_available_tools` | Meta-tool: categorized tool catalog |

Edition-specific tools return a clear error if required tables are missing.

---

## Resources

| URI | Description |
|-----|-------------|
| `magento://schema/common-tables` | Common Magento tables by domain |
| `magento://schema/groups` | Table group index (JSON) |
| `magento://schema/group/{slug}` | Tables in a group (catalog, sales, customer, eav, msi, ...) |
| `magento://schema/eav-cheatsheet` | EAV entity types, attribute codes, value tables |
| `magento://help/tools` | Full tool catalog markdown |
| `magento://server/info` | Server version and capabilities |
| `magento://connection/status` | Live connection status (JSON) |

---

## Prompts

| Prompt | Arguments | Description |
|--------|-----------|-------------|
| `order-debug` | `increment_id` | Investigate order, items, addresses, status history |
| `catalog-product-check` | `sku` | Product entity, EAV, stock, URL rewrite |
| `customer-lookup` | `email` | Customer account, group, recent orders |
| `config-inspector` | `path_pattern` | Read store configuration paths |
| `indexer-status-check` | | Review indexer and mview health |
| `checkout-funnel-debug` | `email?` | Trace quote to order conversion |
| `msi-troubleshoot` | `sku` | Diagnose MSI salable qty issues |
| `b2b-company-audit` | `company_id` | Audit B2B company and quotes |
| `staging-campaign-viewer` | `sku` | View upcoming staging campaigns |

---

## Usage examples

| What you ask | What happens |
|--------------|--------------|
| "How many orders yesterday and total revenue?" | Timezone-aware query on `sales_order` |
| "Debug order 1000203870" | `find_order_by_increment_id` + line items |
| "What is the store timezone?" | `get_magento_config` on `general/locale/timezone` |
| "Check Fastly config on staging" | `get_magento_config` with `profile: "staging"` |
| "Audit CMS blocks on the home page" | `audit_cms_page_blocks` |
| "Is this Commerce with MSI?" | `detect_magento_environment` |
| "Why is salable qty 0 for SKU X?" | `msi-troubleshoot` + `get_msi_stock_status` |
| "Show indexer and failed cron status" | `run_database_health_check` |

---

## How it works

```
+-------------+     +---------------------------+     +-----------------------------+
|  AI Client  |---->|  MCP Server (stdio/HTTP)  |---->|  MySQL (read-only)          |
|  Cursor,    |<----|  50+ Tools                |<----|  Magento / Adobe Commerce   |
|  Claude,    |     |  7 Resources, 9 Prompts   |     +-----------------------------+
|  VS Code    |     +---------------------------+
+-------------+
                      |
                      +-- Profile: MAGENTO_SQL_PROFILE -> config JSON
                      +-- auto mode: env.php + DDEV port (cached 120s)
                      +-- Cloud: magento-cloud tunnel -> 127.0.0.1:30000
                      +-- Query validation: read-only only
                      +-- Auto LIMIT 100 (max 1000)
                      +-- Sensitive column masking
                      +-- Commerce staging: updated_in = 2147483647
```

1. MCP host starts the server with `MAGENTO_ROOT` pointing at your Magento project
2. `resolveConnection()` loads profile from `.cursor/magento-sql-mcp.json` or auto-detects
3. For local DDEV: reads `app/etc/env.php`, runs `ddev describe -j` once (cached)
4. Tools run validated read-only SQL or canned queries with Magento-aware joins
5. Results return as structured JSON with Zod schemas

---

## HTTP transport

```bash
npx magento-sql-mcp-server --http
# listens on http://localhost:3100 (override with MCP_HTTP_PORT)
```

LibreChat `librechat.yaml`:

```yaml
mcpServers:
  magento-sql:
    type: streamable-http
    url: http://localhost:3100
    initTimeout: 30000
```

---

## Configuration

### Environment variables

| Variable | Description |
|----------|-------------|
| `MAGENTO_ROOT` | Magento project root (must contain `app/etc/env.php`) |
| `MAGENTO_SQL_PROFILE` | Active profile (`default`, `local`, `staging`, `production`) |
| `MAGENTO_SQL_MODE` | Override mode: `auto`, `direct`, `ssh-tunnel`, `env-php` |
| `MAGENTO_SQL_HOST` | DB host override |
| `MAGENTO_SQL_PORT` | DB port override |
| `MAGENTO_SQL_DATABASE` | Database name override |
| `MAGENTO_SQL_USER` | DB username override |
| `MAGENTO_SQL_PASSWORD` | DB password override |
| `MAGENTO_STAGING_DB_PASSWORD` | Staging password for profile `${...}` refs |
| `MAGENTO_PRODUCTION_DB_PASSWORD` | Production password for profile `${...}` refs |
| `MAGENTO_SQL_SSH_HOST` | SSH tunnel host override |
| `MAGENTO_SQL_SSH_USER` | SSH tunnel user override |
| `MCP_HTTP_PORT` | HTTP transport port (default: `3100`) |

Per-tool overrides: `magentoRoot` and `profile` arguments on most tools.

---

## Troubleshooting

### MCP server failed to start

- Verify Node.js 18+: `node --version`
- Test manually: `npx magento-sql-mcp-server` (should print "running on stdio")
- Ensure `MAGENTO_ROOT` points to a directory with `app/etc/env.php`

### Profile `local` not found

v2.4.0+ auto-fallbacks `local`/`default`/`dev` to auto-detect. Upgrade or run:

```bash
npx magento-sql-mcp-server --init
```

### Connection refused on Cloud (port 30000)

- Tunnel not running: `magento-cloud tunnel:open -p PROJECT_ID -e staging`
- Wrong environment: `magento-cloud tunnels` then close and reopen
- Tunnel dropped after reboot: re-run `tunnel:open`

### Connected to wrong environment

Run `get_connection_status` and check `database`. Staging names often end in `_stg`; production matches project ID.

### Missing password environment variable

Copy password from `magento-cloud tunnel:info` into MCP `env`. Do not commit it.

### DDEV connection refused / wrong port

- Ensure DDEV is running: `ddev start`
- DDEV port is cached for 120s after first discovery

### Tool parameter errors

| Use | Instead of |
|-----|------------|
| `sql` | `query` |
| `pathPattern` | `path` |
| `entity_type_code` | `entity_type` |

### Slow queue / health check tools

On large databases, queue backlog uses sampled counts. Check `sampled: true` in results.

### Green dot does not appear in Cursor

- Restart Cursor
- Refresh MCP server in settings
- Check Output panel for errors

---

## Security

- All queries validated as read-only before execution
- Auto LIMIT (default 100, max 1000) on SELECT without explicit LIMIT
- Password, token, and credit-card columns masked in results
- Customer/admin password hashes never exposed
- Use read-only MySQL users for Cloud profiles when available
- Never commit credentials; use MCP `env` or `${ENV_VAR}` in config JSON
- Close Cloud tunnels when finished; avoid heavy full-table scans on production

---

## Development

### Run from source

```bash
git clone https://github.com/jigarkkarangiya/magento-sql-mcp-server.git
cd magento-sql-mcp-server
npm install
npm run build
MAGENTO_ROOT=/path/to/magento npm start
```

### Tests

```bash
npm test
MAGENTO_ROOT=/path/to/magento npm run test:live
MAGENTO_ROOT=/path/to/magento npm run test:scenarios
```

### Project structure

```
magento-sql-mcp-server/
├── src/                 # MCP server source
├── scripts/             # live-tool-smoke.ts, scenario-benchmark.ts
├── tests/               # unit tests
├── examples/            # magento-sql-mcp.example.json
└── dist/                # compiled JS (npm run build)
```

---

## Requirements

| Requirement | Required for |
|-------------|--------------|
| Node.js 18+ | All modes |
| PHP CLI | `auto` mode (reads `env.php`) |
| DDEV CLI | Optional; local auto-detect |
| Adobe Commerce Cloud CLI | Cloud staging/production tunnels |
| OpenSSH client | `ssh-tunnel` mode |
| MySQL read access | All modes |

---

## Find this MCP

| Registry | Link |
|----------|------|
| npm | [npmjs.com/package/magento-sql-mcp-server](https://www.npmjs.com/package/magento-sql-mcp-server) |
| GitHub | [github.com/jigarkkarangiya/magento-sql-mcp-server](https://github.com/jigarkkarangiya/magento-sql-mcp-server) |

---

## Related MCPs

Documentation MCPs for Adobe Commerce and related platforms. Install alongside this server for docs + database coverage.

| Package | npm | Description |
|---------|-----|-------------|
| [adobe-commerce-docs-mcp](https://github.com/jigarkkarangiya/adobe-commerce-docs-mcp) | [npm](https://www.npmjs.com/package/adobe-commerce-docs-mcp) | Merchant, admin, cloud, operations docs (Experience League) |
| [adobe-commerce-dev-docs-mcp](https://github.com/jigarkkarangiya/adobe-commerce-dev-docs-mcp) | [npm](https://www.npmjs.com/package/adobe-commerce-dev-docs-mcp) | Developer docs (developer.adobe.com/commerce) |
| [adobe-commerce-kb-mcp](https://github.com/jigarkkarangiya/adobe-commerce-kb-mcp) | [npm](https://www.npmjs.com/package/adobe-commerce-kb-mcp) | Support Knowledge Base, patches, troubleshooting |
| [adobe-app-builder-docs-mcp](https://github.com/jigarkkarangiya/adobe-app-builder-docs-mcp) | [npm](https://www.npmjs.com/package/adobe-app-builder-docs-mcp) | App Builder, I/O Runtime, Commerce extensibility |
| [adobe-api-mesh-docs-mcp](https://github.com/jigarkkarangiya/adobe-api-mesh-docs-mcp) | [npm](https://www.npmjs.com/package/adobe-api-mesh-docs-mcp) | API Mesh, GraphQL gateway |
| [adobe-io-events-docs-mcp](https://github.com/jigarkkarangiya/adobe-io-events-docs-mcp) | [npm](https://www.npmjs.com/package/adobe-io-events-docs-mcp) | I/O Events, webhooks |
| [aem-live-docs-mcp](https://github.com/jigarkkarangiya/aem-live-docs-mcp) | [npm](https://www.npmjs.com/package/aem-live-docs-mcp) | AEM / Edge Delivery Services (aem.live) |
| [odoo-docs-mcp](https://github.com/jigarkkarangiya/odoo-docs-mcp) | [npm](https://www.npmjs.com/package/odoo-docs-mcp) | Odoo documentation |

Combined Cursor config:

```json
{
  "mcpServers": {
    "magento-sql": {
      "command": "npx",
      "args": ["-y", "magento-sql-mcp-server"],
      "env": {
        "MAGENTO_ROOT": "/absolute/path/to/magento",
        "MAGENTO_SQL_PROFILE": "local"
      }
    },
    "adobe-commerce-docs": {
      "command": "npx",
      "args": ["-y", "adobe-commerce-docs-mcp"]
    },
    "adobe-commerce-dev-docs": {
      "command": "npx",
      "args": ["-y", "adobe-commerce-dev-docs-mcp"]
    },
    "adobe-commerce-kb": {
      "command": "npx",
      "args": ["-y", "adobe-commerce-kb-mcp"]
    }
  }
}
```

All MCP packages: [github.com/jigarkkarangiya?tab=repositories&q=mcp](https://github.com/jigarkkarangiya?tab=repositories&q=mcp)

TDQS

A4.1/5.0

Scored across 44 tools

Disambiguation5/5

Every tool has a clearly defined, distinct purpose with explicit 'does NOT' notes to prevent overlap. For instance, get_indexer_status vs get_cron_schedule, get_active_quote_items vs find_active_quote_by_email, and get_largest_tables vs get_heavy_log_tables all address separate concerns. The descriptions effectively eliminate ambiguity.

Naming Consistency5/5

Tool names follow a highly consistent verb_noun pattern: get_ for retrieval, find_ for lookups, list_ for enumerations, describe_/search_/count_/explain_ for specific operations, and a few bespoke verbs like audit_/detect_/run_. The naming is uniform and predictable across all 44 tools, making it easy to anticipate tool behavior.

Tool Count2/5

With 44 tools, the surface is substantially overloaded. While Magento is a complex system, the sheer number forces agents to wade through many highly specific tools, increasing selection error risk. Typical well-scoped servers hold 3–15 tools; this exceeds the '25+' threshold for excessive count and feels heavy even for a comprehensive Magento diagnostics suite.

Completeness4/5

The server covers a broad range of Magento database operations: order/product/customer lookups, EAV, categories, CMS, cron, staging, B2B, MSI, queue monitoring, secrets audit, and health checks. The generic execute_select_query handles ad-hoc queries, filling most gaps. Minor missing areas like sales reports or customer group queries are not directly tooled but are reachable via raw SQL, so no dead ends exist.

Maintenance

ActivityMaintained
ResponsivenessNo issues