Skip to content

Connectors · Accounting & finance

NetSuite MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to NetSuite and the rest of your systems. It gives your agent 458 NetSuite actions (147 reads, 245 writes and 66 that wait for a confirmation) and holds the NetSuite credential itself, so the agent never does. It paces NetSuite's limits and records every call. Connecting NetSuite needs your own NetSuite OAuth app and one admin sign-in.

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/mcp
the first call
do {  action: "netsuite.views.credit_memos",  intent: "check which NetSuite account is connected"}# List credit memos with amounts · read · 1 upstream call
  • 458actionsin one signed file
  • 147readlook, never change
  • 245writecreate and update
  • 66wait for a yesdestructive, confirmed first

Set up

Connect NetSuite in three steps.

  1. 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
  2. 02

    Connect NetSuite.

    OAuth 2.0, authorization code with PKCE. You register your own OAuth app with NetSuite, an admin signs in once, and you paste the app's client id and secret and the tokens from that sign-in; actionlake renews the access token from then on. actionlake stores what you paste write-only, sealed under your tenant's key.

    Before the first sign-in, NetSuite needs an OAuth app of your own, registered in its developer portal. actionlake has no NetSuite app to lend you.

    • access_tokenAccess token from one sign-in with your own OAuth app
    • refresh_tokenRefresh token from the same sign-in; the access token is renewed from it
    • client_idNetSuite integration record Client ID (Consumer Key)
    • client_secretNetSuite integration record Client Secret (Consumer Secret)
    • account_hostWhere your NetSuite lives: your account host
    account { op: "connections.requirements", service: "netsuite" }
    # free: exactly what to paste, and what is found for you
  3. 03

    Make the first call. Check before a write.

    Ask in plain words; Claude picks the action. Before anything changes, check validates the call and prices it, for free.

    do    { action: "netsuite.views.credit_memos" }# list credit memos with amounts · read · 1 upstream callcheck { action: "netsuite.invoices.create", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent

NetSuite at a glance

Sign-in
OAuth 2.0, authorization code with PKCE. You register your own OAuth app with NetSuite, an admin signs in once, and you paste the app's client id and secret and the tokens from that sign-in; actionlake renews the access token from then on.
You provide
access_tokenrefresh_tokenclient_idclient_secret
Setup fields
account_host
Limits we pace to
10 calls a second, per connection
API covered
Oracle NetSuite API v1, at your NetSuite instance's API base URL, which you enter when connecting (path /services/rest)
Built from
NetSuite's documentation, read 18 September 2026docs.oracle.com
Service file
Version 1.0.0, signed (Ed25519)
Cached reads
147 of 147 reads, for up to an hour; a write clears what it affects
Ready-made plans
10 in the store
Shared entities
12, so ask can line NetSuite up with your other systems
Data
Processed and stored in Sydney, Australia. No US region yet

Capabilities

What an AI agent can do in NetSuite.

458 actions in 1 area. Every one carries its effect, so a key can allow the reads and hold the rest.

  • 147readlook, never change
  • 245writecreate and update
  • 66destructivewait for a confirmation
  1. ERP

    458

    147 read · 245 write · 66 destructive

    List credit memos with amounts · List subsidiaries · Create an invoice · Create a customer deposit

Top actions

The NetSuite API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 234 of NetSuite's 261 action names are shared with at least one other connector, so an agent learns them once.

ActionWhat it doesEffectSame name in
netsuite.views.credit_memosList credit memos with amountsList credit memos with amounts — a SuiteQL read returning real column values.readfinance.credit_note.list33 connectors
netsuite.views.subsidiariesList subsidiariesList subsidiaries — a SuiteQL read returning real column values.readfinance.tracking_category.list15 connectors
netsuite.invoices.createCreate an invoicePOST a new invoice record.writefinance.invoice.create74 connectors
netsuite.vendor_payments.createCreate a vendor paymentPOST a new vendor payment record.writefinance.payment.create67 connectors
netsuite.customer_deposits.createCreate a customer depositPOST a new customer deposit record.writefinance.payment.create67 connectors
netsuite.views.invoicesList invoices with amounts and statusList invoices with amounts and status — a SuiteQL read returning real column values.readfinance.invoice.query10 connectors
netsuite.estimates.createCreate an estimate (quote)POST a new estimate (quote) record.writefinance.quote.create52 connectors
netsuite.purchase_orders.createCreate a purchase orderPOST a new purchase order record.writefinance.purchase_order.create43 connectors
netsuite.credit_memos.listList credit memosList credit memo records, optionally filtered with the q grammar.readfinance.credit_note.list33 connectors
netsuite.accounts.createCreate a GL accountPOST a new GL account record.writefinance.ledger_account.create32 connectors
netsuite.views.estimatesList estimates (quotes) with amountsList estimates (quotes) with amounts — a SuiteQL read returning real column values.readfinance.quote.query5 connectors
netsuite.invoices.deleteDelete an invoiceDELETE a invoice record.destructivefinance.invoice.delete56 connectors

Try it

Prompts to paste into Claude.

Each one names the NetSuite actions it will call, so you know what it reads and what it changes before you send it.

  1. Readread

    Which NetSuite invoices are more than 30 days overdue? Group them by customer with the total owed.

    callsnetsuite.views.invoices

  2. Planwrite

    Run the month-end close readiness check in NetSuite. Ask me before anything is sent or changed.

    callsnetsuite.accounting_periods.listnetsuite.journal_entries.listnetsuite.expense_reports.listnetsuite.subsidiaries.listnetsuite.suiteql.query+1 more

  3. Planwrite

    Convert a won opportunity into a sales order in NetSuite.

    callsnetsuite.opportunities.getnetsuite.customers.listnetsuite.opportunities.updatenetsuite.transforms.opportunity_to_sales_ordernetsuite.views.opportunities

  4. Writewrite

    Create an invoice in NetSuite. Show me exactly what you will send before you save it.

    callsnetsuite.invoices.create

  5. Across systemsread

    For each customer, how many invoices are in NetSuite and how many tickets in ConnectWise PSA?

    callsnetsuite.views.invoicesconnectwise_manage.tickets.list

Across your systems

NetSuite, joined to the rest of your business.

One ask fetches from NetSuite and another system, joins the rows on the same customer on our side, and hands your agent the answer, not every row.

  • For each customer, how many invoices are in NetSuite and how many tickets in ConnectWise PSA?

    netsuite.views.invoices + connectwise_manage.tickets.list, on crm.company · ConnectWise PSA

  • For each customer, how many invoices are in NetSuite and how many tickets in HubSpot CRM?

    netsuite.views.invoices + hubspot_crm.tickets.list, on crm.company · HubSpot CRM

Also mapped by other connectorscrm.contact 192finance.invoice 91hr.employee 63service.ticket 62finance.payment 53finance.quote 45crm.deal 43finance.purchase_order 35
ask
ask {  intent: "for each customer, how many invoices are in NetSuite and how many tickets in ConnectWise PSA",  steps: [    { action: "netsuite.views.invoices", as: "inv", input: {}, limit: 100, max_pages: 5 },    { action: "connectwise_manage.tickets.list", as: "tix", input: {}, limit: 100, max_pages: 5 },    { join: {        left: "inv",        right: "tix",        on: "crm.company",        group_by: "inv.company_name",        select: ["inv.company_name", "count(inv.id) as invoices", "count(tix.id) as tickets"]    } }  ]}
Example. Run it through check first: it validates the steps and prices them, and it is free.

The plan store

Ready-made plans for NetSuite.

10 plans in the store. Install one and your agent runs it by name; the reply says which connections are still missing. A schedule can run a plan on a timetable. There are no triggers or webhooks, by design.

  1. Build an accounts receivable ageing snapshot

    Use it when Someone asks who owes money, how much is overdue, or wants an AR ageing summary out of NetSuite.

    Effect
    read
    Steps
    4
    Install
    netsuite-ar-aging-report
  2. Convert an accepted estimate into an invoice after sign-off

    Use it when A customer has accepted an estimate and finance wants it billed as an invoice once someone signs off.

    A person decidesConvert estimate estimate id into a customer invoice in NetSuite.

    Effect
    write
    Steps
    4
    Needs
    estimate id
    Install
    netsuite-estimate-to-invoice-with-approval
  3. Upsert a customer and its contacts from an external system

    Use it when A customer and its contacts exist in another system and need to be created or refreshed in NetSuite without duplicating records.

    Effect
    write
    Steps
    4 · loops
    Needs
    contacts, customer and external id
    Install
    netsuite-sync-customer-from-crm
  4. Pay approved vendor bills in one run

    Use it when Accounts payable wants to settle a batch of outstanding vendor bills after a person approves the run.

    A person decidesCreate vendor payments for the open vendor bills listed in this run.

    Effect
    write
    Steps
    4 · loops
    Install
    netsuite-vendor-bill-payment-run
  5. Review low stock and raise a replenishment purchase order

    Use it when Stock levels need checking and a replenishment purchase order should be raised for items under their reorder point.

    A person decidesRaise a replenishment purchase order with vendor vendor id for the items below reorder point.

    Effect
    write
    Steps
    5
    Needs
    lines and vendor id
    Install
    netsuite-inventory-reorder-review
  6. Convert a won opportunity into a sales order

    Use it when A sales opportunity has been won and should become a real sales order in NetSuite.

    Effect
    write
    Steps
    5
    Needs
    opportunity id
    Install
    netsuite-opportunity-to-order
  7. Raise a fulfillment request for a sales order

    Use it when A sales order is ready to ship and someone wants it pushed to the warehouse and watched until it is fulfilled.

    Effect
    write
    Steps
    5
    Needs
    sales order id
    Install
    netsuite-order-to-fulfillment
  8. Receive a transfer order and reconcile it against the purchase order

    Use it when Stock has arrived against a purchase order or transfer order and needs receipting and referencing in NetSuite.

    Effect
    write
    Steps
    5
    Needs
    purchase order id and transfer order id
    Install
    netsuite-purchase-order-receipt
  9. Turn an approved return into a customer credit memo

    Use it when Goods have come back under a return authorization and the customer now needs a credit memo raised.

    A person decidesIssue a credit memo against return authorization return id.

    Effect
    write
    Steps
    5
    Needs
    return id
    Install
    netsuite-return-authorization-to-credit
  10. Run the month-end close readiness check

    Use it when Month end or quarter end is due and someone needs to see what is outstanding before locking the accounting period.

    A person decidesClose the accounting period despite the outstanding transactions listed above.

    Effect
    write
    Steps
    7
    Needs
    period and period external id
    Install
    netsuite-period-close-checklist
install a plan
account { op: "plans.install", slug: "netsuite-ar-aging-report" }
# then ask for it by name; a schedule can run it on a timetable

Governance for NetSuite

Destructive actions wait for a yes.

66 NetSuite actions are destructive. The first 10:

  • Delete an invoicenetsuite.invoices.delete
  • Create a cash refundnetsuite.cash_refunds.create
  • Create a customer refundnetsuite.customer_refunds.create
  • Delete a vendor paymentnetsuite.vendor_payments.delete
  • Delete a customer depositnetsuite.customer_deposits.delete
  • Delete a customer paymentnetsuite.customer_payments.delete
  • Delete an estimate (quote)netsuite.estimates.delete
  • Delete a purchase ordernetsuite.purchase_orders.delete
  • Delete a GL accountnetsuite.accounts.delete
  • Delete a credit memonetsuite.credit_memos.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.

donetsuite.invoices.deleteconfirm_policy: human

Delete an invoice?

intent: the user asked me to delete an invoice

run suspended · waiting for a named person · key netsuite-agent cannot confirm itself
In the console, or from an emailed signed link.
a key for this connector
account {  op: "keys.create", name: "netsuite-agent",  allowed_actions: ["netsuite.*"], cap_calls: 2000,  confirm_policy: "human_for_writes",  approval_rules: [    { match: "netsuite.invoices.delete", approver: "[email protected]" },    { match: "netsuite.cash_refunds.create", approver: "[email protected]" },    { match: "netsuite.customer_refunds.create", approver: "[email protected]" }  ]}
Illustrative. Scoped to NetSuite only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

What NetSuite costs on actionlake.

Every NetSuite action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call NetSuite 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 458 NetSuite actions
  • 81actions pageeach page of a long list is one call
  • 147reads can be cacheda cache hit costs nothing
  • 100,000calls a month, freepaid plans from US$49 a month for 250,000

See pricing

Action index

Every NetSuite action.

458 actions by area: the id your agent calls, what it does, and its effect.

ERP458
  • netsuite.customer_deposits.createCreate a customer depositwrite
  • netsuite.invoices.createCreate an invoicewrite
  • netsuite.views.credit_memosList credit memos with amountsread
  • netsuite.views.subsidiariesList subsidiariesread
  • netsuite.accounting_periods.createCreate an accounting periodwrite
  • netsuite.accounting_periods.deleteDelete an accounting perioddestructive
  • and 452 more in this area

This index shows a sample of each area. All 458 actions, with their inputs and prices, are in the catalogue, which a free sandbox key can search.

Questions

The NetSuite MCP server, answered.

Is there a NetSuite MCP server for Claude?

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 458 NetSuite actions, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by NetSuite.

What do I need to connect NetSuite?

Your own NetSuite OAuth app, registered with NetSuite (its client id and client secret), and the access and refresh tokens from one admin sign-in. actionlake has no NetSuite app of its own, so this is not a one-step consent. actionlake renews the access token as it expires. Plus your account host. The free call account { op: "connections.requirements", service: "netsuite" } lists exactly what to paste.

Can an AI agent delete or change things in NetSuite?

Only if its key allows it, and only with an explicit confirmation. 66 NetSuite actions are destructive, including delete an invoice, create a cash refund and create a customer refund. 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 NetSuite API limit?

actionlake paces every call to the limits in the NetSuite service file: 10 calls a second per connection. Repeated reads are answered from cache (147 NetSuite actions can be), which never reaches NetSuite.

What does a NetSuite action cost?

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (81 NetSuite actions page). Cache hits, searches, dry runs and calls NetSuite 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 NetSuite API does it cover?

The Oracle NetSuite API v1 at your NetSuite instance's API base URL, which you enter when connecting (path /services/rest). It is built from NetSuite's documentation as read on 18 September 2026. 458 actions in 1 area, each one in the signed service file (version 1.0.0).

Can I combine NetSuite with my other systems?

Yes. ask joins NetSuite to ConnectWise PSA or HubSpot CRM on the same customer and returns the answer rather than every row. NetSuite maps crm.contact, which 192 other connectors also map.

Does actionlake keep my NetSuite data, and where?

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to an hour, 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 NetSuite 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 NetSuite today.

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.