NetSuite Managed MCP Server
The NetSuite managed MCP server lets agents query Oracle NetSuite records and run SuiteQL with the calling user’s OAuth identity. The server wraps SuiteTalk REST APIs and exposes read-only tools for records, customers, sales orders, and items.
After reading this page, you will be able to:
-
Configure the NetSuite managed MCP server with account ID and user-delegated OAuth
-
Identify the NetSuite read-only tools available to agents
-
Test NetSuite tool calls with an authorized user’s connection
What this MCP server does
Use NetSuite when an agent needs ERP, finance, or accounting context from records that a NetSuite user can already read. Every tool is read-only.
| Tool | What it does |
|---|---|
|
Runs a SuiteQL query and returns rows as JSON. Use this tool for joins, aggregates, and cross-record analysis. |
|
Fetches one record by record type and internal ID. You can expand sub-resources, such as line items and addresses. |
|
Lists records of a type with optional NetSuite filter expression and paging. Use typed helpers when they fit. |
|
Fetches a customer record by internal ID. |
|
Lists customers with optional company name, email, modified-since, inactive, and paging filters. |
|
Lists sales orders with optional customer ID, date range, status, modified-since, and paging filters. |
|
Searches inventory and service items by SKU, display name, item type, inactive flag, and paging filters. |
The managed server does not expose write tools, saved-search execution, or report execution.
Prerequisites
-
The OAuth 2.0 feature enabled in NetSuite. In NetSuite, go to Setup > Company > Enable Features, open the SuiteCloud subtab, and select OAuth 2.0 under Manage Authentication.
-
A NetSuite Integration Record that uses OAuth 2.0 Authorization Code grant.
-
A NetSuite OAuth Provider in Redpanda Agentic Data Plane for the same account.
-
Your NetSuite account ID. Production accounts use a numeric ID such as
1234567. Sandbox accounts include a suffix such as1234567_SB1; release-preview accounts can use a suffix such as1234567_RP1. -
NetSuite users with a role that has both the REST Web Services and the Log in using OAuth 2.0 Access Tokens permissions.
Configure NetSuite OAuth
In NetSuite, create an Integration Record with OAuth 2.0 enabled. Set the redirect URI to the OAuth callback URL for your AI Gateway deployment. Select the REST Web Services scope.
Find your account ID under Setup > Company > Company Information > ACCOUNT ID. The managed server lowercases the account ID and turns underscores into hyphens when it builds the SuiteTalk host. The OAuth Provider endpoints you enter need the same form, because NetSuite’s account-specific domains use it. For example, account ID 1234567_SB1 becomes 1234567-sb1 in these URLs.
Create a custom NetSuite OAuth Provider in Agentic Data Plane with account-scoped endpoints, replacing <account-domain-id> with the lowercase, hyphenated form of your account ID:
Authorization endpoint: https://<account-domain-id>.app.netsuite.com/app/login/oauth2/authorize.nl
Token endpoint: https://<account-domain-id>.suitetalk.api.netsuite.com/services/rest/auth/oauth2/v1/token
Scopes: rest_webservices
Store the NetSuite client secret in the Agentic Data Plane secret store, then reference that secret from the OAuth Provider.
Create the managed MCP server
Create a managed MCP server with the NetSuite type. NetSuite authentication is part of the managed config, so include user_oauth inside the JSON. In account_id, enter the account ID exactly as NetSuite shows it, such as 1234567_SB1.
{
"@type": "type.googleapis.com/redpanda.mcps.netsuite.v1.NetSuiteMCPConfig",
"account_id": "1234567_SB1",
"user_oauth": {
"provider_name": "netsuite",
"required_scopes": ["rest_webservices"]
}
}
For a non-UI path, use rpk ai mcp-server create with --managed.config. A managed server carries its user-delegated OAuth settings inside that JSON; the --remote.user-oauth.* flags belong to the remote flag group and apply to remote servers only.
rpk ai mcp-server create netsuite \
--enabled \
--description "NetSuite ERP with user OAuth" \
--managed.config '{
"@type": "type.googleapis.com/redpanda.mcps.netsuite.v1.NetSuiteMCPConfig",
"account_id": "1234567_SB1",
"user_oauth": {
"provider_name": "netsuite",
"required_scopes": ["rest_webservices"]
}
}'
The create form turns Enable code mode on by default for this server type. rpk ai mcp-server create leaves it off unless you pass --code-mode. See Code Mode.
Authorize and test
Before a caller can use NetSuite tools, the caller must authorize the NetSuite OAuth Provider. After authorization, Redpanda stores the user’s access token in the token vault and subsequent tool calls use that token automatically.
Test the server in the Inspector before you connect it to an agent. Start with a narrow suite_ql_query, get_customer, or list_customers call to confirm that NetSuite returns records visible to the authorized user.
NetSuite query notes
NetSuite record filters use NetSuite-specific forms:
-
Use
CONTAINfor substring filters, notCONTAINS. -
Use
M/D/YYYYdate literals for REST collection filters. -
Match reference fields by internal ID. For example, sales-order customer filters use
entity ANY_OF [12345]. -
Use NetSuite status IDs such as
_pendingFulfillmentfor sales-order status filters, not display labels.
Troubleshooting
| Symptom | What to check |
|---|---|
Tool calls return |
Confirm the authorizing NetSuite user’s role has the REST Web Services and Log in using OAuth 2.0 Access Tokens permissions. |
OAuth succeeds, but tool calls fail |
Confirm the OAuth Provider endpoints and the MCP server |
A sales-order status filter returns no rows |
Use the NetSuite internal status ID, such as |