NetSuite MCP server
84 operations0 webhooks
Create, read, update, and delete NetSuite records, run SuiteQL, and manage OAuth 2.0 tokens.
Try NetSuite with your agent
Connect NetSuite, then paste this into Claude, ChatGPT or Cursor. For ideas from other apps, see the use cases.
Using Corsair, show me what you can do in NetSuite on my account, then run one read-only example and show me the result.
NetSuite tools and triggers
Tools are what your agent can do in NetSuite through Corsair's MCP server. Triggers are the NetSuite events a routine can start from.
Oauth
- Create Jwt Client AssertionWrite
Create a signed JWT client assertion for OAuth 2.0 client credentials
oauth.createJwtClientAssertion
- Oauth2 Authorize Account DomainRead-only
Build an OAuth 2.0 authorization URL on the account domain
oauth.oauth2AuthorizeAccountDomain
- Oauth2 Authorize System DomainRead-only
Build an OAuth 2.0 authorization URL on the system domain
oauth.oauth2AuthorizeSystemDomain
- Oauth2 Get Jwks KeysRead-only
Retrieve NetSuite OAuth 2.0 JWKS public keys
oauth.oauth2GetJwksKeys
- Oauth2 LogoutWrite
Log out an OAuth 2.0 session using an ID token hint
oauth.oauth2Logout
- Oauth2 Revoke Refresh TokenDestructive
Revoke a NetSuite OAuth 2.0 refresh token
oauth.oauth2RevokeRefreshToken
- Oauth2 Token Authorization CodeWrite
Exchange an OAuth 2.0 authorization code for tokens
oauth.oauth2TokenAuthorizationCode
- Oauth2 Token Client CredentialsWrite
Exchange a JWT client assertion for an OAuth 2.0 access token
oauth.oauth2TokenClientCredentials
- Oauth2 Token RefreshWrite
Refresh a NetSuite OAuth 2.0 access token
oauth.oauth2TokenRefresh
Records
- Create RecordWrite
Create a record of any exposed NetSuite type
records.createRecord
- Get Reference Select FieldRead-only
Retrieve the record referenced by a select-type field
records.getReferenceSelectField
- Get Sublist CollectionRead-only
Retrieve a sublist collection from a NetSuite record
records.getSublistCollection
- Get Sublist LineRead-only
Retrieve a specific line from a NetSuite sublist
records.getSublistLine
- Get SubrecordRead-only
Retrieve a subrecord from a NetSuite parent record
records.getSubrecord
- List RecordsRead-only
List records of any exposed NetSuite type
records.listRecords
- Transform RecordDestructive
Transform a NetSuite record into another record type
records.transformRecord
- Upsert Record By External IdWrite
Upsert a NetSuite record by external ID
records.upsertRecordByExternalId
Customer Payments
- Create Customer PaymentWrite
Create a NetSuite customer payment record
customerPayments.createCustomerPayment
- Delete Customer PaymentDestructive
Delete a NetSuite customer payment record
customerPayments.deleteCustomerPayment
- Get Customer PaymentRead-only
Get a NetSuite customer payment record by ID
customerPayments.getCustomerPayment
- List Customer PaymentsRead-only
List NetSuite customer payment records
customerPayments.listCustomerPayments
- Update Customer PaymentWrite
Update a NetSuite customer payment record
customerPayments.updateCustomerPayment
Employees
- Create EmployeeWrite
Create a NetSuite employee record
employees.createEmployee
- Delete EmployeeDestructive
Delete a NetSuite employee record
employees.deleteEmployee
- Get EmployeeRead-only
Get a NetSuite employee record by internal ID
employees.getEmployee
- List EmployeesRead-only
List NetSuite employee records
employees.listEmployees
- Update EmployeeWrite
Update a NetSuite employee record
employees.updateEmployee
Invoices
- Create InvoiceWrite
Create a NetSuite invoice record
invoices.createInvoice
- Delete InvoiceDestructive
Delete a NetSuite invoice record
invoices.deleteInvoice
- Get InvoiceRead-only
Get a NetSuite invoice record by internal ID
invoices.getInvoice
- List InvoicesRead-only
List NetSuite invoice records
invoices.listInvoices
- Update InvoiceWrite
Update a NetSuite invoice record
invoices.updateInvoice
Journal Entries
- Create Journal EntryWrite
Create a NetSuite journal entry record
journalEntries.createJournalEntry
- Delete Journal EntryDestructive
Delete a NetSuite journal entry record
journalEntries.deleteJournalEntry
- Get Journal EntryRead-only
Get a NetSuite journal entry record by internal ID
journalEntries.getJournalEntry
- List Journal EntriesRead-only
List NetSuite journal entry records
journalEntries.listJournalEntries
- Update Journal EntryWrite
Update a NetSuite journal entry record
journalEntries.updateJournalEntry
Purchase Orders
- Create Purchase OrderWrite
Create a NetSuite purchase order
purchaseOrders.createPurchaseOrder
- Delete Purchase OrderDestructive
Delete a NetSuite purchase order record
purchaseOrders.deletePurchaseOrder
- Get Purchase OrderRead-only
Get a NetSuite purchase order by internal ID
purchaseOrders.getPurchaseOrder
- List Purchase OrdersRead-only
List NetSuite purchase order records
purchaseOrders.listPurchaseOrders
- Update Purchase OrderWrite
Update a NetSuite purchase order record
purchaseOrders.updatePurchaseOrder
Sales Orders
- Create Sales OrderWrite
Create a NetSuite sales order
salesOrders.createSalesOrder
- Delete Sales OrderDestructive
Delete a NetSuite sales order record
salesOrders.deleteSalesOrder
- Get Sales OrderRead-only
Get a NetSuite sales order record by internal ID
salesOrders.getSalesOrder
- List Sales OrdersRead-only
List NetSuite sales order records
salesOrders.listSalesOrders
- Update Sales OrderWrite
Update a NetSuite sales order record
salesOrders.updateSalesOrder
Customers
- Create CustomerWrite
Create a NetSuite customer record
customers.createCustomer
- Delete CustomerDestructive
Delete a NetSuite customer record
customers.deleteCustomer
- Get CustomerRead-only
Get a NetSuite customer record by internal ID
customers.getCustomer
- Update CustomerWrite
Update a NetSuite customer record
customers.updateCustomer
Item Fulfillments
- Delete Item FulfillmentDestructive
Delete a NetSuite item fulfillment record
itemFulfillments.deleteItemFulfillment
- Get Item FulfillmentRead-only
Get a NetSuite item fulfillment record by ID
itemFulfillments.getItemFulfillment
- List Item FulfillmentsRead-only
List NetSuite item fulfillment records
itemFulfillments.listItemFulfillments
- Update Item FulfillmentWrite
Update a NetSuite item fulfillment record
itemFulfillments.updateItemFulfillment
Item Receipts
- Delete Item ReceiptDestructive
Delete a NetSuite item receipt record
itemReceipts.deleteItemReceipt
- Get Item ReceiptRead-only
Get a NetSuite item receipt record by internal ID
itemReceipts.getItemReceipt
- List Item ReceiptsRead-only
List NetSuite item receipt records
itemReceipts.listItemReceipts
- Update Item ReceiptWrite
Update a NetSuite item receipt record
itemReceipts.updateItemReceipt
Items
- Create ItemWrite
Create a NetSuite item record
items.createItem
- Delete ItemDestructive
Delete a NetSuite item record
items.deleteItem
- Get ItemRead-only
Get a NetSuite item record by internal ID
items.getItem
- Update ItemWrite
Update a NetSuite item record
items.updateItem
Vendor Payments
- Delete Vendor PaymentDestructive
Delete a NetSuite vendor payment record
vendorPayments.deleteVendorPayment
- Get Vendor PaymentRead-only
Retrieve a NetSuite vendor payment by internal ID
vendorPayments.getVendorPayment
- List Vendor PaymentsRead-only
List NetSuite vendor payment records
vendorPayments.listVendorPayments
- Update Vendor PaymentWrite
Update a NetSuite vendor payment record
vendorPayments.updateVendorPayment
Async Jobs
- Async Get Job StatusRead-only
Retrieve the status of an asynchronous NetSuite REST job
asyncJobs.asyncGetJobStatus
- Async Get Job TaskRead-only
Retrieve the task reference and status for an asynchronous job
asyncJobs.asyncGetJobTask
- Async Get Job Task ResultRead-only
Retrieve the result of an asynchronous job task
asyncJobs.asyncGetJobTaskResult
Query
- Execute DatasetRead-only
Execute a SuiteAnalytics Workbook dataset
query.executeDataset
- List DatasetsRead-only
List SuiteAnalytics Workbook datasets
query.listDatasets
- Run Suiteql QueryRead-only
Run a SuiteQL query against NetSuite data
query.runSuiteqlQuery
System
- Get Datacenter UrlsRead-only
Discover account-specific NetSuite service domains
system.getDatacenterUrls
- Get Governance LimitsRead-only
Retrieve NetSuite account and integration concurrency limits
system.getGovernanceLimits
- Get Server TimeRead-only
Retrieve the current NetSuite server time in UTC
system.getServerTime
Vendor Bills
- Create Vendor BillWrite
Create a NetSuite vendor bill record
vendorBills.createVendorBill
- Get Vendor BillRead-only
Retrieve a NetSuite vendor bill by internal ID
vendorBills.getVendorBill
- Update Vendor BillWrite
Update a NetSuite vendor bill record
vendorBills.updateVendorBill
Vendors
- Create VendorWrite
Create a NetSuite vendor record
vendors.createVendor
- Get VendorRead-only
Get a single NetSuite vendor record by internal ID
vendors.getVendor
- Update VendorWrite
Update a NetSuite vendor record
vendors.updateVendor
Metadata
- Get Record MetadataRead-only
Retrieve the metadata schema for a NetSuite record type
metadata.getRecordMetadata
- List Metadata CatalogRead-only
List metadata for all exposed NetSuite record types
metadata.listMetadataCatalog
Connect NetSuite to Claude, ChatGPT or Cursor
- 1
Connect NetSuite in Corsair
Sign in to NetSuite once in Corsair. Corsair stores the credential encrypted and makes the NetSuite API calls for your agent, so it never goes into a prompt or a config file. Connect NetSuite
If your link lets the agent add apps, you can skip this: it gives you a sign-in link the first time it needs NetSuite. On a ChatGPT personal plan, connect NetSuite here first.
- 2
Add Corsair's MCP server to your agent
Every client uses the same address:
https://mcp.corsair.dev/mcpOpen Customize → Connectors → Add custom connector, paste the address, then select Connect.Add a custom MCP server with the address and choose OAuth. Personal plans get read tools only.Add to CursorOr add this to~/.cursor/mcp.json. Cursor opens Corsair to sign in the first time it connects.{ "mcpServers": { "corsair": { "url": "https://mcp.corsair.dev/mcp" } } }Run this, then run/mcpin Claude Code to sign in.claude mcp add --transport http corsair https://mcp.corsair.dev/mcpCodex, Gemini CLI, VS Code, Zed and other clients with OAuth sign-in work the same way. Clients without it, such as GitHub Copilot's coding agent, use a link's own address and an API key. Setup for every client
- 3
Sign in and choose what needs your approval
Your client opens Corsair to sign in. Pick a link: the apps your agent can use and a mode that decides what it may do without asking. In the default Cautious mode, NetSuite's read and write operations run right away and its 13 destructive operations wait for your approval. Strict mode asks before every write and refuses destructive operations, and Read mode allows reads only.
FAQ
Install corsair and @corsair-dev/netsuite, add the NetSuite plugin, and connect with OAuth. Then call methods like corsair.netsuite.api.asyncJobs.asyncGetJobStatus() from your app. Corsair stores tokens, and syncs data per tenant.
Yes. NetSuite needs an OAuth app with scopes that match what you automate. Register the app in NetSuite, configure redirect URLs, then connect through Corsair or managed OAuth in Hub.
Yes. One Corsair client can hit NetSuite, GitHub, Notion, Stripe, and the rest. Trigger NetSuite from a webhook, push updates to Slack, or chain actions across plugins. Same tenant context across integrations, plain TypeScript.
Teams use Corsair for create, read, update, and delete netsuite records, run suiteql, and manage oauth 2.0 tokens. Common builds include sync jobs, admin tooling, and agents that call NetSuite APIs from your backend. Local DB entities let you query synced NetSuite records without hitting the API on every read.
The SDK is open source. Self-host and you pay Corsair nothing for the integration layer. Hub bills for hosted auth and execution, not per NetSuite API call. Hub has a generous free tier. For hobby projects you can probably run the whole thing on free. Paid plans start to matter with more tenants or heavier traffic.
We maintain @corsair-dev/netsuite in the open repo. When NetSuite ships API changes, upgrade the package. Your call sites stay typed. You should not need to rewrite the integration layer each time.
No. Corsair does not read your NetSuite data or hold individual access credentials. Credentials stay in your database. API calls run on your instance. We do not store NetSuite data on your behalf.
Yes. Add https://mcp.corsair.dev/mcp as a custom connector or MCP server in Claude, ChatGPT, Cursor, VS Code, Claude Code, Codex or any client that supports remote MCP servers with OAuth sign-in, then sign in to Corsair. On ChatGPT personal plans, custom servers currently get read tools only.
Yes. Put NetSuite on a link in Strict mode and every write waits for your approval, while destructive actions are refused. The default Cautious mode asks only before the 13 destructive NetSuite operations. You can change a link's mode at hub.corsair.dev/me.