
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 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 NetSuite contacts with pagination. Use offset/limit for next page. Returns items array and pageinfo with hasnext_page and offset for the next request.
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 a new NetSuite contact. Use list_customers for valid company IDs. Returns the new record ID on success.
Update an existing NetSuite contact. Use get_contact to check current values first. Only provided fields will be updated.
Delete a NetSuite contact by ID. This action cannot be undone. Use get_contact to verify the record first.
List NetSuite credit memos with pagination. Use offset/limit for next page. Use q to search. Returns items array and pageinfo with hasnext_page and offset for the next request.
Get a NetSuite credit memo by internal ID. Use listcreditmemos to find valid IDs. Use expandSubResources to see line items. Optionally specify fields to return only specific properties.
Create a new NetSuite credit memo. Requires entity (customer ref). Use list_customers for valid IDs. Returns the new record ID on success.
Update an existing NetSuite credit memo. Use getcreditmemo to check current values first. Only provided fields will be updated.
Delete a NetSuite credit memo by ID. This action cannot be undone. Use getcreditmemo to verify the record first.
List NetSuite customers with pagination. Use offset/limit for next page. Use q parameter to search by name. Returns items array and pageinfo with hasnext_page and offset for the next request.
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 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 an existing NetSuite customer. Use get_customer to check current values first. Only provided fields will be updated.
Delete a NetSuite customer by ID. This action cannot be undone. Use get_customer to verify the record first.
List NetSuite employees with pagination. Use offset/limit for next page. Returns items array and pageinfo with hasnext_page and offset for the next request.
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 a new NetSuite employee. Use listsubsidiaries and listdepartments for valid reference IDs. Returns the new record ID on success.
Update an existing NetSuite employee. Use get_employee to check current values first. Only provided fields will be updated.
Delete a NetSuite employee by ID. This action cannot be undone. Use get_employee to verify the record first.
List NetSuite estimates/quotes with pagination. Use offset/limit for next page. Use q to search. Returns items array and pageinfo with hasnext_page and offset for the next request.
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 a new NetSuite estimate. Requires entity (customer ref). Use list_customers for valid IDs. Returns the new record ID on success.
Update an existing NetSuite estimate. Use get_estimate to check current values first. Only provided fields will be updated.
Delete a NetSuite estimate by ID. This action cannot be undone. Use get_estimate to verify the record first.
List NetSuite invoices with pagination. Use offset/limit for next page. Use q to search. Returns items array and pageinfo with hasnext_page and offset for the next request.
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 a new NetSuite invoice. Requires entity (customer reference). Use list_customers for valid entity IDs. Returns the new record ID on success.
Update an existing NetSuite invoice. Use get_invoice to check current values first. Only provided fields will be updated.
Delete a NetSuite invoice by ID. This action cannot be undone. Use get_invoice to verify the record first.
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 a NetSuite inventory item by internal ID. Returns full record details. Use listinventoryitems to find valid IDs. Optionally specify fields to return only specific properties.
Create a new NetSuite inventory item. Requires itemId (name). Use listaccounts for valid income, COGS, and asset account references. Use listsubsidiaries for subsidiary IDs. Returns the new record ID on success.
Update an existing NetSuite inventory item. Use getinventoryitem to check current values first. Only provided fields will be updated.
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 NetSuite service items (services sold to customers) with pagination. Use offset/limit for next page. Use q to search by name.
List NetSuite journal entries with pagination. Use offset/limit for next page. Use q to search. Returns items array and pageinfo with hasnext_page and offset for the next request.
Get a NetSuite journal entry by internal ID. Use listjournalentries to find valid IDs. Use expandSubResources to see line items. Optionally specify fields to return only specific properties.
Create a new NetSuite journal entry. Include line items with debit and credit entries that balance. Use listaccounts for valid account references and listsubsidiaries for subsidiary IDs. Returns the new record ID on success.
Update an existing NetSuite journal entry. Use getjournalentry to check current values first. Only provided fields will be updated.
Delete a NetSuite journal entry by ID. This action cannot be undone. Use getjournalentry to verify the record first.
List NetSuite customer payments with pagination. Use offset/limit for next page. Use q to search. Returns items array and pageinfo with hasnext_page and offset for the next request.
Get a NetSuite customer payment by internal ID. Use listcustomerpayments to find valid IDs. Use expandSubResources to see applied invoices. Optionally specify fields to return only specific properties.
Create a new NetSuite customer payment. Requires customer reference. Use list_customers for valid IDs. Returns the new record ID on success.
Delete a NetSuite customer payment by ID. This action cannot be undone. Use getcustomerpayment to verify the record first.
List NetSuite purchase orders with pagination. Use offset/limit for next page. Use q to search. Returns items array and pageinfo with hasnext_page and offset for the next request.
Get a NetSuite purchase order by internal ID. Use listpurchaseorders to find valid IDs. Use expandSubResources to see line items. Optionally specify fields to return only specific properties.
Create a new NetSuite purchase order. Requires entity (vendor ref). Use listvendors and listinventory_items for valid IDs. Returns the new record ID on success.
Update an existing NetSuite purchase order. Use getpurchaseorder to check current values first. Only provided fields will be updated.
Delete a NetSuite purchase order by ID. This action cannot be undone. Use getpurchaseorder to verify the record first.
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 NetSuite departments. Use department IDs when creating transactions or records. Use offset/limit for next page.
List NetSuite locations. Use location IDs when creating transactions or records. Use offset/limit for next page.
List NetSuite classifications (classes). Use class IDs when creating transactions. Use offset/limit for next page.
List NetSuite currencies. Use currency IDs when creating multi-currency transactions. Use offset/limit for next page.
List NetSuite sales orders with pagination. Use offset/limit for next page. Use q to search. Returns items array and pageinfo with hasnext_page and offset for the next request.
Get a NetSuite sales order by internal ID. Use listsalesorders to find valid IDs. Use expandSubResources to see line items. Optionally specify fields to return only specific properties.
Create a new NetSuite sales order. Requires entity (customer ref). Use listcustomers and listinventory_items for valid IDs. Returns the new record ID on success.
Update an existing NetSuite sales order. Use getsalesorder to check current values first. Only provided fields will be updated.
Delete a NetSuite sales order by ID. This action cannot be undone. Use getsalesorder to verify the record first.
List NetSuite subsidiaries. Required for creating records in multi-subsidiary accounts. Use offset/limit for next page. Returns subsidiary names and IDs.
Get a NetSuite subsidiary by internal ID. Returns full subsidiary details. Use list_subsidiaries to find valid IDs.
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 NetSuite vendor bills with pagination. Use offset/limit for next page. Use q to search. Returns items array and pageinfo with hasnext_page and offset for the next request.
Get a NetSuite vendor bill by internal ID. Use listvendorbills to find valid IDs. Use expandSubResources to see line items. Optionally specify fields to return only specific properties.
Create a new NetSuite vendor bill. Requires entity (vendor ref). Use list_vendors for valid IDs. Returns the new record ID on success.
Update an existing NetSuite vendor bill. Use getvendorbill to check current values first. Only provided fields will be updated.
Delete a NetSuite vendor bill by ID. This action cannot be undone. Use getvendorbill to verify the record first.
List NetSuite vendors with pagination. Use offset/limit for next page. Returns items array and pageinfo with hasnext_page and offset for the next request.
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 a new NetSuite vendor. Use list_subsidiaries for valid subsidiary IDs. Returns the new record ID on success.
Update an existing NetSuite vendor. Use get_vendor to check current values first. Only provided fields will be updated.
Delete a NetSuite vendor by ID. This action cannot be undone. Use get_vendor to verify the record first.

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}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.
The use cases naturally depend on the agent you've built, but here are a few common ones:
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 reportsBuilding or maintaining your own NetSuite MCP connector is a significant lift. Here is why teams use Merge Agent Handler instead:
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.
Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now