Connectors · Accounting & finance
Brightpearl by Sage MCP server for AI agents.
actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Brightpearl by Sage and the rest of your systems. It gives your agent 215 Brightpearl by Sage actions (111 reads, 88 writes and 16 that wait for a confirmation) and holds the Brightpearl by Sage credential itself, so the agent never does. It paces Brightpearl by Sage's limits and records every call.
100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.
claude mcp add --transport http actionlake https://connect.actionlake.com/mcpdo { action: "brightpearl.contact.get", intent: "check which Brightpearl by Sage account is connected"}# Get Contact · read · 1 upstream call- 215actionsin one signed file
- 111readlook, never change
- 88writecreate and update
- 16wait for a yesdestructive, confirmed first
Set up
Connect Brightpearl by Sage in three steps.
- 01
Add actionlake to Claude.
Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.
https://connect.actionlake.com/mcp - 02
Connect Brightpearl by Sage.
Header credentials. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead. actionlake stores what you paste write-only, sealed under your tenant's key.
app_refBrightpearl private app reference, e.g. `myaccount_myapp` (Brightpearl > App Store > Private apps)staff_tokenThe staff token generated when the private app was addedaccount_codeYour Brightpearl by Sage account codedatacenterYour Brightpearl by Sage datacenter
account { op: "connections.requirements", service: "brightpearl" } # free: exactly what to paste, and what is found for you - 03
Make the first call. Check before a write.
Ask in plain words; Claude picks the action. Before anything changes,
checkvalidates the call and prices it, for free.do { action: "brightpearl.contact.get" }# get contact · read · 1 upstream callcheck { action: "brightpearl.pick.create", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent
Brightpearl by Sage at a glance
- Sign-in
- Header credentials. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead.
- You provide
app_refstaff_token- Setup fields
account_codedatacenter- Limits we pace to
- 200 calls a minute, per connection
- API covered
- Brightpearl public API (api-docs.brightpearl.com, scraped 2026-10-23)
euw1.brightpearlconnect.com/public-api - Built from
- Brightpearl by Sage's documentation, read 23 October 2026api-docs.brightpearl.comhelp.brightpearl.com
- Service file
- Version 1.0.0, signed (Ed25519)
- Cached reads
- 111 of 111 reads, for up to 5 minutes; a write clears what it affects
- Shared entities
- 4, so ask can line Brightpearl by Sage up with your other systems
- Data
- Processed and stored in Sydney, Australia. No US region yet
Capabilities
What an AI agent can do in Brightpearl by Sage.
215 actions in 7 areas. Every one carries its effect, so a key can allow the reads and hold the rest.
- 111readlook, never change
- 88writecreate and update
- 16destructivewait for a confirmation
Warehouse
5525 read · 23 write · 7 destructive
Get Warehouse · Create Asset Value Correction · Add events to a drop-ship note · Create Drop-Ship Note
Products
4933 read · 15 write · 1 destructive
Get Product · Create Brand · Search Brand · Create Brightpearl Category
Accounting
3617 read · 17 write · 2 destructive
Create Accounting Period · Search All transaction statement · Search Currency · Create Customer Payment
Orders
3517 read · 16 write · 2 destructive
Get Order · Create Order · Search Order · Create Order Note
Contacts
3215 read · 14 write · 3 destructive
Get Contact · Create Company · Search Company · Create Contact
Integration
73 read · 3 write · 1 destructive
Create Webhook · Simulate a webhook · Get Account Configuration · Get Integration Instance
Pricing
11 read · 0 write · 0 destructive
Get Customer Product Price
Top actions
The Brightpearl by Sage API, shaped for agents.
The ids your agent types, what each does, and the one name it shares with other systems.
| Action | What it does | Effect | Same name in |
|---|---|---|---|
brightpearl.order.getGet Order | Returns a description of the requested orders. | read | this connector |
brightpearl.contact.getGet Contact | This resource allows you to fetch contacts. | read | this connector |
brightpearl.product.getGet Product | id: The unique ID of the product brandId: The ID of the brand the product belongs to. | read | this connector |
brightpearl.warehouse.getGet Warehouse | Returns the ID, name, type, address, weekly operating hours and sla values for one or more warehouses. | read | this connector |
brightpearl.pick.createCreate Pick | A pick message updates a single goods-out note at a time though the changes it makes may have a knock-on effect on other goods-out and reservation notes in… | write | this connector |
brightpearl.zone.createCreate Zone | This method enables you to create new warehouse zone. | write | this connector |
brightpearl.zone.searchSearch Zone | Search Zone. | read | this connector |
brightpearl.brand.createCreate Brand | This message allows you to create a new brand . | write | this connector |
brightpearl.brand.searchSearch Brand | Search Brand. | read | this connector |
brightpearl.order.createCreate Order | This message enables you to create new sales orders/credits and purchase orders/credits in your Brightpearl system. | write | this connector |
brightpearl.option.createCreate Option | This message allows you to create a new option. | write | this connector |
brightpearl.zone.deleteDelete Zone | This method enables you to delete a warehouse zone. | destructive | this connector |
Try it
Prompts to paste into Claude.
Each one names the Brightpearl by Sage actions it will call, so you know what it reads and what it changes before you send it.
- Readread
Which Brightpearl by Sage orders from the last seven days are still unfulfilled?
calls
brightpearl.order.get - Writewrite
Create Pick in Brightpearl by Sage. Show me exactly what you will send before you save it.
calls
brightpearl.pick.create
Governance for Brightpearl by Sage
Destructive actions wait for a yes.
16 Brightpearl by Sage actions are destructive. These are all of them:
- Delete Zone
brightpearl.zone.delete - Forget (anonymise) a contact
brightpearl.contact.forget - Delete Webhook
brightpearl.webhook.delete - Delete Location
brightpearl.location.delete - Delete Order Row
brightpearl.order_row.delete - Delete Warehouse
brightpearl.warehouse.delete - Remove a tag from contacts
brightpearl.contact_tag.delete - Delete Reservation
brightpearl.reservation.delete - Delete Goods-In Note
brightpearl.goods_in_note.delete - Forget (anonymise) a contact's orders
brightpearl.order.forget_contact - Delete Goods-Out Note
brightpearl.goods_out_note.delete - Delete Reservation Row
brightpearl.reservation_row.delete - Delete Customer Payment
brightpearl.customer_payment.delete - Delete Product Supplier
brightpearl.product_supplier.delete - Delete Supplier Payment
brightpearl.supplier_payment.delete - Delete Contact Group Member
brightpearl.contact_group_member.delete
A destructive action runs only with confirm: true. Under the human policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.
Delete Zone?
intent: the user asked me to delete Zone
account { op: "keys.create", name: "brightpearl-agent", allowed_actions: ["brightpearl.*"], cap_calls: 2000, confirm_policy: "human_for_writes", approval_rules: [ { match: "brightpearl.zone.delete", approver: "[email protected]" }, { match: "brightpearl.contact.forget", approver: "[email protected]" }, { match: "brightpearl.webhook.delete", approver: "[email protected]" } ]}Cost
What Brightpearl by Sage costs on actionlake.
Every Brightpearl by Sage action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call Brightpearl by Sage refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.
- 1upstream call per actionall 215 Brightpearl by Sage actions
- 215actions pageeach page of a long list is one call
- 111reads can be cacheda cache hit costs nothing
- 100,000calls a month, freepaid plans from US$49 a month for 250,000
Action index
Every Brightpearl by Sage action.
215 actions by area: the id your agent calls, what it does, and its effect.
Warehouse55
brightpearl.asset_value_correction.createCreate Asset Value Correctionwritebrightpearl.bundle_availability.getGet Bundle Availabilityreadbrightpearl.default_location.getGet Default Locationreadbrightpearl.drop_ship_note.add_eventAdd events to a drop-ship notewritebrightpearl.drop_ship_note.createCreate Drop-Ship Notewritebrightpearl.drop_ship_note.getGet Drop-Ship Notereadbrightpearl.external_transfer.createCreate External Transferwritebrightpearl.fulfilment_source.getGet Fulfilment Sourcereadbrightpearl.goods_in_note.correctCorrect a goods-in notewritebrightpearl.goods_in_note.createCreate Goods-In Notewritebrightpearl.goods_in_note.deleteDelete Goods-In Notedestructivebrightpearl.goods_in_note.getGet Goods-In Notereadbrightpearl.goods_in_note.searchSearch Goods-In Notereadbrightpearl.goods_movement.searchSearch Goods Movementreadbrightpearl.goods_out_note.add_eventAdd events to a goods-out notewritebrightpearl.goods_out_note.createCreate Goods-Out Notewritebrightpearl.goods_out_note.deleteDelete Goods-Out Notedestructivebrightpearl.goods_out_note.getGet Goods-Out Notereadbrightpearl.goods_out_note.searchSearch Goods-Out Notereadbrightpearl.goods_out_note.updateUpdate Goods-Out Notewritebrightpearl.internal_transfer.createCreate Internal Transferwritebrightpearl.location.createCreate Locationwritebrightpearl.location.deleteDelete Locationdestructivebrightpearl.location.getGet Locationreadbrightpearl.location.searchSearch Locationreadbrightpearl.order_fulfilment_status.getGet Order fulfilment statusreadbrightpearl.pick.createCreate Pickwritebrightpearl.product_availability.getGet Product Availabilityreadbrightpearl.quarantine.releaseRelease stock from quarantinewritebrightpearl.quarantine_location.getGet Quarantine Locationreadbrightpearl.reservation.createCreate Reservationwritebrightpearl.reservation.deleteDelete Reservationdestructivebrightpearl.reservation.getGet Reservationreadbrightpearl.reservation.updateUpdate Reservationwritebrightpearl.reservation_row.deleteDelete Reservation Rowdestructivebrightpearl.reservations.getGet Reservationsreadbrightpearl.shipping_method.createCreate Shipping Methodwritebrightpearl.shipping_method.getGet Shipping Methodreadbrightpearl.shipping_method.searchSearch Shipping Methodreadbrightpearl.stock_correction.createCreate Stock Correctionwritebrightpearl.stock_correction.getGet Stock Correctionreadbrightpearl.stock_transfer.createCreate Stock Transferwritebrightpearl.stock_transfer.getGet Stock Transferreadbrightpearl.warehouse.createCreate Warehousewritebrightpearl.warehouse.deleteDelete Warehousedestructivebrightpearl.warehouse.getGet Warehousereadbrightpearl.warehouse.searchSearch Warehousereadbrightpearl.warehouse.updateUpdate Warehousewritebrightpearl.warehouse_defaults.getGet Warehouse Defaultsreadbrightpearl.warehouse_defaults.updateUpdate Warehouse Defaultswritebrightpearl.zone.createCreate Zonewritebrightpearl.zone.deleteDelete Zonedestructivebrightpearl.zone.getGet Zonereadbrightpearl.zone.patchPatch Zonewritebrightpearl.zone.searchSearch Zoneread
Products49
brightpearl.brand.createCreate Brandwritebrightpearl.brand.getGet Brandreadbrightpearl.brand.searchSearch Brandreadbrightpearl.brightpearl_category.createCreate Brightpearl Categorywritebrightpearl.brightpearl_category.getGet Brightpearl Categoryreadbrightpearl.brightpearl_category.searchSearch Brightpearl Categoryreadbrightpearl.channel.getGet Channelreadbrightpearl.channel_brand.getGet Channel brandreadbrightpearl.collection.searchSearch Collectionreadbrightpearl.discount_contact_usage.getGet Discount contact usagereadbrightpearl.discount_total_usage.getGet Discount total usagereadbrightpearl.option.createCreate Optionwritebrightpearl.option.getGet Optionreadbrightpearl.option.searchSearch Optionreadbrightpearl.option_value.createCreate Option Valuewritebrightpearl.option_value.getGet Option Valuereadbrightpearl.option_value.searchSearch Option Valuereadbrightpearl.price_list.getGet Price Listreadbrightpearl.product.createCreate Productwritebrightpearl.product.getGet Productreadbrightpearl.product.searchSearch Productreadbrightpearl.product.updateUpdate Productwritebrightpearl.product.urisGet request URIs for Productreadbrightpearl.product_bundle.getGet Product Bundlereadbrightpearl.product_custom_field.getGet Custom Fieldreadbrightpearl.product_custom_field.patchPatch Custom Fieldwritebrightpearl.product_custom_field_metadata.getGet Custom Field Metadatareadbrightpearl.product_custom_fields.getGet Product Custom Fieldreadbrightpearl.product_group.getGet Product Groupreadbrightpearl.product_group.updateUpdate Product Groupwritebrightpearl.product_identity.updateUpdate Product Identitywritebrightpearl.product_option_value.getGet Product option valuereadbrightpearl.product_option_value.urisGet request URIs for Product option valuereadbrightpearl.product_price.getGet product prices (every price list)readbrightpearl.product_price.get_by_price_listGet product prices for given price listsreadbrightpearl.product_price.updateUpdate Product Pricewritebrightpearl.product_price.urisGet request URIs for Product Pricereadbrightpearl.product_price.uris_by_price_listGet request URIs for Product Pricereadbrightpearl.product_primary_supplier.updateUpdate Product Primary Supplierwritebrightpearl.product_supplier.createCreate Product Supplierwritebrightpearl.product_supplier.deleteDelete Product Supplierdestructivebrightpearl.product_supplier.getGet Product Supplierreadbrightpearl.product_type.createCreate Product Typewritebrightpearl.product_type.getGet Product Typereadbrightpearl.product_type.searchSearch Product Typereadbrightpearl.product_type_option_association.createAssociate options with product typeswritebrightpearl.season.createCreate Seasonwritebrightpearl.season.getGet Seasonreadbrightpearl.season.searchSearch Seasonread
Accounting36
brightpearl.accounting_period.createCreate Accounting Periodwritebrightpearl.accounting_period.getGet Accounting Periodreadbrightpearl.accounting_period_lock.getGet Accounting Period Lockreadbrightpearl.all_transaction_statement.searchSearch All transaction statementreadbrightpearl.contact_balance.getGet Contact balancereadbrightpearl.currency.searchSearch Currencyreadbrightpearl.customer_payment.createCreate Customer Paymentwritebrightpearl.customer_payment.deleteDelete Customer Paymentdestructivebrightpearl.customer_payment.searchSearch Customer Paymentreadbrightpearl.exchange_rate.createCreate Exchange Ratewritebrightpearl.exchange_rate.getGet Exchange Ratereadbrightpearl.exchange_rate.updateUpdate Exchange Ratewritebrightpearl.journal.createCreate a journal (deprecated)writebrightpearl.journal.getGet Journalreadbrightpearl.journal.searchSearch Journalreadbrightpearl.journal_entry.createCreate Journal Entrywritebrightpearl.landed_cost_allocation.createCreate Landed Cost Allocationwritebrightpearl.nominal_code.getGet Nominal Codereadbrightpearl.nominal_code.searchSearch Nominal Codereadbrightpearl.payment_method.createCreate Payment Methodwritebrightpearl.payment_method.getGet Payment Methodreadbrightpearl.payment_method.searchSearch Payment Methodreadbrightpearl.payment_method.updateUpdate Payment Methodwritebrightpearl.purchase_credit_invoice.createCreate Purchase Creditwritebrightpearl.purchase_invoice.createCreate Purchase Invoicewritebrightpearl.purchase_payment.createCreate Purchase Paymentwritebrightpearl.purchase_payment_total.getGet Purchase Payment Totalreadbrightpearl.sale_payment_total.getGet Sale Payment Totalreadbrightpearl.sales_credit_invoice.createCreate Sales Creditwritebrightpearl.sales_invoice.createCreate Sales Invoicewritebrightpearl.sales_receipt.createCreate Sales Receiptwritebrightpearl.sales_receipt_legacy.createCreate a sales receipt (deprecated endpoint)writebrightpearl.supplier_payment.createCreate Supplier Paymentwritebrightpearl.supplier_payment.deleteDelete Supplier Paymentdestructivebrightpearl.supplier_payment.searchSearch Supplier Paymentreadbrightpearl.tax_code.getGet Tax Coderead
Orders35
brightpearl.landed_cost_estimate.getGet Landed Cost Estimatereadbrightpearl.order.acknowledgeAcknowledge an orderwritebrightpearl.order.createCreate Orderwritebrightpearl.order.forget_contactForget (anonymise) a contact's ordersdestructivebrightpearl.order.getGet Orderreadbrightpearl.order.patchPatch Orderwritebrightpearl.order.searchSearch Orderreadbrightpearl.order.set_statusUpdate the status of an orderwritebrightpearl.order.urisGet request URIs for Orderreadbrightpearl.order_custom_field.getGet Custom Fieldreadbrightpearl.order_custom_field.patchPatch Custom Fieldwritebrightpearl.order_custom_field_metadata.getGet Custom Field Metadatareadbrightpearl.order_note.createCreate Order Notewritebrightpearl.order_note.getGet Order Notereadbrightpearl.order_note.searchSearch Order Notereadbrightpearl.order_row.createCreate Order Rowwritebrightpearl.order_row.deleteDelete Order Rowdestructivebrightpearl.order_row.patchPatch Order Rowwritebrightpearl.order_shipping_status.getGet Order Shipping Statusreadbrightpearl.order_status.createCreate Order Statuswritebrightpearl.order_status.getGet Order Statusreadbrightpearl.order_stock_status.getGet Order Stock Statusreadbrightpearl.order_type.getGet Order Typereadbrightpearl.purchase_credit.closeClose purchase creditswritebrightpearl.purchase_order.closeClose purchase orderswritebrightpearl.sales_credit.closeClose a sales creditwritebrightpearl.sales_credit.createCreate Sales Creditwritebrightpearl.sales_credit.getGet Sales Creditreadbrightpearl.sales_credit.urisGet request URIs for Sales Creditreadbrightpearl.sales_order.closeClose a sales orderwritebrightpearl.sales_order.createCreate Sales Orderwritebrightpearl.sales_order.getGet Sales Orderreadbrightpearl.sales_order.searchSearch Sales Orderreadbrightpearl.sales_order.urisGet request URIs for Sales Orderreadbrightpearl.sales_order_row.updateUpdate Sales Order Rowwrite
Contacts32
brightpearl.company.createCreate Companywritebrightpearl.company.getGet Companyreadbrightpearl.company.searchSearch Companyreadbrightpearl.company.updateUpdate Companywritebrightpearl.contact.createCreate Contactwritebrightpearl.contact.forgetForget (anonymise) a contactdestructivebrightpearl.contact.getGet Contactreadbrightpearl.contact.patchPatch Contactwritebrightpearl.contact.searchSearch Contactreadbrightpearl.contact.urisGet request URIs for Contactreadbrightpearl.contact_custom_field.getGet Custom Fieldreadbrightpearl.contact_custom_field.patchPatch Custom Fieldwritebrightpearl.contact_custom_field_metadata.getGet Custom Field Metadatareadbrightpearl.contact_group.createCreate Contact Groupwritebrightpearl.contact_group.getGet Contact Groupreadbrightpearl.contact_group.searchSearch Contact Groupreadbrightpearl.contact_group.updateUpdate Contact Groupwritebrightpearl.contact_group_member.createCreate Contact Group Memberwritebrightpearl.contact_group_member.deleteDelete Contact Group Memberdestructivebrightpearl.contact_group_member.getGet Contact Group Memberreadbrightpearl.contact_group_member.searchSearch Contact Group Memberreadbrightpearl.contact_note.createCreate Contact Notewritebrightpearl.contact_postal_address.updateUpdate Contact Postal Addresswritebrightpearl.contact_status.updateUpdate Contact Statuswritebrightpearl.contact_tag.createAdd tags to contactswritebrightpearl.contact_tag.deleteRemove a tag from contactsdestructivebrightpearl.lead_source.getGet Lead Sourcereadbrightpearl.postal_address.createCreate Postal Addresswritebrightpearl.postal_address.getGet Postal Addressreadbrightpearl.postal_address.updateUpdate Postal Addresswritebrightpearl.project.getGet Projectreadbrightpearl.tag.getGet Tagread
Integration7
brightpearl.account_configuration.getGet Account Configurationreadbrightpearl.integration_instance.getGet Integration Instancereadbrightpearl.integration_instance.updateUpdate Integration Instancewritebrightpearl.webhook.createCreate Webhookwritebrightpearl.webhook.deleteDelete Webhookdestructivebrightpearl.webhook.getGet Webhookreadbrightpearl.webhook.simulateSimulate a webhookwrite
Pricing1
brightpearl.customer_product_price.getGet Customer Product Priceread
Questions
The Brightpearl by Sage MCP server, answered.
Is there a Brightpearl by Sage MCP server for Claude?
Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 215 Brightpearl by Sage actions across warehouse, products, accounting and orders, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Brightpearl by Sage.
What do I need to connect Brightpearl by Sage?
Brightpearl private app reference, e.g. `myaccount_myapp` (Brightpearl > App Store > Private apps) and The staff token generated when the private app was added. Plus your account code and your datacenter. The free call account { op: "connections.requirements", service: "brightpearl" } lists exactly what to paste.
Can an AI agent delete or change things in Brightpearl by Sage?
Only if its key allows it, and only with an explicit confirmation. 16 Brightpearl by Sage actions are destructive, including delete Zone, forget (anonymise) a contact and delete Webhook. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.
Will an AI agent use up my Brightpearl by Sage API limit?
actionlake paces every call to the limits in the Brightpearl by Sage service file: 200 calls a minute per connection. Repeated reads are answered from cache (111 Brightpearl by Sage actions can be), which never reaches Brightpearl by Sage.
What does a Brightpearl by Sage action cost?
One upstream call, the only unit actionlake bills. A list that pages bills one call per page (215 Brightpearl by Sage actions page). Cache hits, searches, dry runs and calls Brightpearl by Sage refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.
Which Brightpearl by Sage API does it cover?
The Brightpearl public API (api-docs.brightpearl.com, scraped 2026-10-23) at euw1.brightpearlconnect.com/public-api by default, or the base URL set when you connect. It is built from Brightpearl by Sage's documentation as read on 23 October 2026. 215 actions in 7 areas, each one in the signed service file (version 1.0.0).
Does actionlake keep my Brightpearl by Sage data, and where?
actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to 5 minutes, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Brightpearl by Sage credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.
Which AI clients can use it?
Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.
Give your agent Brightpearl by Sage today.
Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.