Skip to main content
Glama
README.md
# MCP Inflow Ingredients

An MCP (Model Context Protocol) server that enables AI assistants to interact with Inflow Inventory API, allowing them to manage ingredients/products and inventory programmatically.

## Features

### Product/Ingredient Management
- **List Ingredients**: Search and filter products with smart search
- **Get Ingredient Details**: Retrieve full information about specific products
- **Get Inventory Summary**: View quantities (on hand, available, reserved, etc.)
- **Search Ingredients**: Full-text search across name, description, SKU, barcode
- **Create Ingredient**: Add new products to inventory
- **Update Ingredient**: Modify existing product information

### Inventory Management
- **Create Stock Adjustment**: Adjust inventory quantities for products
- **List Stock Adjustments**: View adjustment history
- **Get Stock Adjustment**: Retrieve details of specific adjustments

## Setup

### Prerequisites

- Node.js 18+ installed
- Inflow Inventory account with API access
- Inflow API key and Company ID

### Installation

1. Navigate to the project directory:
```bash
cd ~/mcp-inflow-ingredients
```

2. Install dependencies:
```bash
npm install
```

3. Configure environment variables:
```bash
cp .env.example .env
# Edit .env with your Inflow API credentials
```

Required environment variables:
- `INFLOW_API_KEY`: Your Inflow API key
- `INFLOW_COMPANY_ID`: Your Inflow company ID
- `INFLOW_API_URL`: API base URL (default: https://cloudapi.inflowinventory.com)
- `INFLOW_API_VERSION`: API version (default: 2025-06-24)

### Test Connection

Verify your Inflow API connection:
```bash
npm run test:connection
```

This will test basic API connectivity and list products.

## MCP Server Usage

### Running the Server

Start the MCP server:
```bash
npm start
```

For development with auto-reload:
```bash
npm run dev
```

### Available Tools

#### Product/Ingredient Tools

**`list_ingredients`**
- List all products with optional filters
- Parameters: name, description, isActive, barcode, smart, include, limit

**`get_ingredient`**
- Get detailed information about a specific product
- Parameters: productId (required), include

**`get_inventory_summary`**
- Get inventory summary with quantities
- Parameters: productId (required)

**`search_ingredients`**
- Search products using full-text search
- Parameters: query (required), limit, include

**`create_ingredient`**
- Create a new product
- Parameters: productId (UUID, required), name (required), sku, description, isActive, additionalFields

**`update_ingredient`**
- Update an existing product
- Parameters: productId (required), name, sku, description, isActive, additionalFields

#### Inventory Tools

**`create_stock_adjustment`**
- Create a stock adjustment to modify inventory
- Parameters: stockAdjustmentId (UUID, required), locationId (required), lines (array, required), adjustmentReasonId, notes, adjustmentDate

**`list_stock_adjustments`**
- List stock adjustments
- Parameters: adjustmentNumber, include, limit

**`get_stock_adjustment`**
- Get details of a specific adjustment
- Parameters: stockAdjustmentId (required), include

## Project Structure

```
mcp-inflow-ingredients/
├── index.js                    # Main MCP server entry point
├── types.ts                    # TypeScript definitions for JSDoc
├── package.json                # Node.js dependencies and scripts
├── .env                        # Environment variables (not in git)
├── .env.example                # Environment template
├── .mcp.json                   # MCP server configuration
├── src/
│   ├── inflow-client.js       # Inflow API client
│   └── handlers/
│       ├── product-handlers.js   # Product operations
│       └── inventory-handlers.js # Inventory operations
├── tests/
│   └── test-connection.js     # API connection test
└── docs/
    └── swagger.json           # Inflow API documentation
```

## Development

### Type Safety

This project uses JSDoc with TypeScript type definitions for type safety without a build step. Types are defined in `types.ts` and imported via JSDoc comments.

### Testing

Run the connection test:
```bash
npm run test:connection
```

### Scripts

- `npm start` - Start the MCP server
- `npm run dev` - Development mode with auto-reload
- `npm run test:connection` - Test Inflow API connection

## Inflow API Resources

- [Inflow API Documentation](https://cloudapi.inflowinventory.com/)
- [API Support](mailto:support@inflowinventory.com)

## License

MIT

TDQS

B3.4/5.0

Scored across 9 tools

Disambiguation5/5

Every tool has a clearly distinct purpose with no ambiguity. For example, create_ingredient, get_ingredient, update_ingredient, and list_ingredients each handle different CRUD operations for ingredients, while stock adjustment tools focus on inventory modifications. The separation between ingredient management and stock adjustments is well-defined, preventing misselection.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case, such as create_ingredient, get_inventory_summary, and list_stock_adjustments. This uniformity makes the tools predictable and easy to understand, with no deviations in naming conventions across the set.

Tool Count5/5

With 9 tools, the count is well-scoped for inventory and ingredient management. Each tool serves a specific function, such as CRUD operations for ingredients and stock adjustments, without redundancy. This number is appropriate for the domain, providing comprehensive coverage without being overwhelming.

Completeness4/5

The tool set offers strong coverage for ingredient and inventory management, including create, read, update, list, and search operations, as well as stock adjustments. A minor gap exists in the lack of an update_stock_adjustment tool, which could limit flexibility in modifying adjustments, but agents can work around this by creating new adjustments.