Skip the install. Get this working in under 2 minutes.
Start a free trial on cloud.anythingmcp.com, add the Oracle NetSuite in one click, then point your AI client (Claude, ChatGPT, Copilot or Cursor) at the generated MCP endpoint. No Docker, no git clone, zero engineering experience required.
Summary
Let your AI work with Oracle NetSuite: run read-only SuiteQL queries over customers, vendors, items, transactions and the general ledger, read customers, vendors, employees, items, sales orders, invoices, purchase orders, bills and journal entries with their lines, look up record types and fields, and create customers and sales orders. NetSuite OAuth 2.0 sign-in, production or sandbox account.
Try asking
Example prompts for Oracle NetSuite
Click any prompt to copy it. Paste into Claude, ChatGPT, Cursor, Gemini, Copilot or OpenClaw to run it against this connector.
Claude is AI and can make mistakes. Please double-check responses.
💡 No install? Use cloud.anythingmcp.com directly. Sign in, click Connectors → Oracle NetSuite, paste your credentials, mint an MCP API key and you're done. No Docker, no
git clone, no local server.
Oracle NetSuite + Gemini
Let your AI work with Oracle NetSuite: run read-only SuiteQL queries over customers, vendors, items, transactions and the general ledger, read customers, vendors, employees, items, sales orders, invoices, purchase orders, bills and journal entries with their lines, look up record types and fields, and create customers and sales orders. NetSuite OAuth 2.0 sign-in, production or sandbox account.
Prerequisites
See the full setup instructions baked into the connector (visible in the in-app store when you select the connector). The required environment variables for this connector are:
NETSUITE_ACCOUNT_ID, NETSUITE_CLIENT_ID, NETSUITE_CLIENT_SECRET
Step 1 — Get credentials
An administrator sets this up once, in about 20 minutes.
- Turn on the features: Setup → Company → Enable Features. On the SuiteCloud subtab tick REST Web Services and, under Manage Authentication, OAuth 2.0. On the Analytics subtab tick SuiteAnalytics Workbook, which SuiteQL reads from. Save.
- Create a role for the AI: Setup → Users/Roles → Manage Roles → New. Add the permissions REST Web Services (Full) and Log in using OAuth 2.0 Access Tokens (Full), View on the lists and transactions the AI may read (customers, vendors, items, employees, accounts, sales orders, invoices, purchase orders, bills, journal entries and Find Transaction) and Create where it may write (customers, sales orders). Give the role to the user who will sign in. A dedicated role is safer than Administrator: the AI sees only what the role allows.
- Create the integration record: Setup → Integration → Manage Integrations → New. Set the state to Enabled, untick Token-Based Authentication and TBA: Authorization Flow, tick Authorization Code Grant under OAuth 2.0, leave Public Client unticked, enter the redirect URI
https://cloud.anythingmcp.com/api/mcp-oauth/callback(if you host AnythingMCP yourself:<your AnythingMCP URL>/api/mcp-oauth/callback) and tick the scope REST Web Services. When you save, NetSuite shows the Client ID and Client Secret once, at the bottom of the page. Paste them intoNETSUITE_CLIENT_IDandNETSUITE_CLIENT_SECRET. - Account ID: Setup → Company → Company Information.
NETSUITE_ACCOUNT_IDtakes it as it appears in your NetSuite web address: lowercase, with a hyphen instead of the underscore, so1234567_SB1becomes1234567-sb1. For a sandbox, create the integration record in the sandbox itself. - Install the connector, click Authorize with Provider, sign in to NetSuite and pick the role from step 2.
- Run
netsuite_list_record_typesto check the connection, then a first query such asSELECT id, companyname FROM customerwithnetsuite_suiteql_query.
Authorize again once a week: NetSuite keeps the refresh token of this kind of integration valid for seven days and does not renew it, so click Authorize with Provider at least once a week. In between, access tokens are renewed automatically. Disabling the integration record, the role or the user ends access at once.
SuiteQL does the heavy lifting: netsuite_suiteql_query runs one read-only SQL query over NetSuite's analytics data: customers, vendors, items, accounts, subsidiaries, and transactions with their lines and posting amounts. That is how the AI answers questions such as open invoices per customer, sales by item or spend by vendor. Results come in pages of up to 1,000 rows and a query returns at most 100,000 rows in total, so large questions are answered with totals rather than raw rows. Rows the role may not see are left out without an error, so an empty answer can mean a missing permission.
Records: dedicated tools read customers, vendors, employees, items, sales orders, invoices, purchase orders, vendor bills and journal entries with their lines, and netsuite_get_record reads any other record type. netsuite_describe_record_type lists every field of a record type, custom fields included.
Writes: confirm first: netsuite_create_customer creates a customer once you confirm. netsuite_create_sales_order (which creates the order as Pending Approval, so nothing ships before someone approves it) and netsuite_update_record are switched off at install; switch them on per tool if you need them. Changes to posted transactions affect the books.
Common errors: INVALID_LOGIN means the weekly authorization expired or the integration, role or user was disabled, so authorize again. 403 or INSUFFICIENT_PERMISSION: the role lacks a permission. CONCURRENCY_LIMIT_EXCEEDED: too many parallel requests on the account, so wait and try again. An unknown host means NETSUITE_ACCOUNT_ID is not written in the web address form.
The connector signs in with OAuth 2.0 only; Token-Based Authentication (TBA) is not supported. It does not delete records, run saved searches or reports, call RESTlets or use the file cabinet.
Step 2 — Install the adapter
curl -fsSL https://raw.githubusercontent.com/HelpCode-ai/anythingmcp/main/docker-compose.quickstart.yml -o docker-compose.yml
printf 'JWT_SECRET=%s\nENCRYPTION_KEY=%s\n' "$(openssl rand -hex 32)" "$(openssl rand -hex 32)" > .env
docker compose up -d
Step 3 — Add the connector in Gemini
Your server URL: in AnythingMCP, open MCP Servers → the server this connector is on, and copy its URL (
https://cloud.anythingmcp.com/mcp/…). Use it wherever this guide showsYOUR_SERVER_ID.
Gemini CLI reads MCP servers from ~/.gemini/settings.json (on Windows %USERPROFILE%\.gemini\settings.json). Add:
{
"mcpServers": {
"anythingmcp": {
"httpUrl": "https://cloud.anythingmcp.com/mcp/YOUR_SERVER_ID",
"headers": { "X-API-Key": "YOUR_MCP_API_KEY" }
}
}
}
- Create an MCP API key in AnythingMCP under MCP Servers → your server → API keys, and paste it in place of
YOUR_MCP_API_KEY. - Save the file and restart
gemini. - Run
/mcpinside Gemini CLI (orgemini mcp listin your shell):anythingmcpshould show as connected. - Start prompting: Gemini CLI can now call the
Oracle NetSuitetools.
Available tools
| Tool | What it does |
|---|---|
netsuite_suiteql_query | Run one read-only SuiteQL query (NetSuite's SQL over the analytics schema), e.g. "SELECT id, companyname, email FROM customer WHERE… |
netsuite_list_record_types | List the record types the REST record API offers in this account (standard and custom, e.g. customer, salesOrder, inventoryItem… |
netsuite_describe_record_type | Describe one record type as JSON Schema: every field with its type, title and whether it is read-only, the sublists and their line fields… |
netsuite_list_records | List the internal ids of one record type, optionally filtered with the record API's q syntax (field, operator, value), e.g. q = email… |
netsuite_get_record | Read any record by type and internal id (or eid:<external id>), e.g. contact, account, subsidiary, location, estimate, creditMemo… |
netsuite_get_customer | Read one customer by internal id (or eid:<external id>): entityId, companyName or person name, email, phone, subsidiary, currency, terms… |
netsuite_get_vendor | Read one vendor by internal id (or eid:<external id>): entityId, companyName, email, phone, subsidiary, currency, terms, balance, category… |
netsuite_get_employee | Read one employee by internal id: entityId, name, email, title, department, location, subsidiary, supervisor, hireDate, isInactive and the… |
netsuite_get_item | Read one item by its record type and internal id: itemId, displayName, description, prices, cost, units, quantities on hand where tracked… |
netsuite_get_sales_order | Read one sales order by internal id: tranId, entity (customer), tranDate, status, orderStatus, currency, subtotal, total, shipping address… |
netsuite_get_invoice | Read one customer invoice by internal id: tranId, entity, tranDate, dueDate, status, currency, subtotal, taxTotal, total, amountRemaining… |
netsuite_get_purchase_order | Read one purchase order by internal id: tranId, entity (vendor), tranDate, status, currency, total, dueDate and, expanded by default… |
netsuite_get_vendor_bill | Read one vendor bill by internal id: tranId, entity (vendor), tranDate, dueDate, status, currency, total, approvalStatus and, expanded by… |
netsuite_get_journal_entry | Read one journal entry by internal id: tranId, tranDate, postingPeriod, subsidiary, currency, approved, memo and, expanded by default… |
netsuite_create_customer | Create a customer, a company (company_name) or a person (is_person true with first_name and last_name) |
netsuite_create_sales_order | Create a sales order for an existing customer, by default in status Pending Approval (A) so nothing is fulfilled before someone approves it |
netsuite_update_record | Change fields of an existing record of any type (PATCH): only the fields given are changed |
Example prompts
- "Which customers have open invoices older than 60 days, and how much does each one owe?"
- "Show last quarter's sales by item, top 20 by amount."
- "How much did we spend with each vendor this year, based on vendor bills?"
- "Create a customer for Harbor Supplies Ltd. in the UK subsidiary, and show me the details before you save."
FAQ
Where does Gemini CLI look for MCP servers? In ~/.gemini/settings.json for your user, or in .gemini/settings.json inside a project. gemini mcp list shows each server and whether it connects.
Next steps
Was this guide helpful?