products-mcp-server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@products-mcp-serverrecommend products similar to id 5"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
products-mcp-server
A custom Model Context Protocol (MCP) server exposing 27 product tools backed by fakestoreapi.com.
It runs three ways from the same code:
Local (stdio) — for Cursor / Claude Desktop, via
src/index.ts→dist/index.js.Render (persistent HTTP) — a long-running Streamable HTTP server, via
src/http.ts→dist/http.js.Vercel (serverless HTTP) — a stateless Streamable HTTP function, via
api/mcp.ts.
Architecture
src/
products-api.ts # Fake Store API client (endpoints + 60s TTL cache)
tools.ts # registerTools(server): all 27 tools (shared)
server.ts # createServer(): builds a configured server (shared)
index.ts # stdio entry point (local)
http.ts # persistent HTTP entry point (Render) — listens on $PORT
api/
mcp.ts # Vercel serverless entry point (stateless Streamable HTTP)
render.yaml # Render blueprint (web service)
vercel.json # Vercel function configAll entry points call createServer(), so the tool set stays identical across transports.
Related MCP server: Market Price Finder
Tools
# | Tool | Description |
1 |
| All products (optional |
2 |
| One product by |
3 |
| List of categories. |
4 |
| Products in a |
5 |
| Keyword search over title + description. |
6 |
| Products within |
7 |
| Products costing more than |
8 |
| Products costing less than |
9 |
| Single cheapest product. |
10 |
| Single most expensive product. |
11 |
| Sorted by rating (optional |
12 |
| Sorted by review count (optional |
13 |
| Products with rating >= |
14 |
| count / min / max / average / median / total. |
15 |
| Per-category price stats. |
16 |
| Total count (optional |
17 |
| Lightweight id + title list. |
18 |
| A random product. |
19 |
| Compare 2–10 products by |
20 |
| Same-category picks for an |
21 |
| Price after |
22 |
| High-level catalog summary. |
23 |
| Cheapest within a |
24 |
| Highest-rated within a |
25 |
| Create a product (simulated by the API). |
26 |
| Update a product (simulated). |
27 |
| Delete a product (simulated). |
Note: fakestoreapi.com simulates write operations (create/update/delete) and does not persist them.
Local development
npm install
npm run build # tsc: src -> dist
npm run typecheck # type-checks src + api
npm start # runs the stdio serverUse locally in Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"products": {
"command": "node",
"args": ["c:/Users/serch/OneDrive/Desktop/MCP-Servers/products-mcp-server/dist/index.js"]
}
}
}Re-run npm run build after changing the TypeScript, since Cursor runs the compiled dist/index.js.
To run the HTTP server locally (same one Render uses):
npm run build
npm run start:http # listens on http://localhost:3000/mcp
# health check: curl http://localhost:3000/healthzDeploy to Render
Render runs a persistent Node process (via src/http.ts), which suits MCP well and avoids serverless cold starts / timeouts.
Option A — Blueprint (recommended)
The repo includes render.yaml:
services:
- type: web
name: products-mcp-server
runtime: node
plan: free
buildCommand: npm install && npm run build
startCommand: npm run start:http
healthCheckPath: /healthzPush this folder to a Git repo.
In Render: New → Blueprint, select the repo. Render reads
render.yamland creates the web service.Deploy. Your endpoint will be:
https://<your-service>.onrender.com/mcpOption B — Manual web service
New → Web Service → connect the repo, then set:
Runtime: Node
Build Command:
npm install && npm run buildStart Command:
npm run start:httpHealth Check Path:
/healthz
Connect a client to the Render server
{
"mcpServers": {
"products": { "url": "https://<your-service>.onrender.com/mcp" }
}
}For stdio-only clients, bridge with mcp-remote:
{
"mcpServers": {
"products": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://<your-service>.onrender.com/mcp"]
}
}
}Notes
The server binds to
process.env.PORT(Render sets this automatically). The MCP path defaults to/mcpand can be overridden with theMCP_PATHenv var.Render's free web services sleep after inactivity; the first request after idle may be slow to wake.
The deployed URL is public — add authentication before exposing sensitive tools.
Deploy to Vercel
The api/mcp.ts function serves the MCP server over Streamable HTTP in stateless mode (a fresh server per request — no Redis required).
Push this folder to a Git repo and import it in Vercel (or run
npx vercel).Vercel compiles
api/mcp.tsautomatically; no build step is required for the function.After deploy, your endpoint is:
https://<your-project>.vercel.app/api/mcpConnect a client to the deployed server
If the client supports Streamable HTTP (e.g. recent Cursor):
{
"mcpServers": {
"products": { "url": "https://<your-project>.vercel.app/api/mcp" }
}
}For stdio-only clients, bridge with mcp-remote:
{
"mcpServers": {
"products": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://<your-project>.vercel.app/api/mcp"]
}
}
}Notes & limits
Stateless: each request is self-contained. If you later need SSE streaming / persistent sessions across instances, add Upstash Redis and enable Vercel Fluid Compute.
Timeout:
vercel.jsonsetsmaxDuration: 60; each tool also has a 10s upstream-fetch abort guard.Auth: the deployed URL is public. Add authentication before exposing sensitive tools.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/KirillSerchenko/mcp-custom-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server