MoySklad MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MoySklad MCP ServerShow me stock levels for all warehouses"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@theyahia/moysklad-mcp
MCP server for MoySklad (МойСклад) warehouse / ERP / CRM API. 60 tools covering the full trade and warehouse lifecycle: products & catalog, stock, counterparties, customer & purchase orders, shipments, supplies, stock moves, inventory, write-offs/enters, returns, invoices, payments & cash, reports, audit log, and webhooks.
Part of WWmcp — a set of MCP servers for emerging markets — and the russian-mcp series.
Quick Start
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"moysklad": {
"command": "npx",
"args": ["-y", "@theyahia/moysklad-mcp"],
"env": {
"MOYSKLAD_TOKEN": "your-bearer-token"
}
}
}
}To use login/password instead of a token, replace the env block with:
"env": { "MOYSKLAD_LOGIN": "you@example.com", "MOYSKLAD_PASSWORD": "your-password" }Claude Code
claude mcp add moysklad --env MOYSKLAD_TOKEN=your-bearer-token -- npx -y @theyahia/moysklad-mcpCursor / Windsurf
Add to MCP settings:
{
"moysklad": {
"command": "npx",
"args": ["-y", "@theyahia/moysklad-mcp"],
"env": { "MOYSKLAD_TOKEN": "your-bearer-token" }
}
}Related MCP server: @theyahia/wildberries-mcp
Auth
Variable | Description |
| Bearer token (preferred) |
| HTTP Basic auth |
Get a token in MoySklad: Settings → Users → Access tokens (POST /security/token also works with Basic auth). Generating a new token revokes the previous one.
Required permissions: the user/token needs access to the entities you intend to use. Read tools need view rights; create/update tools need edit rights for that document type. Webhooks and some reports require a paid MoySklad plan.
Prices
The MoySklad API stores money in kopecks (1 ruble = 100 kopecks). This server converts automatically:
Input: pass prices/amounts in rubles (e.g.
1500.50)Output: prices/amounts are returned in rubles
(The
get_dashboardreport is passed through verbatim, so its money values are still in kopecks.)
When a product carries a sale price, MoySklad requires a price type. The server attaches your account's default price type automatically (from list_price_types); pass price_type_href to choose a specific one.
Tools (60)
Products & catalog
Tool | Description |
| Search products by name or article |
| Get a product by UUID ( |
| Create a product (price type attached automatically) |
| Update sale/buy/min prices |
| Unified search across products, variants, services, bundles |
| List price types (first is the default) |
| Search modifications / kits / services |
| Create a service |
Stock
Tool | Description |
| Current stock (quantity, reserve, in-transit) |
| Stock broken down by warehouse |
| Fast current-stock snapshot |
Counterparties
Tool | Description |
| Search by name, INN, or phone |
| Get full details ( |
| Create customer/supplier |
Orders & shipments
Tool | Description |
| Customer order lifecycle |
| Purchase orders to suppliers |
| Shipment (demand) linked to an order and warehouse |
| Incoming supply (purchase receipt) |
| Returns from customers / to suppliers |
Warehouse documents
Tool | Description |
| Stock transfer between warehouses |
| Stock enter (оприходование) |
| Write-off (списание) |
| Inventory count (инвентаризация) |
Finance
Tool | Description |
| Incoming / outgoing bank payments |
| Cash receipt / expense orders |
| Sales / supplier invoices |
Reports
Tool | Description |
| Profit by product (revenue, cost, margin) |
| Sales by product (quantity, revenue) |
| Day/week/month dashboard metrics |
| Product turnover over a period |
| Current money balances by account/cash |
Reference & audit
Tool | Description |
| Warehouses / legal entities |
| Reference data |
| Entity metadata (states, attributes) — find order-state hrefs here |
| Account event log / single-entity history |
Webhooks & generic
Tool | Description |
| Manage webhooks (CREATE/UPDATE/DELETE/PROCESSED) |
| Generic list/get for any entity type not covered above |
HTTP Transport
HTTP_PORT=3000 npx @theyahia/moysklad-mcp
# or
npx @theyahia/moysklad-mcp --http 3000Endpoints: POST /mcp (JSON-RPC), GET /health (status). CORS is off by default — the HTTP endpoint acts on your MoySklad token, so set MOYSKLAD_HTTP_CORS_ORIGIN only if a trusted browser origin needs it.
Configuration (env)
Variable | Default | Description |
| — | Bearer token |
| — | Basic auth |
|
| Requests allowed per 3-second window |
|
| Max parallel requests (MoySklad allows 5/user) |
| — | Allowed CORS origin for the HTTP transport |
| — | Start the Streamable HTTP transport on this port |
Rate Limiting
MoySklad uses a weight-per-3-seconds model (≈45 units for a solution token, fewer for login/password, and the get_stock/get_stock_by_store reports cost 5 units each). The built-in limiter is a token bucket charged by request weight, kept conservative by default (MOYSKLAD_RATE_BUCKET=20) because the API can temporarily disable access after repeated 429s. It retries 429/5xx with backoff, honoring MoySklad's X-Lognex-Retry-After header. Solution-token users can raise the bucket toward 45.
Troubleshooting
Symptom | Cause / fix |
| Set |
| Token invalid/expired or the user lacks rights for that entity. A new token revokes old ones. |
| A required field is missing (e.g. an outgoing payment may need an expense item — pass |
Many | Lower request volume or rely on the built-in limiter; raise |
| The runtime isn't sending gzip — use Node ≥18 (its |
Webhooks / some reports fail | Require a paid MoySklad plan. |
E-commerce Stack
Service | MCP Server | What it does |
MoySklad |
| Warehouse, products, orders |
CDEK |
| Delivery, tracking |
DaData |
| Address validation |
YooKassa |
| Payments |
Demo Prompts
"Show me all products with low stock (less than 10 units) and their current prices"
"Create a customer order for counterparty 'OOO Roga i Kopyta' with 50 units of 'Widget Pro' at 1500 rubles each, then create a shipment from the main warehouse"
"Move 20 units of SKU LP15 from the main warehouse to the store, then pull the profit report for this month"
Development
npm install # installs deps + git hooks (husky)
npm run build # tsc -> dist/
npm run lint # eslint
npm run typecheck # tsc --noEmit
npm test # vitest (requires Node >=20)
npm run coverage # vitest with coverageThe published runtime supports Node ≥18; the test tooling requires Node ≥20.
API Reference
Based on MoySklad JSON API 1.2.
License
MIT
This server cannot be installed
Maintenance
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/theYahia/moysklad-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server