Connect your AI Agents to NetSuite in minutes

Available tools
list_accounts
List NetSuite accounts (chart of accounts) with pagination. Returns account names, numbers, and types. Use offset/limit for next page. Use q to search by name or number.
get_account
Get a NetSuite account by internal ID. Returns full account details including name, number, type, and balance. Use list_accounts to find valid IDs. Optionally specify fields to return only specific properties.
list_contacts
List NetSuite contacts with pagination. Use offset/limit for next page. Returns items array and page_info with has_next_page and offset for the next request.
get_contact
Get a NetSuite contact by internal ID. Returns full record details. Use list_contacts to find valid IDs. Optionally specify fields to return only specific properties.
create_contact
Create a new NetSuite contact. Use list_customers for valid company IDs. Returns the new record ID on success.
update_contact
Update an existing NetSuite contact. Use get_contact to check current values first. Only provided fields will be updated.
delete_contact
Delete a NetSuite contact by ID. This action cannot be undone. Use get_contact to verify the record first.
list_credit_memos
List NetSuite credit memos with pagination. Use offset/limit for next page. Use q to search. Returns items array and page_info with has_next_page and offset for the next request.
get_credit_memo
Get a NetSuite credit memo by internal ID. Use list_credit_memos to find valid IDs. Use expandSubResources to see line items. Optionally specify fields to return only specific properties.
create_credit_memo
Create a new NetSuite credit memo. Requires entity (customer ref). Use list_customers for valid IDs. Returns the new record ID on success.
update_credit_memo
Update an existing NetSuite credit memo. Use get_credit_memo to check current values first. Only provided fields will be updated.
delete_credit_memo
Delete a NetSuite credit memo by ID. This action cannot be undone. Use get_credit_memo to verify the record first.
list_customers
List NetSuite customers with pagination. Use offset/limit for next page. Use q parameter to search by name. Returns items array and page_info with has_next_page and offset for the next request.
get_customer
Get a NetSuite customer by internal ID. Returns full record details. Use list_customers to find valid IDs. Optionally specify fields to return only specific properties.
create_customer
Create a new NetSuite customer. Requires companyName or firstName+lastName with isPerson=true. Use list_subsidiaries for valid subsidiary IDs. Returns the new record ID on success.
update_customer
Update an existing NetSuite customer. Use get_customer to check current values first. Only provided fields will be updated.
delete_customer
Delete a NetSuite customer by ID. This action cannot be undone. Use get_customer to verify the record first.
list_employees
List NetSuite employees with pagination. Use offset/limit for next page. Returns items array and page_info with has_next_page and offset for the next request.
get_employee
Get a NetSuite employee by internal ID. Returns full record details. Use list_employees to find valid IDs. Optionally specify fields to return only specific properties.
create_employee
Create a new NetSuite employee. Use list_subsidiaries and list_departments for valid reference IDs. Returns the new record ID on success.
update_employee
Update an existing NetSuite employee. Use get_employee to check current values first. Only provided fields will be updated.
delete_employee
Delete a NetSuite employee by ID. This action cannot be undone. Use get_employee to verify the record first.
list_estimates
List NetSuite estimates/quotes with pagination. Use offset/limit for next page. Use q to search. Returns items array and page_info with has_next_page and offset for the next request.
get_estimate
Get a NetSuite estimate by internal ID. Use list_estimates to find valid IDs. Use expandSubResources to see line items. Optionally specify fields to return only specific properties.
create_estimate
Create a new NetSuite estimate. Requires entity (customer ref). Use list_customers for valid IDs. Returns the new record ID on success.
update_estimate
Update an existing NetSuite estimate. Use get_estimate to check current values first. Only provided fields will be updated.
delete_estimate
Delete a NetSuite estimate by ID. This action cannot be undone. Use get_estimate to verify the record first.
list_invoices
List NetSuite invoices with pagination. Use offset/limit for next page. Use q to search. Returns items array and page_info with has_next_page and offset for the next request.
get_invoice
Get a NetSuite invoice by internal ID. Use list_invoices to find valid IDs. Use expandSubResources to see line items. Optionally specify fields to return only specific properties.
create_invoice
Create a new NetSuite invoice. Requires entity (customer reference). Use list_customers for valid entity IDs. Returns the new record ID on success.
update_invoice
Update an existing NetSuite invoice. Use get_invoice to check current values first. Only provided fields will be updated.
delete_invoice
Delete a NetSuite invoice by ID. This action cannot be undone. Use get_invoice to verify the record first.
list_inventory_items
List NetSuite inventory items with pagination. These are items tracked in inventory with quantity on hand. Use offset/limit for next page. Use q to search by name.
get_inventory_item
Get a NetSuite inventory item by internal ID. Returns full record details. Use list_inventory_items to find valid IDs. Optionally specify fields to return only specific properties.
create_inventory_item
Create a new NetSuite inventory item. Requires itemId (name). Use list_accounts for valid income, COGS, and asset account references. Use list_subsidiaries for subsidiary IDs. Returns the new record ID on success.
update_inventory_item
Update an existing NetSuite inventory item. Use get_inventory_item to check current values first. Only provided fields will be updated.
list_non_inventory_items
List NetSuite non-inventory items (items not tracked in inventory) with pagination. Use offset/limit for next page. Use q to search by name.
list_service_items
List NetSuite service items (services sold to customers) with pagination. Use offset/limit for next page. Use q to search by name.
list_journal_entries
List NetSuite journal entries with pagination. Use offset/limit for next page. Use q to search. Returns items array and page_info with has_next_page and offset for the next request.
get_journal_entry
Get a NetSuite journal entry by internal ID. Use list_journal_entries to find valid IDs. Use expandSubResources to see line items. Optionally specify fields to return only specific properties.
create_journal_entry
Create a new NetSuite journal entry. Include line items with debit and credit entries that balance. Use list_accounts for valid account references and list_subsidiaries for subsidiary IDs. Returns the new record ID on success.
update_journal_entry
Update an existing NetSuite journal entry. Use get_journal_entry to check current values first. Only provided fields will be updated.
delete_journal_entry
Delete a NetSuite journal entry by ID. This action cannot be undone. Use get_journal_entry to verify the record first.
list_customer_payments
List NetSuite customer payments with pagination. Use offset/limit for next page. Use q to search. Returns items array and page_info with has_next_page and offset for the next request.
get_customer_payment
Get a NetSuite customer payment by internal ID. Use list_customer_payments to find valid IDs. Use expandSubResources to see applied invoices. Optionally specify fields to return only specific properties.
create_customer_payment
Create a new NetSuite customer payment. Requires customer reference. Use list_customers for valid IDs. Returns the new record ID on success.
delete_customer_payment
Delete a NetSuite customer payment by ID. This action cannot be undone. Use get_customer_payment to verify the record first.
list_purchase_orders
List NetSuite purchase orders with pagination. Use offset/limit for next page. Use q to search. Returns items array and page_info with has_next_page and offset for the next request.
get_purchase_order
Get a NetSuite purchase order by internal ID. Use list_purchase_orders to find valid IDs. Use expandSubResources to see line items. Optionally specify fields to return only specific properties.
create_purchase_order
Create a new NetSuite purchase order. Requires entity (vendor ref). Use list_vendors and list_inventory_items for valid IDs. Returns the new record ID on success.
update_purchase_order
Update an existing NetSuite purchase order. Use get_purchase_order to check current values first. Only provided fields will be updated.
delete_purchase_order
Delete a NetSuite purchase order by ID. This action cannot be undone. Use get_purchase_order to verify the record first.
run_suiteql
Execute a SuiteQL query against NetSuite. SuiteQL uses SQL-like syntax to query any record type. Example: "SELECT id, companyName FROM customer WHERE companyName LIKE '%Acme%'". Use offset/limit for pagination. Max 1000 rows per request.
list_departments
List NetSuite departments. Use department IDs when creating transactions or records. Use offset/limit for next page.
list_locations
List NetSuite locations. Use location IDs when creating transactions or records. Use offset/limit for next page.
list_classifications
List NetSuite classifications (classes). Use class IDs when creating transactions. Use offset/limit for next page.
list_currencies
List NetSuite currencies. Use currency IDs when creating multi-currency transactions. Use offset/limit for next page.
list_sales_orders
List NetSuite sales orders with pagination. Use offset/limit for next page. Use q to search. Returns items array and page_info with has_next_page and offset for the next request.
get_sales_order
Get a NetSuite sales order by internal ID. Use list_sales_orders to find valid IDs. Use expandSubResources to see line items. Optionally specify fields to return only specific properties.
create_sales_order
Create a new NetSuite sales order. Requires entity (customer ref). Use list_customers and list_inventory_items for valid IDs. Returns the new record ID on success.
update_sales_order
Update an existing NetSuite sales order. Use get_sales_order to check current values first. Only provided fields will be updated.
delete_sales_order
Delete a NetSuite sales order by ID. This action cannot be undone. Use get_sales_order to verify the record first.
list_subsidiaries
List NetSuite subsidiaries. Required for creating records in multi-subsidiary accounts. Use offset/limit for next page. Returns subsidiary names and IDs.
get_subsidiary
Get a NetSuite subsidiary by internal ID. Returns full subsidiary details. Use list_subsidiaries to find valid IDs.
validate_credential
Validate NetSuite credentials by making a test API call. Returns success status and message. Use this to verify the account ID and access token are valid.
list_vendor_bills
List NetSuite vendor bills with pagination. Use offset/limit for next page. Use q to search. Returns items array and page_info with has_next_page and offset for the next request.
get_vendor_bill
Get a NetSuite vendor bill by internal ID. Use list_vendor_bills to find valid IDs. Use expandSubResources to see line items. Optionally specify fields to return only specific properties.
create_vendor_bill
Create a new NetSuite vendor bill. Requires entity (vendor ref). Use list_vendors for valid IDs. Returns the new record ID on success.
update_vendor_bill
Update an existing NetSuite vendor bill. Use get_vendor_bill to check current values first. Only provided fields will be updated.
delete_vendor_bill
Delete a NetSuite vendor bill by ID. This action cannot be undone. Use get_vendor_bill to verify the record first.
list_vendors
List NetSuite vendors with pagination. Use offset/limit for next page. Returns items array and page_info with has_next_page and offset for the next request.
get_vendor
Get a NetSuite vendor by internal ID. Returns full record details. Use list_vendors to find valid IDs. Optionally specify fields to return only specific properties.
create_vendor
Create a new NetSuite vendor. Use list_subsidiaries for valid subsidiary IDs. Returns the new record ID on success.
update_vendor
Update an existing NetSuite vendor. Use get_vendor to check current values first. Only provided fields will be updated.
delete_vendor
Delete a NetSuite vendor by ID. This action cannot be undone. Use get_vendor to verify the record first.

How to set up Merge Agent Handler
In an mcp.json file, add the configuration below, and restart Cursor.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5 "headers": {
6 "Authorization": "Bearer yMt*****"
7 }
8 }
9 }
10}
11Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.
Make sure Claude is using the Node v20+.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "yMt*****"
14 }
15 }
16 }
17}Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.
Learn more in the official documentation ↗
1{
2 "mcpServers": {
3 "agent-handler": {
4 "command": "npx",
5 "args": [
6 "-y",
7 "mcp-remote@latest",
8 "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9 "--header",
10 "Authorization: Bearer ${AUTH_TOKEN}"
11 ],
12 "env": {
13 "AUTH_TOKEN": "<ah-production-access-key>"
14 }
15 }
16 }
17 }In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".
You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.
Learn more in the official documentation ↗
1{
2 "inputs": [
3 {
4 "type": "promptString",
5 "id": "agent-handler-auth",
6 "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7 "password": true
8 }
9 ],
10 "servers": {
11 "agent-handler": {
12 "type": "stdio",
13 "command": "npx",
14 "args": [
15 "-y",
16 "mcp-remote@latest",
17 "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18 "--header",
19 "Authorization: Bearer ${input:agent-handler-auth}"
20 ]
21 }
22 }
23}FAQs on using Merge's NetSuite MCP server
FAQs on using Merge's NetSuite MCP server
What is a NetSuite MCP?
A NetSuite MCP is a server that makes your NetSuite instance accessible to AI agents as a set of callable tools. Your agents can invoke these tools to query financial records, create and update invoices, manage vendors and customers, run SuiteQL queries, and more.
Oracle offers an official NetSuite MCP server, but you can also connect one through a third-party platform like Merge Agent Handler.
How can I use the NetSuite MCP server?
The use cases naturally depend on the agent you've built, but here are a few common ones:
- Automated invoice creation: When a deal closes in your CRM, an agent can pull the account details and automatically generate a corresponding invoice in NetSuite, populating line items, payment terms, and customer information without manual entry
- Vendor bill reconciliation: An agent can retrieve outstanding vendor bills from NetSuite, cross-reference them against purchase orders, flag discrepancies, and post a summary to a finance Slack channel for review
- Financial reporting on demand: An agent can query journal entries, customer payments, and account balances using SuiteQL, then compile a formatted summary for leadership or export it to a connected reporting tool
- Inventory reorder automation: When inventory items fall below a defined threshold in NetSuite, an agent can create a purchase order for the relevant vendor and notify the procurement team, reducing stockout risk without manual monitoring
What are popular tools for NetSuite's MCP server?
Here are some of the most commonly used tools:
<code class="blog_inline-code">run_suiteql</code>: executes SQL-like queries directly against NetSuite data, used when an agent needs to retrieve custom or complex financial datasets that standard list endpoints don't cover
<code class="blog_inline-code">create_invoice</code>: generates a new invoice record in NetSuite tied to a customer, used by agents that automate billing workflows triggered by external events like deal closures or service completions
<code class="blog_inline-code">list_vendor_bills</code>: retrieves outstanding bills from vendors with filtering by status or date, used by agents handling accounts payable monitoring or reconciliation
<code class="blog_inline-code">create_purchase_order</code>: creates a purchase order in NetSuite for a specified vendor and item list, called by agents that automate procurement based on inventory levels or approval workflows
<code class="blog_inline-code">get_customer</code>: fetches a single customer record including contact details and payment terms, used when an agent needs to validate or enrich customer data before creating a financial document
<code class="blog_inline-code">list_journal_entries</code>: returns journal entries filtered by date, account, or subsidiary, useful for agents that generate period-end financial summaries or audit reports
What makes Merge Agent Handler's NetSuite MCP server better than alternative NetSuite MCP servers?
Building or maintaining your own NetSuite MCP connector is a significant lift. Here is why teams use Merge Agent Handler instead:
- Enterprise-grade security and DLP. Merge Agent Handler includes built-in data loss prevention controls that let you block or redact sensitive fields before they reach an agent. For NetSuite, this means invoice amounts, vendor payment details, and subsidiary financials can be masked even when the agent has broad read access
- Managed authentication and credentials. Merge stores and refreshes NetSuite credentials on your behalf. You never pass token secrets to an agent directly or write logic to handle credential expiry
- Real-time observability and audit trail. Every tool call against NetSuite is recorded with timestamp, tool name, inputs, and response metadata. Finance teams get a full log of what the agent accessed or modified without any custom instrumentation
- Tool Packs and controlled access. Tool Packs let you scope exactly which NetSuite tools an agent can use, and combine them with tools from other connectors in a single MCP endpoint. A billing agent gets invoice and customer tools. A procurement agent gets purchase order and vendor tools. Neither gets more than it needs
How can I start using Merge Agent Handler's NetSuite MCP server?
You can take the following steps:
1. Create or log into your Merge Agent Handler account and navigate to Tool Packs.
2. Create a new Tool Pack and enable the NetSuite connector. Choose which tools to include. Read tools work for reporting and analysis use cases, while write tools are available if your agent needs to create invoices, purchase orders, or journal entries.
3. Add a Registered User to the Tool Pack. Merge generates a unique MCP URL tied to this user, which defines the identity context your agent operates under.
4. From the Registered User detail page, complete the NetSuite credential flow. Merge takes over storage and refresh of those credentials from that point forward.
5. Copy the MCP URL from the Tool Pack detail page and generate an API key under Settings. You will need both to connect your agent.
6. Add the MCP server to your agent or IDE using the MCP URL and API key. Your NetSuite tools are accessible through that endpoint immediately.
Ready to try it out?
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now

























