8.6 KiB
API coverage
Catalog baseline: Grocy 4.7.1. All remote operations use the enrolled /api prefix, including files and diagnostics. Record fields are a reviewed factual catalog derived from that version's schema; new server fields require a catalog update.
Household records cover products/barcodes/groups, locations, units/conversions, shopping lists/items/stores, recipes/ingredients/nesting, meal plans/sections, chores, tasks/categories, batteries, equipment and custom fields/entities/objects. Supported history and stock views are read-only.
Account mutation, API keys, sessions, permissions, configuration secrets, public sharing links, external lookup and printing are excluded. Stock-unit changes require a positive unambiguous Grocy conversion. Grocy 4.7.1's database cascade rescales stock and related records; its API result is read back. These preflight checks do not prevent simultaneous edits by other clients.
Source: Grocy API specification.
Household entity inventory
Use records_describe for required creation fields, then records_list/records_lookup to find explicit IDs. records_create, records_update and records_delete are limited to editable entities. userfields_get/userfields_update read/change defined household values. For a custom object use entity: userobjects and its object ID; the MCP resolves its custom entity from the stored definition. Define its fields against userentity-<name> after creating that household entity. Account custom-field definitions are filtered from reads and cannot be mutated. For stock batch values, pass the numeric entry row ID plus an exact stock_transaction_id from a purchase/inventory-correction/entry-edit receipt or history. Grocy inserts these fields via transactions; reads resolve the batch ID automatically. A transaction spanning other batch IDs is refused.
| Entity | Access |
|---|---|
products |
Read/create/update/delete |
chores |
Read/create/update/delete |
product_barcodes |
Read/create/update/delete |
batteries |
Read/create/update/delete |
locations |
Read/create/update/delete |
quantity_units |
Read/create/update/delete |
quantity_unit_conversions |
Read/create/update/delete |
shopping_list |
Read/create/update/delete |
shopping_lists |
Read/create/update/delete |
shopping_locations |
Read/create/update/delete |
recipes |
Read/create/update/delete |
recipes_pos |
Read/create/update/delete |
recipes_nestings |
Read/create/update/delete |
tasks |
Read/create/update/delete |
task_categories |
Read/create/update/delete |
product_groups |
Read/create/update/delete |
equipment |
Read/create/update/delete |
userfields |
Read/create/update/delete |
userentities |
Read/create/update/delete |
userobjects |
Read/create/update/delete |
meal_plan |
Read/create/update/delete |
stock_log |
Read only |
stock |
Read only |
stock_current_locations |
Read only |
chores_log |
Read only |
meal_plan_sections |
Read/create/update/delete |
products_last_purchased |
Read only |
products_average_price |
Read only |
quantity_unit_conversions_resolved |
Read only |
recipes_pos_resolved |
Read only |
battery_charge_cycles |
Read only |
product_barcodes_view |
Read only |
uihelper_shopping_list |
Read only |
Named upstream operations
All routes below are relative to the enrolled API base. Local descriptions/validation and credential loading do not make HTTP requests. Generic record tools use /objects/{entity} or /objects/{entity}/{id}; custom values use /userfields/{entity}/{id}. An unavailable server route/record returns NOT_FOUND, rejected inputs/permissions return sanitized errors, and an interrupted mutation can return UNKNOWN_WRITE_OUTCOME.
| Tool | Method | API route |
|---|---|---|
database_changed_time |
GET | /system/db-changed-time |
server_time |
GET | /system/time |
stock_list |
GET | /stock |
stock_entry |
GET | /stock/entry/{entryId} |
stock_entry_put |
PUT | /stock/entry/{entryId} |
stock_volatile |
GET | /stock/volatile |
stock_product |
GET | /stock/products/{productId} |
stock_locations |
GET | /stock/products/{productId}/locations |
stock_entries |
GET | /stock/products/{productId}/entries |
stock_price_history |
GET | /stock/products/{productId}/price-history |
stock_add |
POST | /stock/products/{productId}/add |
stock_consume |
POST | /stock/products/{productId}/consume |
stock_transfer |
POST | /stock/products/{productId}/transfer |
stock_inventory |
POST | /stock/products/{productId}/inventory |
stock_open |
POST | /stock/products/{productId}/open |
stock_copy |
POST | /stock/products/{productId}/copy |
stock_merge |
POST | /stock/products/{productIdToKeep}/merge/{productIdToRemove} |
stock_product_by_barcode |
GET | /stock/products/by-barcode/{barcode} |
stock_add_by_barcode |
POST | /stock/products/by-barcode/{barcode}/add |
stock_consume_by_barcode |
POST | /stock/products/by-barcode/{barcode}/consume |
stock_transfer_by_barcode |
POST | /stock/products/by-barcode/{barcode}/transfer |
stock_inventory_by_barcode |
POST | /stock/products/by-barcode/{barcode}/inventory |
stock_open_by_barcode |
POST | /stock/products/by-barcode/{barcode}/open |
stock_location_entries |
GET | /stock/locations/{locationId}/entries |
shopping_add_missing_products |
POST | /stock/shoppinglist/add-missing-products |
shopping_add_overdue_products |
POST | /stock/shoppinglist/add-overdue-products |
shopping_add_expired_products |
POST | /stock/shoppinglist/add-expired-products |
shopping_clear |
POST | /stock/shoppinglist/clear |
shopping_add_product |
POST | /stock/shoppinglist/add-product |
shopping_remove_product |
POST | /stock/shoppinglist/remove-product |
stock_booking |
GET | /stock/bookings/{bookingId} |
stock_undo_booking |
POST | /stock/bookings/{bookingId}/undo |
stock_transaction |
GET | /stock/transactions/{transactionId} |
stock_undo_transaction |
POST | /stock/transactions/{transactionId}/undo |
recipe_add_not_fulfilled_products_to_shoppinglist |
POST | /recipes/{recipeId}/add-not-fulfilled-products-to-shoppinglist |
recipe_fulfillment |
GET | /recipes/{recipeId}/fulfillment |
recipe_consume |
POST | /recipes/{recipeId}/consume |
recipes_fulfillment |
GET | /recipes/fulfillment |
recipe_copy |
POST | /recipes/{recipeId}/copy |
chores_list |
GET | /chores |
chore_details |
GET | /chores/{choreId} |
chore_execute |
POST | /chores/{choreId}/execute |
chore_undo_execution |
POST | /chores/executions/{executionId}/undo |
chores_recalculate_assignments |
POST | /chores/executions/calculate-next-assignments |
chore_merge |
POST | /chores/{choreIdToKeep}/merge/{choreIdToRemove} |
batteries_list |
GET | /batteries |
battery_details |
GET | /batteries/{batteryId} |
battery_charge |
POST | /batteries/{batteryId}/charge |
battery_undo_charge |
POST | /batteries/charge-cycles/{chargeCycleId}/undo |
tasks_list |
GET | /tasks |
task_complete |
POST | /tasks/{taskId}/complete |
task_undo |
POST | /tasks/{taskId}/undo |
file_get / file_upload / file_delete |
GET / PUT / DELETE | /files/{group}/{base64Filename} |
calendar_export |
GET | /calendar/ical |
shopping_export |
GET | /objects/shopping_list (filter explicit list ID) |
assignment_users |
GET | /users (return only IDs/display names) |
File groups: equipmentmanuals, recipepictures, productpictures, userfiles; avatars are excluded. Stock log/history views remain read-only, while supported booking/transaction undo has named action tools. Recipe-derived shopping additions use Grocy's API default list; the endpoint has no explicit list selector. This server does not invent one.
Explicit exclusions
No arbitrary API request tool. No system configuration/user-settings secrets, API-key/session/permission administration, user/account mutation, public sharing-link routes, barcode external lookup, printer/webhook endpoints or attachments outside /api. Assignment labels are the only account projection. Server-configured hooks can still run as part of Grocy's own household policies.
The catalog covers the reviewed household API surface, not undocumented plugins, server internals, database maintenance, filesystem or orphan-file enumeration. The Docker contract exercises a meaningful scenario per domain; it does not claim every possible parameter combination or server-version behavior has been tested.