# Linnworks MCP connector

The Linnworks connector brings stock levels, product performance, listing templates and customer email templates to Claude, ChatGPT, Cursor and the Elaichi Agent, so each person can ask about inventory and prepare listings inside their own Linnworks access.

Source: https://elaichi.ai/connectors/linnworks/

## Facts

| | |
| --- | --- |
| Application | Linnworks |
| Category | Ecommerce |
| AI tools | 397 |
| Authentication | Connects with an API key |
| Bring your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. Connected tools are never listed one by one, however few there are. The endpoint advertises `search_tools` and `execute_tool` instead |

## What you can ask once Linnworks is connected

- Which products are below their low stock level today?
- Show me the top selling products this week by location.
- Draft a back in stock email from our standard template.

## Connect Linnworks in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Linnworks.
2. Optionally set Share with, then press Connect.
3. Paste a Linnworks API key. One person generates a token in Linnworks and pastes it once. Everyone else works through Share with, and never sees it.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Linnworks tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Linnworks MCP connector for Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Linnworks MCP connector for ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Linnworks MCP connector for Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Linnworks to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a Linnworks tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Linnworks through Elaichi

### Check low stock before the morning pick

Warehouse. Ask which products have dropped below their low stock level and where each one is held, then plan the day's replenishment before pickers start.

### See stock by location without opening dashboards

Operations. Get inventory location figures, category breakdowns and product counts for each warehouse in one answer, ready to paste into the daily stand-up.

### Find the top products this week

Merchandising. Pull the top products and performance details from the Linnworks dashboards, then ask which lines are gaining and which are slipping.

### Prepare a listing template for new stock

Marketplaces. Open the listing templates for a set of inventory items, fill in the template fields and process the template so a new range is ready to go live.

### Keep channel configurators tidy

Marketplaces. Read a configurator's description and data, save corrections, and create a new configurator when a marketplace adds a category.

### Send a customer email from a template

Customer service. Find the right email template, draft an ad hoc or free text email for a delayed or back in stock order, and send it without leaving the chat.

## Frequently asked questions

### How do I connect Linnworks to Claude?

Connect Linnworks in Elaichi first: paste your Linnworks API key when prompted, and the connection is ready. There is no OAuth application to register and no client ID or secret to generate. Then open Claude, go to Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp. Claude asks you to sign in to Elaichi and Linnworks appears with everything else you have connected.

### Does Linnworks work with ChatGPT and Cursor as well as Claude?

Yes. Once Linnworks is connected in Elaichi, the same endpoint, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, any other MCP client and the Elaichi Agent. You connect Linnworks once and every client picks it up.

### What can an AI agent actually do with my Linnworks data?

It can tell you which products are below their low stock level, what stock sits in each location, which products are selling best and how performance looks over a period. It can also find email templates and send a customer email, and open, fill in and process listing templates and channel configurators. Linnworks has a lot of capabilities, so short, concrete asks such as "low stock in the Leeds warehouse" get better results than long paragraphs.

### Does connecting Linnworks give the AI access to everything in my account?

No. Every request runs as the person who signed in, using their own Linnworks permissions, so the AI sees the locations, listings and templates that person can already see. Elaichi can narrow that access further with roles and restrictions, and it can never widen it beyond what Linnworks itself allows.

### Can my team share one Linnworks connection?

Yes. One person connects Linnworks in Elaichi with the API key and shares the connection with a team, and nobody else ever handles the key. Each teammate still signs in to Elaichi as themselves, so the audit log names the actual person behind every stock check or email sent.

### Can I stop an agent from deleting or changing things in Linnworks?

Yes. Restrictions in Elaichi apply per action, so you can allow reading stock levels and top products while blocking anything that saves a template, changes a configurator or sends an email. A blocked action is never shown to Claude, ChatGPT or Cursor at all, so no prompt can reach it.

### What happens to a Linnworks connection when someone leaves?

Offboarding that person in Elaichi ends their access to Linnworks through every client at once. If they connected a shared Linnworks account, the connection keeps working for everyone else it was shared with. When you want Linnworks gone entirely, disconnecting it once in Elaichi removes it from Claude, ChatGPT, Cursor and every other client together.

### Does the Linnworks MCP connector work with Gemini, Codex, Claude Code or other MCP clients?

Yes. Linnworks is reached over the same MCP endpoint every client uses, so anything that speaks MCP can call it — Gemini, Codex, Claude Code, Windsurf, Cline, Zed and OpenCode among them — alongside Claude, ChatGPT, Cursor, and the Elaichi Agent. The tools on offer and the access behind them are identical whichever client asks. Only the setup screen differs.

## All 397 Linnworks tools

Every tool below is callable through https://api.elaichi.ai/mcp once Linnworks is connected, subject to the toolbox it is in and the restrictions on the caller.

- **Get auth get application profile by secret key by ID** (Get). Get the current linnworks application subscription profile for a specific user, typically after AuthorizeByApplication returned a session. Returns: PlanTag, PlanName, ActivationDate, LastPaymentDate, NextPaymentDate, ProfileExpires, IsProfileActive. Requires applicationId, applicationSecret, and userId (the session's Id). Returns null when the user has no current subscription.
- **Create a Linnworks auth authorize by application** (Create). Create a Linnworks session for an installed application, exchanging the developer-portal credentials for an authorization token and server. Returns: Id, EntityId, DatabaseName, DatabaseServer, PrivateDatabaseServer, DatabaseUser, DatabasePassword, AppName, sid_registration, UserName, Md5Hash, Locality, SuperAdmin, TTL, Token, AccessToken, GroupName, Device, DeviceType, UserType, Status, UserId,…
- **List all Linnworks dashboards get low stock levels** (List). Get the "Low stock in location" report from Linnworks dashboards. Returns low stock rows including ItemTitle, ItemNumber, Quantity, MinimumLevel, InBooks, and Location.
- **List all Linnworks dashboards get performance table datas** (List). Get the linnworks Performance table report data. Returns an array of report entries with Name, Price, and Currency.
- **List all Linnworks dashboards get performance details** (List). Get the linnworks "Performance through time chart" report: a dictionary of time-scale keys, each mapping to an array of performance detail points. Returns: Date, Value.
- **List all Linnworks dashboards get top products** (List). Get a report of the top ordered products in linnworks, grouped by quantity or turnover. Returns an array of product rows including RowNum, Quantity, Cost, Title, SKU, and Currency.
- **List all Linnworks dashboards get inventory location datas** (List). Get the 'Stock info for locations' dashboard report from linnworks. Returns: StockLocationId, Location, StockLevel, StockValue. Pass date for a specific report date or omit it for the current period.
- **List all dashboards get inventory location categories datas** (List). Get the Linnworks "Stock info for categories in a specific location" report for a date and location. Returns an array of per-category records with StockLocationId, CategoryName, CategoryId, StockLevel, and StockValue. Pass date to target a report date (omit for the current period) and locationId to select the stock location.
- **List all dashboards get inventory location products datas** (List). Get a paged report of stock info for products in a specific category and location in linnworks. Returns: TotalResults and Results (per product: ItemNumber, ItemTitle, StockLevel, StockValue). Omit date to report on the current period.
- **List all Linnworks email get email templates** (List). List all email header templates in linnworks. Returns each template header with pkEmailTemplateRowId, Name, TemplateType, Condition, Enabled, AccountName, and HTML/attachment flags. Takes no parameters.
- **Get single Linnworks email get email template by ID** (Get). Get the full data of a specific linnworks email template. Returns the template's pkEmailTemplateRowId, Name, Subject, Body, TemplateTypeDefinition, Condition, Enabled, and HTML/attachment flags. Required: pkEmailTemplateRowId.
- **Create a Linnworks email generate adhoc email** (Create). Generate and send a custom adhoc email in linnworks. Returns: isComplete (whether the send completed) and FailedRecipients (recipient addresses that failed). Requires a JSON request body (the adhoc email request object).
- **Create a Linnworks email generate free text email** (Create). Generate and send a custom free-text email in Linnworks. Returns: isComplete (whether the send completed) and FailedRecipients (list of failed recipients). Required: a request body matching the upstream Email_GenerateFreeTextEmailRequest schema.
- **Create a Linnworks generic listings save template field** (Create). Update the fields on a generic listing template in linnworks, such as one created with the CreateTemplates endpoint. Sends the template field data as a JSON request object and returns the template field save result object. Required: request.
- **Create a Linnworks generic listings process template** (Create). Process generic listing templates in linnworks: push templates created via the CreateTemplates endpoint to the channel, or use it to update, relist, or delete an existing template from the channel. Returns a 200 OK response object whose fields are not enumerated in the upstream reference. Required: request.
- **Create a Linnworks generic listings create template** (Create). Create generic listing templates in Linnworks based on inventory item details and configurator details; each template contains the full details of the item that will be listed on the channel. Returns: TemplatesInfo (created template objects) and AllCreatedIds (ids of the created templates). Required: request.
- **Create a Linnworks generic listings open templates by inventory** (Create). Open Generic Listing Tool templates for linnworks stock items by supplying the stock item identifiers in the request body. Returns: TotalEntries and TemplatesInfo (template details; fields vary by channel template). Requires a JSON request body identifying the inventory items.
- **Get generic listings get configurators info paged by ID** (Get). Get the existing Generic Listing Tool (GLT) configurators from linnworks, one page at a time. Returns a ConfiguratorsInfo array of configurator info objects whose fields are channel-specific. Requires a request body (paged configurator info request object).
- **Create a Linnworks generic listings save configurator field** (Create). Update the fields of a Generic Listing Tool (GLT) configurator in linnworks. Returns the save response object. Requires a JSON request body.
- **Get generic listings get configurator description by ID** (Get). Get the existing Generic Listing Tool configurator description from linnworks. Returns the Data field holding the configurator's description payload as a string. Requires a request body object.
- **Create generic listings save configurator description** (Create). Update the description of a Generic Listing Tool (GLT) configurator in linnworks. Returns: IsSaved, ErrorMessage. Requires a JSON request body identifying the configurator and its new description.
- **Get generic listings get configurator data by ID** (Get). Get the existing Generic Listing Tool (GLT) configurator data in linnworks. Returns: Data. Requires a request body (the request object is mandatory); the method takes no query parameters.
- **Create a Linnworks generic listings save configurator data** (Create). Update a Generic Listing Tool configurator's data (its attributes) in Linnworks. Returns: IsSaved, ValidationResults. Requires a JSON request body with the configurator's data; the body is required.
- **Create a Linnworks generic listings create configurator** (Create). Create a Generic Listing Tool configurator in linnworks. The configurator setup depends on the channel it is being created for, so the required request body is channel-specific. Returns: CreatedConfiguratorInfo, CreatedConfiguratorId.
- **Delete a Linnworks generic listings delete configurator by ID** (Delete). Delete a Generic Listing Tool configurator in Linnworks. Returns a 200 OK response body (DeleteConfiguratorsResponse); the discovered Linnworks docs do not enumerate its fields. Requires a JSON request body.
- **Create a Linnworks import export enable import** (Create). Enable or disable a specific import in linnworks. Returns the import register for the affected import, including its id and the upstream register fields (attributes). Requires a JSON request body.
- **Create a Linnworks import export run now import** (Create). Queue a specific Linnworks import to run immediately by putting it in the processing queue. Returns an empty 204 response on success. Requires a JSON request body identifying the import to run.
- **List all Linnworks import export get imports** (List). Get a single import configuration in linnworks by its id. Returns the Import configuration object including its id. Required: id.
- **Delete a Linnworks import export delete import by ID** (Delete). Delete an import configuration in Linnworks. Returns an empty 204 response on success. Required: id (the import configuration to delete).
- **List all Linnworks import export get fullfilment center settings** (List). Get the fulfillment center import/export settings in Linnworks. Returns the settings record including its id and attributes; the attribute fields follow the upstream FulfilmentCenterImportExportSettings schema.
- **Create a Linnworks import export enable export** (Create). Enable or disable a specific export in Linnworks. Returns the export's register record including its id.
- **Create a Linnworks import export run now export** (Create). Run a specific Linnworks export immediately by putting it in the processing queue. Returns an empty 204 response on success. Required: a JSON request body identifying the export to run.
- **List all Linnworks import export get exports** (List). Get an export configuration from Linnworks by its id. Returns the export configuration record identified by id. Required: id.
- **Delete a Linnworks import export delete export by ID** (Delete). Delete an export configuration in linnworks. Returns an empty 204 response on success. Requires a JSON body identifying the export to delete.
- **List all Linnworks import export get import lists** (List). List all existing import configurations in Linnworks. Returns the collection of existing imports as a single GetImportListResponse payload; the upstream schema is not expanded, so individual import fields are not documented. Takes no parameters.
- **List all Linnworks import export get export lists** (List). List all existing export configurations in Linnworks. Returns the export list payload (GetExportListResponse); the upstream API reference does not document its field-level structure. Takes no parameters.
- **Create a Linnworks inventory create stock supplier stat** (Create). Create a supplier stat for a stock item in linnworks via CreateStockSupplierStat. The request must include a JSON body following the Inventory_CreateStockSupplierStatRequest schema. Returns an empty 204 response on success.
- **Update a Linnworks inventory update stock supplier stat by ID** (Update). Update an item supplier stat in linnworks. Requires a JSON request body matching the upstream Inventory_UpdateStockSupplierStatRequest schema (field-level breakdown not enumerated in the Linnworks docs). Returns an empty 204 response on success.
- **Delete a Linnworks inventory delete stock supplier stat by ID** (Delete). Delete an item supplier stat in linnworks. Returns an empty 204 response on success. Requires a JSON request body identifying the supplier stat to remove, per the upstream Inventory_DeleteStockSupplierStatRequest schema.
- **List all Linnworks inventory get inventory item prices** (List). Get a Linnworks stock item's prices by channel. Returns an array of price records with: id, attributes — the channel-specific price fields are defined in the upstream StockItemPrice schema but not enumerated in the docs. Takes inventoryItemId (stock item id, UUID).
- **Create a Linnworks inventory create inventory item price** (Create). Create stock item prices for a specific channel in Linnworks. Requires a JSON request body (upstream schema: Inventory_CreateInventoryItemPricesRequest). Returns an empty 204 response on success.
- **Update a Linnworks inventory update inventory item price by ID** (Update). Update stock item prices in Linnworks. Returns an empty 204 response on success. Requires a JSON request body conforming to Linnworks' UpdateInventoryItemPrices request schema; the upstream docs do not enumerate its fields, so consult the Linnworks API reference for the exact payload shape.
- **Delete a Linnworks inventory delete inventory item price by ID** (Delete). Delete stock item prices in linnworks. Returns an empty 204 response on success. Requires a JSON request body identifying the stock item prices to delete.
- **List all inventory get inventory item price channel suffixes** (List). List all possible price change subsource suffixes across every channel in Linnworks. Returns a channel-keyed map where each channel name maps to an array of suffix strings.
- **List all Linnworks inventory get inventory item price tags** (List). Get all possible price change tags for all channels in Linnworks. Returns a map of channel name to the array of price change tag strings available for that channel. No required parameters.
- **List all inventory get inventory item price rules by IDS** (List). Get the stock item price rules for a specific item price in Linnworks. Returns an array of stock item pricing rule objects matching the supplied price ID. Required: stockItemPriceId (UUID of an item price).
- **List all inventory get inventory item price rules by sources** (List). Get Linnworks stock item price rules for a stock item on a specific channel source and subsource. Returns an array of pricing-rule records, each with an id and the rule fields defined by Linnworks' StockItemPricingRule schema. Required: stockItemId, source, subSource.
- **Create a Linnworks inventory create inventory item pricing rule** (Create). Create stock item price rules in Linnworks by posting the rule definitions as a JSON request body. Returns an empty 204 response on success. Requires the pricing rule request body.
- **Delete inventory delete inventory item pricing rule by ID** (Delete). Delete stock item pricing rules in linnworks by submitting the rules to remove. Requires a JSON request body per the upstream delete-pricing-rules request schema (its fields are not enumerated in the discovered documentation). Returns an empty 204 response on success.
- **Update inventory update inventory item pricing rule by ID** (Update). Update stock item pricing rules in linnworks. Returns an empty 204 response on success. Required: a JSON request body describing the pricing rules to apply.
- ...and 347 more tools. Call `tools/list` via the MCP endpoint, or see the full catalog via the API, for the complete set.
