Metadata-Version: 2.4
Name: hermes-grocy-mcp
Version: 0.2.1
Summary: MCP server for Grocy household ERP inventory and shopping workflows
Author: Hermes Agent
License-Expression: MIT
License-File: LICENSE
Keywords: grocy,inventory,mcp,model-context-protocol,shopping-list
Requires-Python: >=3.11
Requires-Dist: httpx>=0.27.0
Requires-Dist: mcp>=1.2.0
Requires-Dist: pydantic>=2.0.0
Provides-Extra: dev
Requires-Dist: mypy>=1.10.0; extra == 'dev'
Requires-Dist: pytest-cov>=5.0.0; extra == 'dev'
Requires-Dist: pytest>=8.0.0; extra == 'dev'
Requires-Dist: respx>=0.21.0; extra == 'dev'
Requires-Dist: ruff>=0.8.0; extra == 'dev'
Description-Content-Type: text/markdown

# Grocy MCP

<!-- mcp-name: io.github.rusty4444/hermes-grocy-mcp -->

A Model Context Protocol (MCP) server for [Grocy](https://grocy.info/), the self-hosted household ERP for groceries, inventory, chores, batteries, recipes, tasks, and shopping lists.

This server focuses on AI-friendly household operations that are awkward through generic REST clients:

- Inspect Grocy system/version status
- List, search, and inspect products
- Read current stock, volatile stock, product stock details, and individual stock entries
- List current shopping list items and add/remove products from shopping lists
- Look up products by barcode/Grocycode
- List and inspect any `/api/objects/{entity}` entity
- Create/update generic entity objects from JSON
- Add, consume, and inventory product stock
- Add/remove product amounts from shopping lists

## Why this exists

Grocy has a strong REST API, but MCP coverage is sparse and usually either incomplete or tightly coupled to one client's workflow. This package gives Hermes, Claude Desktop, Cursor, and other MCP clients a small, explicit, documented tool surface.

## Installation

```bash
pipx install git+https://github.com/rusty4444/grocy-mcp.git
```

Or from a checkout:

```bash
python -m venv .venv
source .venv/bin/activate
pip install -e .
```

## Configuration

The server reads configuration from environment variables:

| Variable | Required | Default | Description |
|---|---:|---|---|
| `GROCY_BASE_URL` | No | `https://demo.grocy.info` | Grocy base URL, with or without `/api` |
| `GROCY_API_KEY` | No for public/demo read-only instances, yes for private/write access | unset | Grocy API key sent as `GROCY-API-KEY` |
| `GROCY_TIMEOUT` | No | `20` | HTTP timeout in seconds |

Grocy API keys are managed in Grocy under **Manage API keys**. The API accepts the `GROCY-API-KEY` header.

## MCP client config

```json
{
  "mcpServers": {
    "grocy": {
      "command": "grocy-mcp",
      "env": {
        "GROCY_BASE_URL": "https://grocy.example.com",
        "GROCY_API_KEY": "your-api-key"
      }
    }
  }
}
```

## Tools

| Tool | Purpose |
|---|---|
| `grocy_system_info` | Grocy version and runtime details |
| `grocy_list_products` | List configured products |
| `grocy_search_products` | Search products by name/description |
| `grocy_get_product` | Fetch one product object |
| `grocy_lookup_product_by_barcode` | Resolve a barcode/Grocycode |
| `grocy_stock_overview` | Current stock rows |
| `grocy_volatile_stock` | Due, overdue, expired, or missing products |
| `grocy_product_stock_details` | Detailed stock state for one product |
| `grocy_product_stock_entries` | Individual stock entries in next-use order |
| `grocy_common_entities` | Common generic entity names useful with CRUD tools |
| `grocy_list_shopping_lists` | Configured shopping lists |
| `grocy_list_shopping_list_items` | Current shopping list rows, optionally filtered by list id |
| `grocy_list_entity` | List any generic Grocy entity |
| `grocy_get_entity_object` | Fetch any generic entity object |
| `grocy_create_entity_object` | POST a generic entity object from JSON |
| `grocy_update_entity_object` | PUT a generic entity object from JSON |
| `grocy_add_stock` | Add product amount to stock |
| `grocy_consume_stock` | Consume/remove product amount from stock |
| `grocy_inventory_product` | Set product inventory amount |
| `grocy_add_product_to_shopping_list` | Add a product to a shopping list |
| `grocy_remove_product_from_shopping_list` | Remove a product from a shopping list |

## Development and validation

```bash
python -m venv .venv
source .venv/bin/activate
pip install -e '.[dev]'
ruff check .
pytest
python scripts/live_readonly_test.py
```

The live read-only test defaults to `https://demo.grocy.info`, avoiding mutations on shared infrastructure. It has been validated against Grocy API 4.6.0. Use a private Grocy instance plus `GROCY_API_KEY` for write-path testing.

## Safety

Write-capable tools directly mutate Grocy data. Prefer read-only tools when using public demos. Keep `GROCY_API_KEY` in MCP client environment config or a secret manager, never in source control.
