MCP Servers

A collection of Model Context Protocol servers, templates, tools and more.

MCP server by zavora-ai

Created 5/27/2026
Updated about 5 hours ago
Repository documentation and setup instructions

Inventory & Warehouse MCP Server

Crates.io Docs.rs License ADK-Rust Enterprise Registry Ready

Complete inventory and warehouse management for ADK-Rust Enterprise agents. Provides 38 MCP tools covering the full warehouse lifecycle — stock management, serialized tracking, RFID, QR codes, pick/pack/ship, wave planning, putaway, cycle counts, BOM, and space utilization. Zero configuration, no external dependencies.

Architecture

┌─────────────────────────────────────────────────────────────────────────┐
│                        mcp-inventory (38 tools)                          │
├────────────┬────────────┬────────────┬────────────┬─────────────────────┤
│  Catalog   │   Stock    │  Warehouse │ Serialized │   Identification    │
│  & BOM     │ Movements  │    Ops     │  Tracking  │   & Labeling        │
├────────────┼────────────┼────────────┼────────────┼─────────────────────┤
│ Items      │ Receive    │ Pick/Pack  │ Serial Reg │ Barcode (Code128)   │
│ Locations  │ Issue      │ Ship       │ Serial Move│ QR Codes            │
│ BOM        │ Transfer   │ Waves      │ Chain of   │ RFID (EPC)          │
│ Reorder    │ Adjust     │ Putaway    │ Custody    │ Batch Labels        │
│            │ Reserve    │ Cycle Count│ Location   │                     │
│            │            │ Space Mgmt │ Scan       │                     │
└────────────┴────────────┴────────────┴────────────┴─────────────────────┘

Key Principles

  • Full lifecycle — from goods receipt through storage, picking, packing, shipping, and returns.
  • Serialized tracking — individual unit tracking with full chain of custody history.
  • RFID-ready — register tags, process bulk reader scans, detect missing inventory.
  • QR code generation — encode serial, SKU, location, and shipment data for mobile scanning.
  • Space-aware — locations have capacity limits (units, weight, volume) with utilization reporting.
  • Wave planning — batch multiple pick orders for efficient warehouse operations.
  • Zero configuration — starts immediately with no external dependencies or API keys.

Tools (38)

Item Catalog

| Tool | Description | Annotations | |------|-------------|:-----------:| | item_upsert | Add/update item (SKU, name, category, unit, reorder point, cost) | write | | item_list | List all items in catalog | read-only |

Locations & Space

| Tool | Description | Annotations | |------|-------------|:-----------:| | location_create | Create warehouse/zone/aisle/rack/bin with capacity limits | write | | location_list | List all locations | read-only | | space_utilization | Capacity vs used report (units, weight, volume) | read-only |

Stock Movements

| Tool | Description | Annotations | |------|-------------|:-----------:| | stock_receive | Receive goods into location (from supplier, production, return) | write | | stock_issue | Issue stock from location (sales, consumption, dispatch) | write | | stock_transfer | Transfer between locations | write | | stock_adjust | Adjust quantity (cycle count correction, damage write-off) | write (approval) | | stock_check | Check stock level (total, reserved, available) | read-only | | reorder_alerts | Items below reorder point with suggested order quantities | read-only | | movement_history | Full movement audit trail for a SKU | read-only |

Reservations

| Tool | Description | Annotations | |------|-------------|:-----------:| | stock_reserve | Reserve stock for an order (prevents overselling) | write | | stock_release | Release a reservation (cancel, expiry) | write |

Bill of Materials

| Tool | Description | Annotations | |------|-------------|:-----------:| | bom_set | Define components needed to build a parent item | write | | bom_check | Check if enough components are available to build N units | read-only |

Pick / Pack / Ship

| Tool | Description | Annotations | |------|-------------|:-----------:| | pick_create | Create pick order with line items and location allocation | write | | pick_confirm | Confirm picked quantities (detect shorts) | write | | pick_ship | Mark as shipped (issues stock from locations) | write | | pick_list | List all pick orders | read-only |

Wave Planning

| Tool | Description | Annotations | |------|-------------|:-----------:| | wave_create | Batch multiple pick orders into a wave | write | | wave_release | Release wave (moves all picks to "picking" status) | write | | wave_complete | Mark wave as completed | write | | wave_list | List all waves | read-only |

Putaway

| Tool | Description | Annotations | |------|-------------|:-----------:| | putaway_rule_create | Define preferred location by item category | write | | putaway_suggest | Suggest optimal bin for an item based on rules and space | read-only |

Cycle Counts

| Tool | Description | Annotations | |------|-------------|:-----------:| | cycle_count_schedule | Schedule a count for a location | write | | cycle_count_complete | Submit actual counts, auto-detects discrepancies | write |

Serialized Warehousing

| Tool | Description | Annotations | |------|-------------|:-----------:| | serial_register | Register individual unit (serial number, lot, RFID, auto-QR) | write | | serial_move | Move serialized item (full chain of custody) | write | | serial_lookup | Look up serial — full history, location, status | read-only | | serial_scan_location | List all serialized items at a location | read-only |

RFID

| Tool | Description | Annotations | |------|-------------|:-----------:| | rfid_register | Register RFID EPC tag, link to serial/SKU | write | | rfid_bulk_read | Process reader scan — found, unknown, and missing detection | write | | rfid_lookup | Look up tag by EPC | read-only |

QR Codes & Labels

| Tool | Description | Annotations | |------|-------------|:-----------:| | qr_generate | Generate QR payload for serial/SKU/location/shipment | write | | label_generate | Generate barcode label (code128, EAN-13, QR, DataMatrix) | write | | label_batch | Batch generate labels for multiple entities | write |

Installation

From crates.io

cargo install mcp-inventory

Build from source

git clone https://github.com/zavora-ai/mcp-inventory
cd mcp-inventory
cargo build --release

Claude Desktop

{
  "mcpServers": {
    "inventory": { "command": "mcp-inventory" }
  }
}

Kiro

Add to .kiro/settings/mcp.json:

{
  "mcpServers": {
    "inventory": { "command": "mcp-inventory" }
  }
}

Cursor / Windsurf / Codex

{
  "mcpServers": {
    "inventory": { "command": "mcp-inventory" }
  }
}

Quick Start

1. Add items and locations

{"name": "item_upsert", "arguments": {"sku": "LAPTOP-PRO", "name": "Laptop Pro 16\"", "category": "electronics", "unit": "each", "reorder_point": 20, "reorder_qty": 100, "cost": 850, "currency": "USD"}}
{"name": "location_create", "arguments": {"name": "Warehouse A - Bin A3-07", "location_type": "bin", "capacity_units": 50, "capacity_weight_kg": 500}}

2. Receive stock

{"name": "stock_receive", "arguments": {"sku": "LAPTOP-PRO", "quantity": 30, "location_id": "loc_abc123", "actor": "receiving_clerk", "reference": "PO-2026-0142", "lot_number": "LOT-2026Q2"}}

3. Register serialized items with RFID

{"name": "serial_register", "arguments": {"serial_number": "SN-2026-00142", "sku": "LAPTOP-PRO", "location_id": "loc_abc123", "lot_number": "LOT-2026Q2", "rfid_tag": "E200001234567890"}}

Response:

{"status": "registered", "serial_number": "SN-2026-00142", "qr_code": "QR:SN=SN-2026-00142&SKU=LAPTOP-PRO&LOC=loc_abc123"}

4. Create pick order and wave

{"name": "pick_create", "arguments": {"order_reference": "ORD-8821", "items": [{"sku": "LAPTOP-PRO", "quantity": 2, "location_id": "loc_abc123"}], "default_location": "loc_abc123", "assigned_to": "picker_john"}}
{"name": "wave_create", "arguments": {"name": "Morning Wave", "pick_ids": ["pick_abc", "pick_def", "pick_ghi"], "priority": "high"}}

5. RFID bulk scan (detect missing inventory)

{"name": "rfid_bulk_read", "arguments": {"location_id": "loc_abc123", "epcs": ["E200001234567890", "E200009999999999"]}}

Response:

{"location_id": "loc_abc123", "scanned": 2, "found": 1, "unknown": 1, "missing": 0, "found_tags": [{"epc": "E200001234567890", "serial": "SN-2026-00142"}], "unknown_epcs": ["E200009999999999"], "missing_tags": []}

6. Track serialized item movement

{"name": "serial_move", "arguments": {"serial_number": "SN-2026-00142", "to_location": "STAGING-DOCK-1", "actor": "picker_john", "event_type": "picked", "reference": "ORD-8821"}}

7. Generate QR code for shipping label

{"name": "qr_generate", "arguments": {"entity_type": "serial", "entity_id": "SN-2026-00142", "extra_data": {"order": "ORD-8821", "destination": "Customer XYZ"}}}

Location Hierarchy

Warehouse A (warehouse)
├── Zone 1 - Electronics (zone)
│   ├── Aisle A (aisle)
│   │   ├── Rack A1 (rack)
│   │   │   ├── Bin A1-01 (bin) [capacity: 100 units, 200kg]
│   │   │   ├── Bin A1-02 (bin) [capacity: 100 units, 200kg]
│   │   │   └── ...
│   │   └── Rack A2 (rack)
│   └── Aisle B (aisle)
├── Zone 2 - Bulk Storage (zone)
├── Staging Area (staging)
└── Dock 1 (dock)

Serialized Item Lifecycle

serial_register → in_stock
    │
    ├── serial_move (event: "picked") → in_stock (at staging)
    │       │
    │       ├── serial_move (event: "shipped") → shipped
    │       │       │
    │       │       └── serial_move (event: "returned") → in_stock
    │       │
    │       └── serial_move (event: "scrapped") → scrapped
    │
    └── rfid_bulk_read → detect if missing from expected location

RFID Operations

| Operation | What happens | |-----------|-------------| | rfid_register | Link EPC to serial/SKU, set initial location | | rfid_bulk_read | Reader scans area → server compares against expected tags | | Found | Tag is at expected location — update last_read_at | | Unknown | Tag not in system — flag for investigation | | Missing | Tag expected but not scanned — potential theft/misplacement |

Barcode Formats

| Format | Use Case | Example Value | |--------|----------|---------------| | code128 | General purpose, high density | SKU-LAPTOP-PRO | | ean13 | Retail products | 5901234123457 | | qr | Mobile scanning, rich data | SN=X&SKU=Y&LOC=Z | | datamatrix | Small items, PCBs | Compact binary | | rfid_epc | RFID tags (96-bit) | E200001234567890 |

Stock Movement Types

| Type | From | To | Use Case | |------|------|-----|----------| | receive | — | Location | Goods receipt from supplier | | issue | Location | — | Sales, consumption, dispatch | | transfer | Location A | Location B | Internal movement | | adjust | — | — | Cycle count correction, write-off |

Configuration

Environment Variables

| Variable | Required | Purpose | |----------|:--------:|---------| | RUST_LOG | No | Log level (default: info) |

No API keys or external services needed. All data is stored in-memory.

MCP Server Manifest

server_id = "mcp_inventory"
display_name = "Inventory"
version = "1.3.0"
domain = "inventory"
risk_level = "medium"
writes_allowed = "gated"
governance_gates = ["stock_movement_audit"]

Use Cases

Manufacturing

bom_set (define components for finished goods)
stock_receive (raw materials from supplier)
bom_check (can we build 100 units?)
stock_issue (consume components)
serial_register (each finished unit gets serial + RFID)

E-Commerce Fulfillment

stock_receive (bulk from supplier)
stock_reserve (customer places order)
pick_create → wave_create → wave_release (batch fulfillment)
pick_confirm → pick_ship (dispatch)
serial_move (event: "shipped", reference: order_id)

Pharmaceutical / Regulated

serial_register (each unit serialized per regulation)
rfid_register (cold chain monitoring)
serial_move (full chain of custody for audit)
cycle_count_schedule → cycle_count_complete (regulatory compliance)
qr_generate (patient-facing verification)

Retail / Multi-Store

location_create (store_1, store_2, warehouse)
stock_transfer (warehouse → store)
reorder_alerts (per-location thresholds)
rfid_bulk_read (daily inventory verification)
space_utilization (optimize shelf allocation)

Error Codes

| Code | Meaning | |------|---------| | INSUFFICIENT_STOCK | Not enough available stock for operation | | SERIAL_NOT_FOUND | Serial number not registered | | RFID_NOT_FOUND | EPC tag not in system | | PICK_NOT_FOUND | Pick order ID doesn't exist | | WAVE_NOT_FOUND | Wave ID doesn't exist | | BOM_NOT_FOUND | No BOM defined for parent SKU | | RESERVATION_NOT_FOUND | Reservation ID doesn't exist | | CYCLE_COUNT_NOT_FOUND | Cycle count ID doesn't exist |

Documentation

| Document | Description | |----------|-------------| | mcp-server.toml | ADK-Rust Enterprise registry manifest | | CHANGELOG.md | Version history | | Rust Docs | Generated API documentation |

Contributing

Contributions welcome. Priority areas:

  • Persistent storage backend (PostgreSQL/SQLite)
  • Expiry date management (FEFO picking)
  • Multi-warehouse transfer orders
  • Inventory valuation (FIFO, LIFO, weighted average)
  • Integration with mcp-logistics for shipping
  • Barcode image generation (SVG/PNG)

Contributors

| jkmaina - MCP Inventory by zavora-ai
James Karanja Maina
| |:---:|

License

Apache-2.0 — see LICENSE for details.


Part of the ADK-Rust Enterprise MCP server ecosystem.

Built with ❤️ by Zavora AI

Registry Compliance

This server implements the ADK MCP SDK contract:

  • HealthCheck — async health probe for registry monitoring
  • mcp-server.toml — manifest declaring tools, risk classes, and credentials
  • Structured tracingRUST_LOG env-filter for observability
  • Audit trail — every stock movement logged with actor, timestamp, and reference
Quick Setup
Installation guide for this server

Installation Command (package not published)

git clone https://github.com/zavora-ai/mcp-inventory
Manual Installation: Please check the README for detailed setup instructions and any additional dependencies required.

Cursor configuration (mcp.json)

{ "mcpServers": { "zavora-ai-mcp-inventory": { "command": "git", "args": [ "clone", "https://github.com/zavora-ai/mcp-inventory" ] } } }