System Integration · SuiteScript & Automation · Managed Application Services

NetSuite MCP Connection Errors and How to Fix Them

Most NetSuite MCP errors have four causes: a role gap, an expired sign-in, a query too wide to finish, or a busy concurrency pool. How to tell which.

The short answer

Most NetSuite MCP connection errors aren't bugs.

There are four common causes. The connector's role is missing a permission, and the error often says "Record not found". The sign-in has expired. The query is too wide to finish before the AI client gives up. Or the account's shared concurrency pool is full, which shows as "Too Many Requests". Before changing anything, check the server URL and the role, then read the integration record's Execution Log to see what actually failed.

The Model Context Protocol (MCP) is the open standard that lets an AI assistant such as Claude or ChatGPT call tools in another system. Anthropic released it in November 2024 (Anthropic: Introducing the Model Context Protocol).

NetSuite's AI Connector Service makes NetSuite available through MCP, and Oracle's free MCP Standard Tools SuiteApp supplies the standard set of tools: run a report, run a saved search, run SuiteQL (NetSuite's SQL dialect), read and write records, and so on. Oracle announced the service at SuiteWorld in October 2025 (Oracle: NetSuite Expands SuiteCloud Platform with New AI Innovations).

This guide is about what happens after setup, once the connector is part of daily work.

What we saw

VCG reviewed about 2,570 SuiteQL calls made through the connector.

Roughly 12% of them failed, which is around 300 calls. Most of those failures came from a few repeatable causes: role gaps, queries too wide to finish, and throttling when the account was busy.

Results were small, so the costly part was usually the repeat attempts that followed a failure, such as the same query resent after a timeout. Sign-in expiry is a fourth, separate pattern, and it costs the most in unattended use, where nobody is there to sign back in.

A five-point setup check

If the connector has never worked, or stopped working after someone changed a role, go through these five points before anything else. Each one comes from Oracle's own documentation.

  1. Features. Under Setup > Company > Enable Features > SuiteCloud, turn on Server SuiteScript and OAuth 2.0. Both are required. REST Web Services is needed to install and use the MCP Standard Tools SuiteApp. SuiteQL isn't on Oracle's prerequisite list (Oracle: NetSuite AI Connector Service FAQ; Oracle: Setting Up the AI Connector Service).
  2. Role. Administrator won't work, and neither will any role with full permissions. Oracle blocks both on purpose, in case an AI client is ever compromised. The role needs MCP Server Connection and "Log in using OAuth 2.0 Access Tokens". Oracle warns that this is a different permission from "Log in using Access Tokens", and the two are easy to mix up. Since the October 2026 release, a custom role based on Specialized User: CRM is an option too. The full checklist is in the next section.
  3. Server URL. Use https://<accountid>.suitetalk.api.netsuite.com/services/mcp/v1/all to get custom tools from every SuiteApp and customization project. Oracle says that without /all the connection will appear disconnected. To get only the standard tools, use /services/mcp/v1/suiteapp/com.netsuite.mcpstandardtools instead (Oracle: Connecting to the AI Connector Service). Copy the account domain from the Company URLs subtab of Company Information rather than typing it. Sandbox IDs change form in the domain: 123456_SB1 becomes 123456-sb1 (Oracle: Account-Specific Domains).
  4. Integration record. Look under Setup > Integration > Manage Integrations. For Claude, NetSuite creates the record on first connection, with the NetSuite AI Connector Service scope, and enables it automatically. Records created for other clients may start in Pending, and an administrator has to enable them. If the scope is missing, delete the record and recreate it. For ChatGPT, Oracle says a new integration record may be needed for each connection, because ChatGPT uses dynamic callback URLs.
  5. AI client plan. Oracle says Claude needs the Pro plan or higher (Oracle: Get Started with the NS AI Connector in Claude). Oracle also says some ChatGPT plans need Developer Mode turned on, but doesn't name which plans. The connector and the SuiteApp cost nothing extra. Only the AI client subscription costs money.

If the connector looks connected but shows no tools, Oracle's causes are a missing /all, an uninstalled SuiteApp, or a misconfigured role. A wrong account ID in the URL is another thing to rule out: Oracle says to copy the domain from Company Information instead of typing it, and in our view a mistyped domain would fail the same way.

Role permission checklist

These are the permissions that decide what the AI can do. Add them to a custom role, never to Administrator.

PermissionWhat it unlocksHow its absence shows up
MCP Server ConnectionThe connection itselfSign-in or connection fails
Log in using OAuth 2.0 Access TokensSign-in through the AI clientSign-in fails. Not the same as "Log in using Access Tokens"
REST Web ServicesCreating, retrieving and updating records through the SuiteAppRecord tools fail while other tools work
Record permissions for your dataWhat the AI can read or change"Record not found"

Oracle documents the first three (Oracle: Setting Up the AI Connector Service). If the saved-search tools fail while record tools work, check the role's search permissions next. Oracle doesn't state a permission level for any of them, so give each the least level that works.

Where to see what failed

The AI client's chat window gives you a summary of the error, and summaries lose detail.

The full record is on the integration record. Open it and go to Execution Log > AI Connector Service (MCP), which sits alongside the SOAP, REST and RESTlet subtabs. Calls are logged with its time, duration, status, user, HTTP status code, HTTP method and URL path (Oracle: Connecting to the AI Connector Service).

Retention is short: 21 days in production and 7 in a sandbox. Copy or screenshot what you need as soon as you start looking. Read the raw status and path before you touch the query, because one symptom can come from any of the four causes.

Record not found is usually a role gap

The connector can only see what its role can see.

Oracle says the MCP Standard Tools SuiteApp uses the same access controls as the NetSuite UI and gives no access beyond what the role already has (Oracle: MCP Standard Tools SuiteApp). In practice, a record the role can't see looks to the connector as if it doesn't exist. That's why "Record 'X' was not found" so often turns up for tables you know are there.

VCG's consultants most often see this on script and deployment records, system notes, roles, accounting periods and custom segments. Write gaps are just as common: roles that can't edit items or vendor bills, or can't change anything in a locked period. If someone has promised a bulk update through the connector, check the role's write permissions first.

The fix

Stop renaming the table. If the AI keeps trying transaction, then transactions, then a guessed custom record name, it's working around a permission it doesn't have.

  1. Confirm access one table at a time with a one-row query.
  2. Where a gap matters, add that one permission to a least-privilege role, or use another route such as a token-based REST role or a script.
  3. Write down the role's known gaps.

Don't grant Full on everything to see whether the problem goes away. Oracle blocks full-permission roles from the connector anyway, and it breaks least-privilege practice.

Missing tools follow the same rule. The Standard Tools SuiteApp currently lists about 25 tools in seven groups, and because Oracle manages and updates it, check the live list rather than relying on a number (Oracle: MCP Standard Tools Available Tools).

Why you keep being asked to sign in

The connector uses OAuth 2.0 Authorization Code Grant with PKCE (Oracle: NetSuite AI Connector Service FAQ).

In plain terms, a person signs in through a browser and the AI client holds a token on their behalf, not their password.

Oracle's connector pages don't publish how long that session lasts, so we won't guess a number. When the AI client says it needs you to sign in again, sign in again. Retrying the same request will fail the same way.

Scheduled or unattended AI jobs need more care. VCG's recommendation is to make one cheap call first, such as listing subsidiaries, and stop with a clear "not signed in" status if it fails. Work that has to run with nobody watching belongs on a token-based REST integration or a script.

If the error appears during sign-in itself, look at the role and the integration record first. The setup check above covers the usual suspects.

How to narrow a query that times out

The row and time limits belong to the AI client, not to NetSuite.

Oracle's FAQ says AI clients usually handle up to about 5,000 rows per call, that token limits may apply, and that large queries may time out. No duration is published. Note whose limit this is: it belongs to the AI client, not to NetSuite (Oracle: NetSuite AI Connector Service FAQ).

VCG sees timeouts cluster in the same places: transaction-line and accounting-line scans, wide GROUP BYs, consolidation over full history, and unfiltered deleted-record tables. The narrowing order that works:

  1. Add a posting-period or date range, plus a subsidiary filter.
  2. Wrap the query in COUNT(*) to see whether it finishes at all.
  3. Split it by period or by ID range. A year per chunk works for P&L summaries.
  4. If it's still slow, move it to SuiteQL over REST or to a reporting copy of the data.

Don't resend the same query after a timeout.

A before and after

Here is a synthetic example. The first query scans every transaction line in the account:

SELECT tl.account, SUM(tl.netamount) AS total
FROM transactionline tl
JOIN transaction t ON t.id = tl.transaction
GROUP BY tl.account

The narrowed version limits it to one posting period and one subsidiary:

SELECT tl.account, SUM(tl.netamount) AS total
FROM transactionline tl
JOIN transaction t ON t.id = tl.transaction
WHERE t.postingperiod = 123
  AND tl.subsidiary = 2
GROUP BY tl.account

Run it as SELECT COUNT(*) first to see whether the filtered set is a sensible size.

Too Many Requests and bursts of failures

The connector shares the account's concurrency pool with every other integration.

That holds unless an administrator gives its integration record a dedicated limit. Oracle's example: an account limit of 5, with 2 assigned to a REST integration, leaves 3 for everything else. Each tool call counts as one main request plus the extra MCP protocol requests that come with it. The pool's size depends on your service tier and how many SuiteCloud Plus licenses you have (Oracle: AI Connector Service Concurrency Governance).

When the pool is full, Oracle says you'll see "Too Many Requests" and should ask the AI client to retry. Oracle doesn't document a status code or a backoff interval.

VCG's consultants have noticed a related pattern. When queries that worked minutes earlier start failing in a burst, often with HTTP 400 errors, the cause has sometimes been throttling rather than bad SQL. Another session or a nightly integration was hitting the same account. Oracle doesn't document that link, so treat it as a field observation.

To test, run a query you know works, such as a one-row lookup. If that fails too, the SQL isn't the problem. Wait and retry, and if it keeps happening, review a dedicated limit or the account's concurrency tier.

The quoting trap

This one catches developers rather than finance users, but finance users end up with the broken script.

VCG has observed that string literals sent through the connector arrive URL-encoded, so a query that works in the connector contains %27 where a single quote would be. Oracle doesn't document this.

Paste that query into SuiteScript's query.runSuiteQL (the N/query module) and %27 is a syntax error, because N/query expects plain quotes. Copying a query from one context to the other silently changes what it means, so rewrite the quotes rather than pasting.

The same synthetic WHERE clause in both forms:

-- As it appears in a working connector call
WHERE t.type = %27VendBill%27 AND t.postingperiod = 123

-- As SuiteScript's N/query needs it
WHERE t.type = 'VendBill' AND t.postingperiod = 123

The rule: write the script version from scratch with ordinary quotes. To test, run a one-row query with a string filter in both places, using a value you know exists, and confirm both return that row before you run anything larger. Do this in a sandbox first.

Report dates are not posting periods

This trap matters most to controllers.

Oracle says the connector's report tools don't support accounting periods and ignore the Report by Period preference. Oracle also advises against rebuilding financial reports with SuiteQL, because NetSuite's standard reports apply business rules that SuiteQL can't (Oracle: MCP Standard Tools Best Practices).

VCG's consultants have seen date-range reports differ from posting-period totals because of back-dated bills, accruals and reclass journals. To tie a period, compare against the native report, or against SuiteQL filtered on posting period. Any total that comes out of the connector is unvalidated until it matches the native report.

When to stop using the connector

The connector suits metadata, single records, small lookups and one-off writes. Large paged reads, joins across several queries and unattended jobs belong somewhere else.

TaskConnectorSuiteQL over RESTScriptReporting warehouse
Look up one record or its fieldsYesPossibleOverkillNo
Small lookup, a few hundred rowsYesPossibleOverkillNo
One-off write, approved by a personYesNo, SuiteQL is read-onlyPossibleNo
Paged read of thousands of rowsNoYesYesYes
Totals or joins across queriesNoYes, totals computed in codeYesYes
Scheduled or unattended jobNoYes, token-basedYesYes
Reporting beyond native NetSuiteNoNoNoYes

For big reads, VCG has found a read-only REST helper most reliable: it writes every page to a file, prints only the count and a few sample rows, and lets code compute the totals. For reporting beyond what NetSuite does natively, a replicated data warehouse is the longer-term answer, and it is the kind of work VCG does under system integration.

Traps on the REST route

SuiteQL over REST has its own problems. These are VCG observations:

  • SuiteQL requests over REST need the Prefer: transient header.
  • The OAuth 1.0a signature has to include the query string, or you get a 401 invalid login.
  • The JSON response leaves out null fields, and booleans come back as T and F.
  • A PATCH can return 204, which means success, and still drop a value. After any bulk update, re-read what you wrote and compare.

Don't cap a paged REST read with ROWNUM. VCG has seen it return more rows across pages than the reported total. Bound reads by a key or date range, and make the fetch loop fail loudly when the row count and the reported total disagree.

Is it safe for finance data

Oracle builds several controls into the service.

MCP tools never run with the Administrator role or a full-permission role. They can't call Suitelets. "Run as role" is disabled, so tools can't run SuiteScript with elevated privileges. And they can't make HTTP requests to outside destinations (Oracle: AI Connector Service Risks).

The SuiteQL tools are read-only. Writes go through the record tools, under the role's own permissions. Calls are logged on the integration record's Execution Log, which keeps 21 days in production and 7 in a sandbox.

On health data, Oracle says the service hasn't been assessed for HIPAA compliance. You shouldn't send ePHI through it unless your own assessment has decided that use fits your HIPAA obligations (Oracle: NetSuite AI Connector Service FAQ).

The practical control is the role: give each job its own least-privilege role.

Symptom-to-fix table

Decision tree for the most common MCP errors: read the Execution Log, then a disconnected connector points to the URL, SuiteApp or role, a sign-in prompt to an expired session, and a failed call to a role gap, a query too wide to finish or a full concurrency pool, each with its first fix

What you seeLikely causeFirst checkFix
Connector shows disconnectedURL missing /allServer URLUse the /all URL
Empty or missing toolsSuiteApp not installed, or role lacks permissionsSuiteApp install, role permissionsInstall the SuiteApp, add the tool's permissions
Connector shows disconnected, URL looks rightWrong account ID or domain in the URLCompare with Company URLsCopy the domain from Company Information
Tools missing after connectingURL missing /all, SuiteApp not installed, or role misconfiguredURL, SuiteApp, roleFix whichever applies
invalid_grant or 401 on the tool listLikely an expired or rejected sign-in, or a disabled integration recordIntegration record state and scope, then sign in againEnable or recreate the record, sign in again
ChatGPT says the search action is not foundChatGPT connection setupOracle's ChatGPT steps and SuiteAnswers article 1025062Reconnect following those steps
Administrator sign-in refusedAdministrator and full-permission roles are blockedRole used to sign inSign in with a least-privilege custom role
"Record not found" on a record that existsRole can't see that record typeOne-row query per tableAdd the permission, or use REST or a script
Writes refused while reads workRole lacks write permission, or period is lockedRole write permissions, period statusAdjust the role, or write by another route
"Needs you to sign in again"Session expiredNone neededSign in again; don't retry
TimeoutQuery too wide for the AI clientFilters and COUNT(*)Narrow, chunk, or move to REST
"Too Many Requests" or a burst of 400sShared concurrency pool fullA known-good control queryWait, retry, review the dedicated limit
Query fails after copying into SuiteScript%27 encoded quotesLook for %27Rewrite with plain quotes
P&L doesn't match the GL for a periodReport tool uses dates, not posting periodsCompare by posting periodTie to the native report

Frequently asked questions

Why does the connector say Record not found when the record exists?

Usually because the connector's role can't see that record type. Confirm with a one-row query and check the role's permissions.

Why does ChatGPT say the search action is not found?

Oracle's pages don't cover that message. Oracle points to SuiteAnswers article 1025062 for ChatGPT, and says some plans need Developer Mode and a non-administrator role. Start there.

What do invalid_grant or a 401 on the tool list mean?

Oracle doesn't document either message. Start by checking that the integration record is enabled and has the AI Connector Service scope, then sign in again.

Why is NetSuite MCP not working with Claude?

Work through the setup check: features, role, URL ending in /all, integration record, and a Pro plan or higher.

Is there a row limit?

Oracle says AI clients usually handle up to about 5,000 rows per call. That limit comes from the AI client.

Does the connector cost extra?

No. Oracle says the connector and the MCP Standard Tools SuiteApp are free. You pay for the AI client's plan.

What to do next

Find the cause before you retry.

Check the URL and role, read the Execution Log, narrow wide queries, and move heavy or unattended work off the connector. Tie every number to the native report.

Sometimes the connector is only where the trouble shows. If the real problem is the account underneath, with permission sprawl, roles nobody can explain, or reports that don't tie, fixing the connector won't help much. VCG's assessment looks at the account itself, including its integrations, scripts and day-to-day support. If that sounds like your situation, you can book an assessment.

Sources

  1. Anthropic: Introducing the Model Context Protocolanthropic.com
  2. Oracle: NetSuite Expands SuiteCloud Platform with New AI Innovationsoracle.com
  3. Oracle: NetSuite AI Connector Service FAQdocs.oracle.com
  4. Oracle: Setting Up the AI Connector Servicedocs.oracle.com
  5. Oracle: Connecting to the AI Connector Servicedocs.oracle.com
  6. Oracle: Account-Specific Domainsdocs.oracle.com
  7. Oracle: Get Started with the NS AI Connector in Claudedocs.oracle.com
  8. Oracle: MCP Standard Tools SuiteAppdocs.oracle.com
  9. Oracle: MCP Standard Tools Available Toolsdocs.oracle.com
  10. Oracle: AI Connector Service Concurrency Governancedocs.oracle.com
  11. Oracle: MCP Standard Tools Best Practicesdocs.oracle.com
  12. Oracle: AI Connector Service Risksdocs.oracle.com

Related guides

All guides →
Let’s Talk

Still working around NetSuite? That’s what we fix.

Free 30-minute call. We’ll look at your setup and tell you what we’d fix first. If we’re not the right team for it, we’ll say so.

Book an Assessment →Meet the Team