---
title: "NetSuite MCP server for AI agents - actionlake"
description: "Give Claude 458 NetSuite actions through one MCP server: views, invoices, vendor payments. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/netsuite
updated: 2026-10-10
---

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.

[Connect NetSuite free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

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
```

- 458 actions in one signed file
- 147 read look, never change
- 245 write create and update
- 66 wait for a yes destructive, 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_token` Access token from one sign-in with your own OAuth app
   - `refresh_token` Refresh token from the same sign-in; the access token is renewed from it
   - `client_id` NetSuite integration record Client ID (Consumer Key)
   - `client_secret` NetSuite integration record Client Secret (Consumer Secret)
   - `account_host` Where 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 call
   check { 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_token` `refresh_token` `client_id` `client_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 2026[docs.oracle.com](https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/chapter_1540809676.html)

**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.

- **147** read look, never change
- **245** write create and update
- **66** destructive wait 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.

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `netsuite.views.credit_memos` List credit memos with amounts | List credit memos with amounts — a SuiteQL read returning real column values. | read | `finance.credit_note.list` 33 connectors |
| `netsuite.views.subsidiaries` List subsidiaries | List subsidiaries — a SuiteQL read returning real column values. | read | `finance.tracking_category.list` 15 connectors |
| `netsuite.invoices.create` Create an invoice | POST a new invoice record. | write | `finance.invoice.create` 74 connectors |
| `netsuite.vendor_payments.create` Create a vendor payment | POST a new vendor payment record. | write | `finance.payment.create` 67 connectors |
| `netsuite.customer_deposits.create` Create a customer deposit | POST a new customer deposit record. | write | `finance.payment.create` 67 connectors |
| `netsuite.views.invoices` List invoices with amounts and status | List invoices with amounts and status — a SuiteQL read returning real column values. | read | `finance.invoice.query` 10 connectors |
| `netsuite.estimates.create` Create an estimate (quote) | POST a new estimate (quote) record. | write | `finance.quote.create` 52 connectors |
| `netsuite.purchase_orders.create` Create a purchase order | POST a new purchase order record. | write | `finance.purchase_order.create` 43 connectors |
| `netsuite.credit_memos.list` List credit memos | List credit memo records, optionally filtered with the q grammar. | read | `finance.credit_note.list` 33 connectors |
| `netsuite.accounts.create` Create a GL account | POST a new GL account record. | write | `finance.ledger_account.create` 32 connectors |
| `netsuite.views.estimates` List estimates (quotes) with amounts | List estimates (quotes) with amounts — a SuiteQL read returning real column values. | read | `finance.quote.query` 5 connectors |
| `netsuite.invoices.delete` Delete an invoice | DELETE a invoice record. | destructive | `finance.invoice.delete` 56 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. Read read
   Which NetSuite invoices are more than 30 days overdue? Group them by customer with the total owed.
   calls `netsuite.views.invoices`
2. Plan write
   Run the month-end close readiness check in NetSuite. Ask me before anything is sent or changed.
   calls `netsuite.accounting_periods.list` `netsuite.journal_entries.list` `netsuite.expense_reports.list` `netsuite.subsidiaries.list` `netsuite.suiteql.query` +1 more
3. Plan write
   Convert a won opportunity into a sales order in NetSuite.
   calls `netsuite.opportunities.get` `netsuite.customers.list` `netsuite.opportunities.update` `netsuite.transforms.opportunity_to_sales_order` `netsuite.views.opportunities`
4. Write write
   Create an invoice in NetSuite. Show me exactly what you will send before you save it.
   calls `netsuite.invoices.create`
5. Across systems read
   For each customer, how many invoices are in NetSuite and how many tickets in ConnectWise PSA?
   calls `netsuite.views.invoices` `connectwise_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](https://actionlake.com/connectors/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](https://actionlake.com/connectors/hubspot-crm)

Also mapped by other connectors `crm.contact` **192** `finance.invoice` **91** `hr.employee` **63** `service.ticket` **62** `finance.payment` **53** `finance.quote` **45** `crm.deal` **43** `finance.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 decides Convert 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 decides Create 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 decides Raise 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 decides Issue 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 decides Close 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 invoice `netsuite.invoices.delete`
- Create a cash refund `netsuite.cash_refunds.create`
- Create a customer refund `netsuite.customer_refunds.create`
- Delete a vendor payment `netsuite.vendor_payments.delete`
- Delete a customer deposit `netsuite.customer_deposits.delete`
- Delete a customer payment `netsuite.customer_payments.delete`
- Delete an estimate (quote) `netsuite.estimates.delete`
- Delete a purchase order `netsuite.purchase_orders.delete`
- Delete a GL account `netsuite.accounts.delete`
- Delete a credit memo `netsuite.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.

do netsuite.invoices.delete confirm_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: "lead@example.com" },
    { match: "netsuite.cash_refunds.create", approver: "lead@example.com" },
    { match: "netsuite.customer_refunds.create", approver: "lead@example.com" }
  ]
}
```

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.

- 1 upstream call per action all 458 NetSuite actions
- 81 actions page each page of a long list is one call
- 147 reads can be cached a cache hit costs nothing
- 100,000 calls a month, free paid plans from US$49 a month for 250,000

[See pricing](https://actionlake.com/pricing)

Action index

## Every NetSuite action.

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

**ERP 458**

- `netsuite.customer_deposits.create` Create a customer deposit write
- `netsuite.invoices.create` Create an invoice write
- `netsuite.views.credit_memos` List credit memos with amounts read
- `netsuite.views.subsidiaries` List subsidiaries read
- `netsuite.accounting_periods.create` Create an accounting period write
- `netsuite.accounting_periods.delete` Delete an accounting period destructive
- 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](https://actionlake.com/console/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.

## More connectors like NetSuite

Shares the most action names with

- [Zoho Books 103](https://actionlake.com/connectors/zoho-books)
- [Unified.to 97](https://actionlake.com/connectors/unified-to)
- [ERPNext (Frappe) 74](https://actionlake.com/connectors/erpnext-frappe)
- [QuickBooks Online 67](https://actionlake.com/connectors/quickbooks-online)
- [Holded 66](https://actionlake.com/connectors/holded)
- [Zoho Billing 66](https://actionlake.com/connectors/zoho-billing)

Joins with, on shared entities

- [HaloPSA 7](https://actionlake.com/connectors/halopsa)
- [Zoho CRM 6](https://actionlake.com/connectors/zoho-crm)
- [Syncro 6](https://actionlake.com/connectors/syncro)
- [RepairShopr 6](https://actionlake.com/connectors/repairshopr)
- [ConnectWise PSA 5](https://actionlake.com/connectors/connectwise-psa)
- [Microsoft Dynamics 365 5](https://actionlake.com/connectors/microsoft-dynamics-365)

Browse

- [All Accounting & finance connectors](https://actionlake.com/connectors/category/accounting-and-finance)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

actionlake is independent. It is not made or endorsed by NetSuite; the name is the vendor's own. Counts are from the NetSuite service file, version 1.0.0.

## Give your agent NetSuite today.

[Connect NetSuite free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

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

---

Source: https://actionlake.com/connectors/netsuite
More: https://actionlake.com/llms.txt
