PrestaShop MCP Server: Connect Claude to Your Store

PrestaShop MCP Server: Connect Claude to Your Store

It's Monday morning, a supplier just raised prices on 40 products, and every one of them has descriptions in French, English and Spanish. You know exactly what needs to change. You just don't want to spend two hours clicking through the PrestaShop back office to do it.

That's the pitch behind PrestaShop's official MCP Server module: connect Claude, ChatGPT, Gemini or Cursor to your store and ask for what you need in plain language. I went through the official documentation end to end to see what it actually lets an agent touch, how access is controlled, and where people get stuck. Here's the practical version.

What the Module Is (and Isn't)

PrestaShop MCP Server is a free module built by PrestaShop itself, available on the PrestaShop Marketplace since November 2025 for stores on PrestaShop 8 or later. It exposes your store over the Model Context Protocol, which Claude, ChatGPT, Gemini CLI, Le Chat and Cursor all support.

Two things worth knowing upfront:

  • It's free, but it isn't open source. The license is personal and non-transferable, and only the developer stubs are on GitHub. Your PrestaShop install is open source; this module is not.
  • It pulls in three companion modules: PrestaShop Account (authentication), PrestaShop EventBus (data synchronization) and PrestaShop MCP Tools (the actual tools). PrestaShop MBO installs them for you.

If you've read our WooCommerce + MCP guide, the idea is the same. The big difference is that PrestaShop ships write access out of the box, so permissions matter more.

What Your Agent Can Actually Do

The default tools come from PrestaShop MCP Tools, which talks to your store through PrestaShop's webservice API (the module creates its own webservice key, so you only need webservices enabled).

Area Read Write
Products List, search by name or ID, filter by category, brand, supplier or reference, products on sale, stock and combinations Create and update products in multiple languages
Product images List a product's images Add from a public URL, update, set the cover image
Orders List and filter by customer, status, payment or date, order lines, status history, carrier tracking, invoices Update orders and order status
Customers Search by ID or email, filter by group or signup date, newsletter subscribers Create and update customers

That covers the Monday scenario: "find every product from supplier X, raise prices by 6%, and update the descriptions in all three languages" is a handful of tool calls.

Setting It Up on Elestio

1. Deploy PrestaShop. Grab PrestaShop on Elestio. A 2 CPU / 4 GB instance (from about $14/month on Netcup in the EU) is plenty for a small shop. Check the software version on your service and switch to 8.x or 9.x if needed; PrestaShop 9.2.0 came out on September 30.

2. Put it on a real domain. OAuth needs a stable public HTTPS URL, so attach your custom domain before anything else. Elestio handles the certificate.

3. Enable webservices. In the back office, go to Advanced Parameters > Webservice and turn it on.

4. Install the module. Download PrestaShop MCP Server from the Marketplace, upload it in Modules > Module Manager, install PrestaShop MBO if it isn't there, then let MBO pull in the three dependencies. Finally, connect the PrestaShop Account module. Note which email you log in with; it matters in a minute.

5. Add members. On the module's Members page, add the email of each person allowed to connect, with a role:

  • Viewer: read-only. The server rejects any write call.
  • Editor: read and write.

6. Connect your AI client. Copy the Server URL from the Configuration page. In Claude Code, that's one command (replace the URL with yours):

claude mcp add --transport http prestashop https://shop.example.com/mcp

Then run /mcp inside Claude Code to complete the OAuth login. If your client asks for scopes, use mcp.discover mcp.read mcp.write email. Other clients work the same way: paste the URL, log in.

For clients without OAuth support, generate a token when creating the member (it's shown once) and send it as a header:

claude mcp add --transport http prestashop https://shop.example.com/mcp \
  --header "Authorization: Bearer YOUR_MEMBER_TOKEN"

The Trade-Off: Authentication Isn't Self-Hosted

Your store is self-hosted, but authentication isn't. OAuth only works through PrestaShop Account: you can't plug in Keycloak or another identity provider, and connecting the store requires a PrestaShop Account login. The required EventBus module also exists to sync store data with PrestaShop's services. Fine for most merchants. If you self-host for data sovereignty, check what EventBus shares first.

Start Read-Only. Seriously.

My advice: give everyone Viewer for the first two weeks. Ask questions, check the answers against the back office, and get a feel for how the model interprets "last week" or "out of stock".

When you do grant Editor, use the Modules & Features page. Every tool has its own toggle, so you can allow product and stock updates while switching off customer creation or order updates entirely. Review the Members list regularly, and if you use tokens, regenerate them periodically (regenerating instantly kills the old one).

Adding Your Own Tools

Module developers can expose their own features to agents with PHP attributes. Add an isMcpCompliant() method returning true to your main module class, then put tool classes in the module's src directory (code elsewhere is ignored). The readOnlyHint tells clients this one never writes:

use PrestaShop\Module\PsMcpServer\Server\Attributes\PsMcpTool;
use PrestaShop\Module\PsMcpServer\Server\Attributes\PsMcpSchema;
use PrestaShop\Module\PsMcpServer\Server\Attributes\PsMcpToolAnnotations;
use PrestaShop\Module\PsMcpServer\Server\Exceptions\PsMcpToolCallException;

class LowStockTool
{
    #[PsMcpTool(
        name: 'get_low_stock_products',
        description: 'List up to 100 products whose stock is below a threshold, lowest first',
        annotations: new PsMcpToolAnnotations(
            title: 'Low stock products',
            readOnlyHint: true,
            destructiveHint: false,
            idempotentHint: true,
            openWorldHint: false,
        )
    )]
    #[PsMcpSchema(
        properties: ['threshold' => ['type' => 'integer', 'description' => 'Stock threshold']],
        required: ['threshold']
    )]
    public function getLowStockProducts(int $threshold): array
    {
        try {
            $sql = new \DbQuery();
            $sql->select('sa.id_product, pl.name, sa.quantity');
            $sql->from('stock_available', 'sa');
            $sql->innerJoin('product_lang', 'pl', 'pl.id_product = sa.id_product'
                . ' AND pl.id_lang = ' . (int) \Configuration::get('PS_LANG_DEFAULT')
                . ' AND pl.id_shop = ' . (int) \Context::getContext()->shop->id);
            $sql->where('sa.id_product_attribute = 0 AND sa.quantity < ' . (int) $threshold);
            $sql->orderBy('sa.quantity ASC');
            $sql->limit(100);

            return \Db::getInstance()->executeS($sql) ?: [];
        } catch (\Exception $e) {
            throw new PsMcpToolCallException('Failed to list low stock products: ' . $e->getMessage(), 1);
        }
    }
}

The official guide also covers resources, prompts and error handling.

Troubleshooting

"OAuth not implemented". Three usual suspects: Cloudflare blocking or caching /.well-known/* routes, the Authorization header being stripped (add SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 to .htaccess), or the store sitting in maintenance mode.

"An error occurred during connection setup". You're logged into PrestaShop Account with an email that isn't on the Members page. Check the account you're signed in with, switch if needed, and retry.

"class psMcpTools/LanguagesTool not found". A stale cache. Reset the ps_mcp_tools module in Module Manager, then clear the cache in Advanced Parameters > Performance.

The client can't discover tools. A firewall or bot filter is blocking AI user agents. Claude Desktop identifies as Claude-User, ChatGPT as openai-mcp/1.0.0 (ChatGPT). Allowlist them.

A tool fails with "Internal error". Turn on debug logs in Developer Options; they land in the module's .mcp/logs folder. And never enable the "Disable Authentication" option outside a local test box.

Is It Worth It?

For catalog-heavy shops, yes. Bulk multilingual edits and "what's going on with orders?" questions are exactly where an agent saves real time. Just go in with Viewer first, toggle off what you don't need, and keep an eye on that Members page.

Thanks for reading ❤️ See you in the next one 👋