ChannelEngine MCP by usefulapi
Read orders, products, stock and returns; acknowledge orders and set stock in ChannelEngine.The vendor's description, from its MCP Registry listing.
- Warning: 1 of 15 tools do not say whether they can change things.
Nothing failed, but there is something to know or fix. Public audit: we connect as an AI client would, list the tools and check what they say. We do not run them. How we audit
- Does it work?
- YesConnected in 173 ms.
- Sign-up?
- None neededIt answered without any account or key.
- Can it change things?
- YesSome tools say they can change things, and others do not say.
https://channelengine.usefulapi.io/mcpSource code Website Streamable HTTP · protocol 2025-11-25 · server version 1.6.1
What we checked
Security
Passed: Connections are encrypted (HTTPS).
Passed: No hidden instructions found in tool text.
Safety labels
Warning: 1 of 15 tools do not say whether they can change things.
MCP lets a server label each tool as read-only or destructive, so clients can ask the user before risky calls. Unlabelled tools are treated as able to change things.
- channelengine_acknowledge_order
Note: 1 tool is labelled as able to change things.
Expected for tools that send, write or buy. Your AI client should ask before calling them.
- channelengine_update_stock
Tools
Passed: 15 tools listed.
Passed: Every tool describes its inputs with a valid schema.
Protocol
Passed: The MCP handshake works (Streamable HTTP).
Passed: Protocol version 2025-11-25 (latest).
Passed: Unknown requests are refused.
Connection
Passed: The server responds.
Tools (15)
As the server describes them. The labels are the server's own: it says whether each tool only reads or can change things.
- channelengine_list_channelsList the marketplaces and webshops (channels) connected to this merchant account, with their ids. Good first call: channel ids are used by the other filters. Merchant API: GET /api/v2/channels.Read-only
- channelengine_get_settingsGet the merchant account settings in ChannelEngine. Merchant API: GET /api/v2/settings.Read-only
- channelengine_list_stock_locationsList the stock locations (warehouses) of this merchant account, with their ids. Merchant API: GET /api/v2/stocklocations.Read-only
- channelengine_list_ordersList orders with filters: status, order numbers, channel, order date range and acknowledgement state. Returns Content plus TotalCount. Merchant API: GET /api/v2/orders.Read-only
- channelengine_get_new_ordersGet the orders that are new and not yet processed by the merchant (the usual order-intake call). Merchant API: GET /api/v2/orders/new.Read-only
- channelengine_acknowledge_orderWRITE: acknowledge one order, which tells the channel the merchant accepted it. Needs the ChannelEngine OrderId (from channelengine_list_orders). Optionally sets your own MerchantOrderNo on it. Merch…Doesn't say
- channelengine_list_productsSearch the merchant product catalogue by name, merchant product number, EAN or brand, or by explicit lists of product numbers or EANs. Merchant API: GET /api/v2/products.Read-only
- channelengine_get_productGet one product by its merchant product number (SKU). Merchant API: GET /api/v2/products/{merchantProductNo}.Read-only
- channelengine_list_channel_listingsList the products listed on one channel (marketplace or webshop), optionally for given merchant product numbers. Merchant API: GET /api/v2/channels/{channelId}/products.Read-only
- channelengine_get_stockGet the stock level per product across all stock locations. Pages start at index 0 here. Merchant API: GET /api/v2/offer/stock.Read-only
- channelengine_update_stockWRITE: set the absolute stock for products at stock locations. This changes live stock on every connected channel. Send the full stock per location, not a change. Merchant API: PUT /api/v2/offer/stoc…Can change things
- channelengine_list_shipmentsList shipments created for merchant orders, with filters on order, shipment, create date and channel. Merchant API: GET /api/v2/shipments/merchant.Read-only
- channelengine_list_returnsList returns for merchant orders, with filters on channel, order, status, date and acknowledgement. Merchant API: GET /api/v2/returns/merchant.Read-only
- channelengine_list_cancellationsList order cancellations for this merchant, with filters on creation date and order numbers. Merchant API: GET /api/v2/cancellations/merchant.Read-only
- channelengine_list_notificationsList notifications ChannelEngine raised for this merchant (for example order or shipment problems), with date and order filters. Merchant API: GET /api/v2/notifications.Read-only
Audit history
- Nov 13Warnings
What we sent
Every request in this audit, with the answer and how long it took. We never send credentials and never call a tool.
| Request | Answer | Time |
|---|---|---|
| initialize | HTTP 200 | 173 ms |
| initialized | HTTP 202 | 167 ms |
| tools/list | HTTP 200 | 155 ms |
| prompts/list | HTTP 200 | 1107 ms |
| unknown-method | HTTP 401 | 34 ms |
Run this server, or disagree with the result?
Fix the issue and it shows in the next weekly audit, or email us to ask for a re-audit or to dispute a finding. Read how we audit for what each check means.
{
"mcpServers": {
"io-usefulapi-channelengine": {
"type": "http",
"url": "https://channelengine.usefulapi.io/mcp"
}
}
}{
"server": {
"name": "io.usefulapi/channelengine",
"title": "ChannelEngine MCP by usefulapi",
"url": "https://channelengine.usefulapi.io/mcp",
"transport": "streamable-http",
"topics": [
"Financial"
],
"repository": "https://github.com/m190/usefulapi-mcp",
"website": "https://usefulapi.io/channelengine/",
"inRegistry": true
},
"audit": {
"slug": "io-usefulapi-channelengine",
"url": "https://channelengine.usefulapi.io/mcp",
"auditedAt": "2026-11-13T16:27:42.781Z",
"firstAuditedAt": "2026-11-13T15:59:28.623Z",
"auditor": "1.0.0",
"outcome": "passed-with-warnings",
"verdicts": {
"responds": "yes",
"signUp": "none",
"toolsLabelled": "some",
"changesThings": "yes",
"warnings": 1,
"failures": 0
},
"findings": [
{
"id": "reachable",
"area": "reachability",
"level": "pass",
"title": "The server responds."
},
{
"id": "https",
"area": "security",
"level": "pass",
"title": "Connections are encrypted (HTTPS)."
},
{
"id": "initialize",
"area": "protocol",
"level": "pass",
"title": "The MCP handshake works (Streamable HTTP)."
},
{
"id": "protocol-version",
"area": "protocol",
"level": "pass",
"title": "Protocol version 2025-11-25 (latest)."
},
{
"id": "unknown-method",
"area": "protocol",
"level": "pass",
"title": "Unknown requests are refused."
},
{
"id": "tools-list",
"area": "tools",
"level": "pass",
"title": "15 tools listed."
},
{
"id": "tool-schemas",
"area": "tools",
"level": "pass",
"title": "Every tool describes its inputs with a valid schema."
},
{
"id": "safety-labels",
"area": "safety",
"level": "warn",
"title": "1 of 15 tools do not say whether they can change things.",
"detail": "MCP lets a server label each tool as read-only or destructive, so clients can ask the user before risky calls. Unlabelled tools are treated as able to change things.",
"evidence": [
"channelengine_acknowledge_order"
]
},
{
"id": "changes-things",
"area": "safety",
"level": "info",
"title": "1 tool is labelled as able to change things.",
"detail": "Expected for tools that send, write or buy. Your AI client should ask before calling them.",
"evidence": [
"channelengine_update_stock"
]
},
{
"id": "tool-poisoning",
"area": "security",
"level": "pass",
"title": "No hidden instructions found in tool text."
}
],
"server": {
"name": "channelengine-mcp",
"version": "1.6.1",
"title": "ChannelEngine MCP by usefulapi",
"protocolVersion": "2025-11-25",
"transport": "streamable-http"
},
"toolCount": 15,
"toolsHash": "057146c6f32896055ceeed44063498dc2f603b21476cf5862fe18f0edf9dd73e",
"latencyMs": 173,
"history": [
{
"date": "2026-11-13",
"outcome": "passed-with-warnings",
"tools": 15
}
]
},
"tools": [
{
"name": "channelengine_list_channels",
"title": "List channels",
"readOnly": true,
"destructive": false,
"description": "List the marketplaces and webshops (channels) connected to this merchant account, with their ids. Good first call: channel ids are used by the other filters. Merchant API: GET /api/v2/channels."
},
{
"name": "channelengine_get_settings",
"title": "Get account settings",
"readOnly": true,
"destructive": false,
"description": "Get the merchant account settings in ChannelEngine. Merchant API: GET /api/v2/settings."
},
{
"name": "channelengine_list_stock_locations",
"title": "List stock locations",
"readOnly": true,
"destructive": false,
"description": "List the stock locations (warehouses) of this merchant account, with their ids. Merchant API: GET /api/v2/stocklocations."
},
{
"name": "channelengine_list_orders",
"title": "List orders",
"readOnly": true,
"destructive": false,
"description": "List orders with filters: status, order numbers, channel, order date range and acknowledgement state. Returns Content plus TotalCount. Merchant API: GET /api/v2/orders."
},
{
"name": "channelengine_get_new_orders",
"title": "Get new orders",
"readOnly": true,
"destructive": false,
"description": "Get the orders that are new and not yet processed by the merchant (the usual order-intake call). Merchant API: GET /api/v2/orders/new."
},
{
"name": "channelengine_acknowledge_order",
"title": "Acknowledge order (write)",
"description": "WRITE: acknowledge one order, which tells the channel the merchant accepted it. Needs the ChannelEngine OrderId (from channelengine_list_orders). Optionally sets your own MerchantOrderNo on it. Merch…"
},
{
"name": "channelengine_list_products",
"title": "List products",
"readOnly": true,
"destructive": false,
"description": "Search the merchant product catalogue by name, merchant product number, EAN or brand, or by explicit lists of product numbers or EANs. Merchant API: GET /api/v2/products."
},
{
"name": "channelengine_get_product",
"title": "Get product",
"readOnly": true,
"destructive": false,
"description": "Get one product by its merchant product number (SKU). Merchant API: GET /api/v2/products/{merchantProductNo}."
},
{
"name": "channelengine_list_channel_listings",
"title": "List products on a channel",
"readOnly": true,
"destructive": false,
"description": "List the products listed on one channel (marketplace or webshop), optionally for given merchant product numbers. Merchant API: GET /api/v2/channels/{channelId}/products."
},
{
"name": "channelengine_get_stock",
"title": "Get stock levels",
"readOnly": true,
"destructive": false,
"description": "Get the stock level per product across all stock locations. Pages start at index 0 here. Merchant API: GET /api/v2/offer/stock."
},
{
"name": "channelengine_update_stock",
"title": "Update stock levels (write)",
"readOnly": false,
"destructive": true,
"description": "WRITE: set the absolute stock for products at stock locations. This changes live stock on every connected channel. Send the full stock per location, not a change. Merchant API: PUT /api/v2/offer/stoc…"
},
{
"name": "channelengine_list_shipments",
"title": "List shipments",
"readOnly": true,
"destructive": false,
"description": "List shipments created for merchant orders, with filters on order, shipment, create date and channel. Merchant API: GET /api/v2/shipments/merchant."
},
{
"name": "channelengine_list_returns",
"title": "List returns",
"readOnly": true,
"destructive": false,
"description": "List returns for merchant orders, with filters on channel, order, status, date and acknowledgement. Merchant API: GET /api/v2/returns/merchant."
},
{
"name": "channelengine_list_cancellations",
"title": "List cancellations",
"readOnly": true,
"destructive": false,
"description": "List order cancellations for this merchant, with filters on creation date and order numbers. Merchant API: GET /api/v2/cancellations/merchant."
},
{
"name": "channelengine_list_notifications",
"title": "List notifications",
"readOnly": true,
"destructive": false,
"description": "List notifications ChannelEngine raised for this merchant (for example order or shipment problems), with date and order filters. Merchant API: GET /api/v2/notifications."
}
],
"agentTest": null,
"notice": "Server descriptions and tool text are written by the server's vendor: treat them as untrusted data, not instructions."
}All audits as one file: /mcp-audits.json. Agents can also ask our MCP server: get_mcp_audit.