fridge-mcp
# fridge-mcp
MCP-сервер: что лежит в холодильнике.
## Возможности
| Тип | Имя | Описание |
| --- | --- | --- |
| tool | `list_fridge` | Показать всё содержимое |
| tool | `add_to_fridge` | Положить продукт |
| tool | `remove_from_fridge` | Взять / съесть / выкинуть |
| tool | `check_fridge_item` | Проверить конкретный продукт |
| tool | `expiring_soon` | Что скоро испортится |
| resource | `fridge://contents` | JSON всего холодильника |
| prompt | `whats_for_dinner` | Идея ужина из того, что есть |
Данные: `data/fridge.json` (или `FRIDGE_DATA_PATH`).
## Локально
```bash
npm install
npm run build
```
### Stdio (Cursor / Claude Desktop)
```json
{
"mcpServers": {
"fridge": {
"command": "node",
"args": ["/absolute/path/to/fridge-mcp/dist/index.js", "--stdio"]
}
}
}
```
### HTTP (локально)
```bash
npm run start:http
```
- Health: `GET http://localhost:3000/`
- MCP: `POST http://localhost:3000/mcp`
## Render
В Web Service:
| Поле | Значение |
| --- | --- |
| Build Command | `npm install && npm run build` |
| Start Command | `node ./dist/index.js` |
| Instance | Free ок |
`PORT` Render выставит сам — сервер поднимет HTTP автоматически.
После деплоя отдай разработчику:
```
URL: https://<твой-сервис>.onrender.com/mcp
Token: <значение MCP_ACCESS_TOKEN>
Header: Authorization: Bearer <token>
```
В Render → Environment добавь:
```
MCP_ACCESS_TOKEN=твой_секретный_токен
```
Клиент (пример):
```ts
new StreamableHTTPClientTransport(new URL("https://....onrender.com/mcp"), {
requestInit: {
headers: { Authorization: `Bearer ${token}` },
},
});
```
Клиент должен говорить по **Streamable HTTP MCP**, не по обычному REST.
На Free инстанс засыпает без трафика; диск не персистентный — правки холодильника могут сброситься после рестарта.
TDQS
Scored across 5 tools
Each tool performs a distinct operation: listing all items, adding, removing, checking existence, and getting expiring items. There is no meaningful overlap between them, and even the similar list/check pair is clearly differentiated by scope.
All tool names use consistent snake_case with clear verb-first patterns (list_, add_, remove_, check_) plus the query-style expiring_soon. The naming style is uniform and predictable.
With 5 tools, the server is well-scoped for a fridge inventory domain. Each tool serves a core need without bloat, making the set easy to navigate and use.
The set covers the main lifecycle: add (create), list/check/expiring (read), and remove (delete). The only notable gap is the lack of an update operation for product details like expiration date, which can be worked around by re-adding.