Skip to main content
Glama
akshayadeodiaspark

tekweld-ecommerce-mcp

README.md
# 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

A3.7/5.0

Scored across 3 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count3/5

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.

Completeness2/5

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.

Maintenance

ActivityInactive
ResponsivenessNo issues