woocommerce-mcp-server
by opestro
README.md
# WooCommerce MCP Server
A Model Context Protocol (MCP) server for integrating WooCommerce with Claude and other AI assistants.
## Overview
This server provides tools for AI assistants to interact with a WooCommerce store, allowing them to:
- Fetch recent orders with optional filtering
- Retrieve detailed information about specific orders by ID
The server implements the [Model Context Protocol](https://modelcontextprotocol.io/) specification, making it compatible with MCP-enabled AI assistants like Claude for Desktop.
## Prerequisites
- Node.js v18 or higher
- A WooCommerce store with REST API access
- WooCommerce API credentials (consumer key and secret)
## Installation
1. Clone this repository:
```bash
git clone https://github.com/techspawn/woocommerce-mcp-server.git
cd woocommerce-mcp-server
```
2. Install dependencies:
```bash
npm install
```
## Configuration
You need to configure your WooCommerce API credentials. You can do this by:
1. Setting environment variables when running the server:
```bash
WOOCOMMERCE_URL=https://your-store.com \
WOOCOMMERCE_CONSUMER_KEY=your-consumer-key \
WOOCOMMERCE_CONSUMER_SECRET=your-consumer-secret \
node index.js
```
2. Or by editing the default values in the `index.js` file:
```javascript
const woocommerceConfig = {
url: process.env.WOOCOMMERCE_URL || 'https://your-store.com',
consumerKey: process.env.WOOCOMMERCE_CONSUMER_KEY || 'your-consumer-key',
consumerSecret: process.env.WOOCOMMERCE_CONSUMER_SECRET || 'your-consumer-secret',
version: 'wc/v3'
};
```
## Running the Server
To run the server directly:
```bash
node index.js
```
Or using the npm script:
```bash
npm start
```
## Integration with Claude for Desktop
To connect this server to Claude for Desktop:
1. Make sure you have [Claude for Desktop](https://claude.ai/desktop) installed
2. Open your Claude Desktop configuration file located at:
- Windows: `%USERPROFILE%\AppData\Roaming\Claude\claude_desktop_config.json`
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Linux: `~/.config/Claude/claude_desktop_config.json`
3. Add your WooCommerce MCP server configuration (create the file if it doesn't exist):
```json
{
"mcpServers": {
"woocommerce": {
"command": "node",
"args": [
"/ABSOLUTE/PATH/TO/woocommerce-mcp-server/index.js"
],
"env": {
"WOOCOMMERCE_URL": "https://your-store.com",
"WOOCOMMERCE_CONSUMER_KEY": "your-consumer-key",
"WOOCOMMERCE_CONSUMER_SECRET": "your-consumer-secret"
}
}
}
}
```
4. Save the file and restart Claude for Desktop
## Available Tools
### `getRecentOrders`
Fetches a list of recent orders from your WooCommerce store.
Parameters:
- `status` (optional): Filter orders by status (e.g., "processing", "completed", "on-hold")
- `limit` (optional, default: 5): Number of orders to return
### `getOrderById`
Retrieves detailed information about a specific order.
Parameters:
- `id`: The order ID to retrieve
## Building Your Own MCP Server with JavaScript
This section provides a guide to creating your own MCP server using JavaScript/Node.js.
### 1. Set up a new project
```bash
mkdir my-mcp-server
cd my-mcp-server
npm init -y
```
### 2. Install dependencies
```bash
npm install @modelcontextprotocol/sdk axios zod
```
### 3. Create your server file (index.js)
Start with the basic structure:
```javascript
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
// Initialize server
const server = new McpServer({
name: "My MCP Service",
version: "1.0.0",
});
// Define and register your tools
server.tool(
"myToolName",
{
// Define parameters using Zod schemas
param1: z.string().describe("Description of param1"),
param2: z.number().optional().describe("Optional parameter")
},
async ({ param1, param2 }) => {
// Tool implementation logic here
const result = `Processed ${param1} with value ${param2 || 'none'}`;
// Return result in the expected format
return {
content: [
{
type: "text",
text: result
}
]
};
}
);
// Connect the server
const transport = new StdioServerTransport();
await server.connect(transport);
```
### 4. Make your package.json ES module compatible
```json
{
"type": "module",
"scripts": {
"start": "node index.js"
}
}
```
### 5. Define tools
MCP tools are defined with three components:
- Name: A unique identifier for the tool
- Parameters: Schema for input parameters (using Zod)
- Handler: Async function that processes the inputs and returns results
Example:
```javascript
server.tool(
"calculateTotal",
{
items: z.array(
z.object({
name: z.string(),
price: z.number(),
quantity: z.number().int().positive()
})
).describe("Array of items to calculate total for")
},
async ({ items }) => {
const total = items.reduce((sum, item) => sum + (item.price * item.quantity), 0);
return {
content: [
{
type: "text",
text: `Total: $${total.toFixed(2)}`
}
]
};
}
);
```
### 6. Testing locally
You can test your MCP server locally using the stdio transport:
```bash
node index.js
```
### 7. Debugging tips
- Use `console.error()` for debugging, not `console.log()` which interferes with stdio transport
- Check the logs in Claude for Desktop for errors
- Ensure your tool handlers properly handle exceptions
## Resources
- [Model Context Protocol documentation](https://modelcontextprotocol.io/)
- [MCP JavaScript SDK](https://www.npmjs.com/package/@modelcontextprotocol/sdk)
- [WooCommerce REST API documentation](https://woocommerce.github.io/woocommerce-rest-api-docs/)
## License
MIT TDQS
D1.7/5.0
Scored across 2 tools
Disambiguation5/5
The two tools are clearly distinct: one retrieves recent orders, the other retrieves a single order by ID. There is no overlap in their purposes.
Naming Consistency5/5
Both tools follow a consistent camelCase verb_noun pattern (getRecentOrders, getOrderById), making naming predictable.
Tool Count2/5
With only 2 tools for a WooCommerce server, the tool surface is far too thin for the typical scope of e-commerce operations.
Completeness1/5
The server only provides order retrieval, missing critical CRUD operations for orders, products, customers, and other WooCommerce entities.
Maintenance
ActivityInactive
ResponsivenessNo issues