tekweld-ecommerce-mcp
# tekweld-ecommerce-mcp
MCP server that wraps the Tekweld ecommerce test API
(`https://ecommercetest.tekweld.com/api/v1`).
## Tools
- **get_mega_menu** — raw payload from `GET /home/get_mega_menu` (nested category/collection tree).
- **list_menu_items** — same data, flattened into a simple list with a readable path (e.g. `Men > Shirts > Casual`), link, login-required flag, and whether it has sub-items.
- **call_ecommerce_api** — generic passthrough for any other endpoint under the same base URL. Pass `path`, `method`, and optional `query` / `body` / `headers`.
## Setup
```bash
cd tekweld-ecommerce-mcp
npm install
npm run build
```
This produces `build/index.js`, a stdio MCP server.
## Run standalone (for testing)
```bash
npm start
```
It will print `tekweld-ecommerce-mcp server running on stdio` to stderr and wait for
MCP JSON-RPC messages on stdin.
## Connect to Claude Desktop
Add to your `claude_desktop_config.json`:
```json
{
"mcpServers": {
"tekweld-ecommerce": {
"command": "node",
"args": ["/absolute/path/to/tekweld-ecommerce-mcp/build/index.js"]
}
}
}
```
Restart Claude Desktop, then ask it to use the `get_mega_menu` or `list_menu_items` tool.
## Connect to Claude Code
```bash
claude mcp add tekweld-ecommerce -- node /absolute/path/to/tekweld-ecommerce-mcp/build/index.js
```
Run `claude mcp list` afterward to confirm it registered, then start a **new**
`claude` session (existing sessions won't pick it up) and check `/mcp`.
## Deploying as a remote server (for Cowork / claude.ai custom connectors)
Cowork and claude.ai can only reach **remote** MCP servers (a public HTTPS URL) —
they cannot see a local stdio server on your machine, even one registered in
`claude_desktop_config.json`. To use these tools from Cowork or claude.ai, deploy
the HTTP entrypoint (`src/http.ts` / `build/http.js`) somewhere public. Render's
free tier works well for this:
1. Push this folder to a GitHub repo (Render deploys from a repo, not a local
folder).
2. On [render.com](https://render.com), New → Blueprint, point it at your repo.
It will read `render.yaml` in this folder and configure everything
automatically (build command, start command, health check).
- Alternatively, without the blueprint: New → Web Service → connect repo →
Build Command `npm install && npm run build` → Start Command
`npm run start:http`.
3. Deploy. Render gives you a URL like `https://tekweld-ecommerce-mcp.onrender.com`.
4. Confirm it's up: `curl https://<your-app>.onrender.com/health` should return
`{"status":"ok",...}`.
5. In Claude, go to **Customize > Connectors** (claude.ai) → "+" → "Add custom
connector" → enter `https://<your-app>.onrender.com/mcp` as the server URL.
6. Enable it for a conversation via the "+" button → Connectors, then ask Claude
to use `get_mega_menu` or `list_menu_items`.
**Note:** Render's free tier spins the service down after ~15 minutes of
inactivity. The first request after a gap will be slow (30-60s) while it wakes
back up — that's normal, not a bug.
## Run the HTTP server locally (optional, for testing before deploy)
```bash
npm run build
npm run start:http
```
This starts an Express server on `$PORT` (defaults to 3000) with:
- `POST /mcp` — the MCP Streamable HTTP endpoint (stateless mode)
- `GET /health` — health check
## Extending
The API has more endpoints under `/home/...`, `/product/...`, etc. Rather than
hardcoding each one, use `call_ecommerce_api` to hit them directly, or add a new
`server.registerTool(...)` block in `src/tools.ts` (shared by both the stdio and
HTTP entrypoints) following the pattern used for `get_mega_menu`.
If the API later requires an auth token, pass it via the `headers` argument of
`call_ecommerce_api`, or add an `Authorization` header default in `fetchJson()`
in `src/tools.ts`.
TDQS
Scored across 3 tools
The three tools are clearly distinct: `get_mega_menu` and `list_menu_items` serve different presentation needs for menu data, while `call_ecommerce_api` is a generic fallback. No overlapping functionality, though the two menu tools share a domain.
All tool names follow a consistent `verb_noun` pattern using snake_case. However, `call_ecommerce_api` is less specific than the menu-focused names, causing a slight deviation in specificity.
With only 3 tools, the server feels thin for a general ecommerce API, but the inclusion of a generic passthrough mitigates the need for many dedicated tools. Still, it is borderline small.
The server provides dedicated tools only for the menu domain, lacking tools for products, cart, checkout, etc. The generic `call_ecommerce_api` fills some gaps but leaves the surface feeling incomplete for typical ecommerce workflows.