What this is
Channekt is a remote MCP server. Any assistant that speaks the Model Context Protocol - ChatGPT, Claude, Cursor, or one you have built yourself - can connect to it and ask questions about your shops in plain language, then prepare changes for you to approve.
It is one connection for every channel you sell on. The assistant asks Channekt, and Channekt answers from the normalised view it already keeps of every channel you have connected. Your assistant never holds a channel credential, because it never talks to a channel.
Endpoint: https://api.channekt.com/mcp
The transport is Streamable HTTP. Authentication is a bearer token that you create
in Channekt, under Settings › AI connections. The server
answers POST only; it sends no server-initiated messages, so there is
no stream to open.
Connecting an assistant
- In Channekt, go to Settings › AI connections and press Connect an assistant. You need to be an owner or an administrator.
- Give it a name you will recognise later, and tick what it may read. Leave the action permissions closed unless you want the assistant to prepare changes.
- Copy the token. It is shown once. Channekt stores only a fingerprint of it and cannot show it again - if you lose it, replace the connection.
- Add the endpoint and the token to your assistant.
Claude: Settings, Connectors, Add custom connector.
ChatGPT: Settings, Connectors, Add, then choose an MCP server.
Cursor: Settings, MCP, Add new server. Choose the HTTP transport
and add an Authorization header reading
Bearer <your token>.
Anything else: point it at the endpoint and send the token in the
Authorization header as a bearer token. Channekt negotiates the
protocol version, so a client a release or two behind still connects.
These are the clients we have tested against. Channekt does not certify or endorse any of them, and a client we have not named is not thereby unsupported - it is a standard remote MCP server.
Permissions
A connection is granted named permissions, and each one is a filter over what the person who created it can already do. A connection never widens a role. If you cannot change stock in Channekt, an assistant you connect cannot either, whatever it was granted.
| Permission | What it allows |
|---|---|
mcp:orders:read |
Orders, their lines, totals and shipment state. |
mcp:products:read |
Products, variants, identifiers and prices. |
mcp:inventory:read |
Stock by warehouse and by channel. |
mcp:listings:read |
Channel listings, their status and their errors. |
mcp:channels:read |
Which shops are connected and whether they are healthy. |
mcp:sync:read |
Imports and pushes, including what failed. |
mcp:analytics:read |
Sales summaries by channel and by period. |
mcp:inventory:write |
Propose and apply stock corrections. |
mcp:prices:write |
Propose and apply price changes. |
mcp:listings:write |
Publish and withdraw listings. |
mcp:sync:write |
Retry failed synchronisation work. |
mcp:shipments:write |
Create shipments and write tracking back to a channel. |
mcp:orders:write |
Narrow order actions. |
A read-only connection cannot reach an action tool at all - it is not offered in the tool list, and calling it by name is refused before anything runs. New connections default to read-only; every action permission is a separate tick.
Read tools
-
get_account_summary- the workspace, its currency and timezone, and what needs attention. -
list_channels- the connected shops, with the ids other tools take. -
get_channel_status- one shop's health, its last runs and its recent failures. -
list_orders- orders across every shop, normalised and paginated. get_order- one order in full, with its lines and money.-
get_unfulfilled_orders_summary- what is waiting, by age bucket and by shop. -
search_products- the catalogue, with filters for what is missing. get_product- one product, its variants and its listings.-
get_inventory- stock for named SKUs or one product, per warehouse. -
list_low_stock_products- what has fallen to or below a threshold. list_listings- what each product looks like on each shop.-
get_inventory_discrepancies- where a shop is advertising a different quantity from the one Channekt holds. -
list_sync_errors- what failed, across every shop, newest first. -
get_sales_summary- orders, units and revenue by period and by shop.
Every list is bounded. A tool returns at most a hundred rows and a cursor to continue with; there is no way to ask for the whole catalogue in one call.
get_inventory_discrepancies compares what Channekt last sent each shop
against what Channekt holds now. It is not a live read from the marketplace - every
row carries the moment the figure was sent, so the answer can say how old it is.
Action tools
Each comes as a pair: one that plans, and one that carries out.
-
propose_inventory_update/execute_inventory_update propose_price_update/execute_price_updatepropose_listing_publish/execute_listing_publish-
propose_listing_unpublish/execute_listing_unpublish propose_sync_retry/execute_sync_retry-
propose_shipment_creation/execute_shipment_creation -
propose_tracking_writeback/execute_tracking_writeback
How an action is approved
-
The assistant calls a
propose_tool. Channekt reads the current state, works out exactly what would change, and stores it. Nothing has changed yet. - You are given a preview naming every item with its value before and after, plus any warnings - a shop that is paused, a SKU with no price, an order that already has a shipment.
- You approve or reject it in Channekt, under Settings › AI connections. An assistant cannot approve its own proposal; there is no tool that does it.
-
The assistant calls the matching
execute_tool with the action id and an idempotency key. What runs is the stored plan - the execute call carries no payload of its own. - Channekt checks the plan still describes reality. A price that has moved since the preview, or stock that has changed, refuses the whole thing rather than applying it to numbers nobody looked at.
Proposals expire after an hour. A repeated execute with the same idempotency key returns the first result rather than doing the work twice.
The workspace setting decides how much of this is automatic. The default, Ask me every time, needs a person for every change. Allow small changes lets a single SKU's stock or price move by a small amount, and a retry of work that already failed, run without asking - publishing, withdrawing, shipping and anything larger still wait. Read only, always refuses every change whatever a connection was granted.
Pages, limits and errors
Follow nextCursor rather than raising a limit. Amounts carry their
currency and are reported in minor units alongside a decimal string; dates are ISO
8601 in UTC.
A queued marketplace operation returns an operation id and is not
finished. Use get_channel_status or list_sync_errors to
see how it ended. Channekt never reports a publication as live before the channel
has confirmed it.
Errors are JSON-RPC. -32602 names the field that was wrong,
-32002 means the connection was not granted something, and
-32603 is a failure that has been recorded and changed nothing.
Internal messages, database details and marketplace responses are never returned.
What is recorded
Every call, allowed or refused, is recorded against the connection that made it, with the tool, a summary of the arguments, the outcome and how long it took. You can read it on the same screen. It is kept for twelve months.
Changes are audited separately, in the same audit trail a change made from the dashboard produces, and marked as having been made through a connection rather than by a person in a browser.
Free text is clipped and anything that looks like a credential is dropped before a record is written.
Security
- One workspace per connection. The organisation comes from the credential. No tool accepts a workspace id, so an assistant cannot ask about somebody else's shop.
- Revocation is immediate. A revoked connection stops working on its very next request. So does one whose owner has been removed from the workspace, or whose role has changed - the membership is read on every call.
- Tokens are stored hashed. Channekt keeps a SHA-256 of the token and never the token itself.
- Customer contact details are not returned. Orders come back with a customer name and, on one order, the town and country. No street, no email address, no telephone number.
- Marketplace credentials are never exposed. No tool returns one, and none can be reached through this endpoint.
Troubleshooting
The client says it is unauthorised. The token is wrong, revoked or expired, or the person it belongs to has left the workspace. Create a new connection.
A tool the assistant expected is missing. The tool list is filtered by what the connection was granted. Add the permission and reconnect.
An execute is refused as awaiting approval. Approve it in Channekt, under Settings, AI connections.
An execute is refused because the state moved. Something changed between the preview and the approval. Ask the assistant to propose it again.