Products Server
БесплатноНе проверенExposes 27 product tools (CRUD, search, stats, recommendations) backed by fakestoreapi.com, deployable via stdio, HTTP, or serverless.
Описание
Exposes 27 product tools (CRUD, search, stats, recommendations) backed by fakestoreapi.com, deployable via stdio, HTTP, or serverless.
README
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 config
All entry points call createServer(), so the tool set stays identical across transports.
Tools
| # | Tool | Description |
|---|---|---|
| 1 | getProducts |
All products (optional limit, sort). |
| 2 | getProductById |
One product by id. |
| 3 | getCategories |
List of categories. |
| 4 | getProductsByCategory |
Products in a category (optional limit). |
| 5 | searchProducts |
Keyword search over title + description. |
| 6 | getProductsByPriceRange |
Products within [min, max]. |
| 7 | getProductsAbovePrice |
Products costing more than price. |
| 8 | getProductsBelowPrice |
Products costing less than price. |
| 9 | getCheapestProduct |
Single cheapest product. |
| 10 | getMostExpensiveProduct |
Single most expensive product. |
| 11 | getTopRatedProducts |
Sorted by rating (optional limit). |
| 12 | getMostReviewedProducts |
Sorted by review count (optional limit). |
| 13 | getProductsByMinRating |
Products with rating >= minRating. |
| 14 | getPriceStats |
count / min / max / average / median / total. |
| 15 | getCategoryStats |
Per-category price stats. |
| 16 | countProducts |
Total count (optional category). |
| 17 | listProductTitles |
Lightweight id + title list. |
| 18 | getRandomProduct |
A random product. |
| 19 | compareProducts |
Compare 2–10 products by ids. |
| 20 | getProductRecommendations |
Same-category picks for an id. |
| 21 | getDiscountedPrice |
Price after discountPercent. |
| 22 | summarizeCatalog |
High-level catalog summary. |
| 23 | getCheapestInCategory |
Cheapest within a category. |
| 24 | getHighestRatedInCategory |
Highest-rated within a category. |
| 25 | createProduct |
Create a product (simulated by the API). |
| 26 | updateProduct |
Update a product (simulated). |
| 27 | deleteProduct |
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 server
Use 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/healthz
Deploy 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: /healthz
- Push 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/mcp
Option B — Manual web service
New → Web Service → connect the repo, then set:
- Runtime: Node
- Build Command:
npm install && npm run build - Start Command:
npm run start:http - Health 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/mcp
Connect 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.
Установка Products Server
У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.
▸ github.com/KirillSerchenko/mcp-custom-serverFAQ
Products Server MCP бесплатный?
Да, Products Server MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для Products Server?
Нет, Products Server работает без API-ключей и переменных окружения.
Products Server — hosted или self-hosted?
Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.
Как установить Products Server в Claude Desktop, Claude Code или Cursor?
Открой Products Server на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
GitHub
PRs, issues, code search, CI status
автор: GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
автор: mcpdotdirectCompare Products Server with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории development
