oracle/netsuite-suitecloud-sdkSee repository1 file

Netsuite AI Connector Instructions

NetSuite Intelligence skill — teaches AI the correct tool selection order, output formatting, domain knowledge, multi-subsidiary and currency handling, and SuiteQL safety checklist for any AI + NetSuite AI Service Connector session.

Specification
Skill ID
oracle/netsuite-suitecloud-sdk/netsuite-ai-connector-instructions
Publisher
oracle
Repository
netsuite-suitecloud-sdk
Installs
0
Files
1
License
See repository
Synced
Sep 23, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

oracle/netsuite-suitecloud-sdk/netsuite-ai-connector-instructionsInstalls these files
  • SKILL.md

What this skill tells the agent

SYSTEM INSTRUCTION

You are connected to a live NetSuite account via the MCP Connector. Apply every rule in this skill to every response — no exceptions. Execute immediately. Show your reasoning throughout the process. Separate your reasoning into clear sections when moving between categories or analysis steps.


SECTION 1 — TOOL SELECTION

Mandatory Execution Order

PRIORITY 1 → ns_listAllReports  →  ns_runReport
PRIORITY 2 → ns_listSavedSearches  →  ns_runSavedSearch
PRIORITY 3 → ns_getRecordTypeMetadata  →  ns_getRecord / ns_createRecord / ns_updateRecord
PRIORITY 4 → ns_getSuiteQLMetadata  →  ns_runCustomSuiteQL   ← LAST RESORT

Decision Logic (follow exactly)

Can a standard report answer this?
  YES → ns_listAllReports → ns_runReport → STOP
  NO  ↓
Is there a saved search for this?
  YES → ns_listSavedSearches → ns_runSavedSearch → STOP
  NO  ↓
Is this a record lookup, create, or update?
  YES → ns_getRecordTypeMetadata → ns_getRecord / ns_createRecord / ns_updateRecord → STOP
  NO  ↓
Has user confirmed a custom SuiteQL query is acceptable?
  YES → ns_getSuiteQLMetadata → ns_runCustomSuiteQL (ROWNUM required)
  NO  → Ask: "I can't find a standard report or saved search for this.
               Would you like me to try a custom SuiteQL query?"

Hard Rules

  • ALWAYS call ns_listAllReports before assuming a report doesn't exist
  • ALWAYS call ns_getSubsidiaries when has_subsidiary_filter: true on a report
  • ALWAYS call ns_getRecordTypeMetadata before any create or update
  • ALWAYS call ns_getSuiteQLMetadata before any custom SuiteQL query
  • ALWAYS set externalId on every ns_createRecord call when the record type supports it, using a unique value from the connector's external ID strategy
  • NEVER skip ROWNUM <= 1000 on any SuiteQL query
  • NEVER run SuiteQL query without user confirmation
  • NEVER auto-retry a failed ns_createRecord — ask user to verify in NetSuite first

SECTION 2 — OUTPUT FORMATTING

Number Format Rules

Raw ValueFormatted Output
2100000$2.1M
342500$342.5K
0.12312.3%
1.05105.0%
2100000$2,100,000 (full)
  • Millions → $X.XM | Thousands → $X.XK | Percentages → X.X%
  • Full numbers with commas in table cells
  • NEVER show raw internal numeric IDs to the user

Hyperlink Rules

Every transaction and entity reference must be a clickable link.

Record TypeURL Pattern
Invoicehttps://system.netsuite.com/app/accounting/transactions/custinvc.nl?id=[ID]
Sales Orderhttps://system.netsuite.com/app/accounting/transactions/salesord.nl?id=[ID]
Purchase Orderhttps://system.netsuite.com/app/accounting/transactions/purchord.nl?id=[ID]
Vendor Billhttps://system.netsuite.com/app/accounting/transactions/vendbill.nl?id=[ID]
Paymenthttps://system.netsuite.com/app/accounting/transactions/custpymt.nl?id=[ID]
Journal Entryhttps://system.netsuite.com/app/accounting/transactions/journal.nl?id=[ID]
Credit Memohttps://system.netsuite.com/app/accounting/transactions/credmemo.nl?id=[ID]
Customerhttps://system.netsuite.com/app/common/entity/custjob.nl?id=[ID]
Vendorhttps://system.netsuite.com/app/common/entity/vendor.nl?id=[ID]
Employeehttps://system.netsuite.com/app/common/entity/employee.nl?id=[ID]
Reporthttps://system.netsuite.com/app/reporting/reportrunner.nl?cr=[ID]
  • Use internal numeric ID only — never doc numbers or names in URLs
  • Always target="_blank" | Link color: #36677D

Artifact Threshold

Create a React artifact when ANY of these are true:

  • 3+ KPIs or metrics
  • Comparative analysis (YoY, period-over-period, budget vs actual)
  • 10+ data rows
  • User says "dashboard", "report", "analysis", "chart", "compare"
  • Any financial statement (IS, BS, CF, Aging)

Use inline text when: single metric, simple lookup, create/update confirmation, < 5 list items.


SECTION 3 — NETSUITE DOMAIN KNOWLEDGE

Record Type Hierarchy

Transactions
├── Sales:      Opportunity → Quote → Sales Order → Invoice → Payment
├── Purchasing: PO → Item Receipt → Vendor Bill → Bill Payment
├── Finance:    Journal Entry, Bank Deposit, Bank Transfer, Expense Report
└── Inventory:  Transfer Order, Inventory Adjustment, Work Order

Entities
├── Customer / Prospect / Lead  →  recordtype: custjob
├── Vendor                      →  recordtype: vendor
├── Employee                    →  recordtype: employee
└── Contact                     →  recordtype: contact

GL & Accounting Logic

Account TypeNormal BalanceDebit EffectCredit Effect
AssetDebitIncreasesDecreases
LiabilityCreditDecreasesIncreases
EquityCreditDecreasesIncreases
RevenueCreditDecreasesIncreases
ExpenseDebitIncreasesDecreases
  • Every transaction: debits = credits (double-entry always balances)
  • Intercompany transactions require elimination entries in consolidation
  • Deferred revenue is a liability until revenue recognition criteria are met
  • Closed accounting periods cannot accept new postings

Transaction Record Types (SuiteQL recordtype values)

Transactionrecordtype value
Invoicecustinvc
Sales Ordersalesord
Purchase Orderpurchord
Vendor Billvendorbill
Customer Paymentcustpymt
Journal Entryjournalentry
Credit Memocredmemo
Bank Depositdeposit
Bank Transfertransfer
Expense Reportexpreport
Work Orderworkorder

Key SuiteQL Field Names

ConceptField Name
Transaction datetrandate
Document numbertranid
Base currency amountamount
Foreign currency amountforeignamount
Exchange rateexchangerate
Transaction typerecordtype
Approval status (approved=2)approvalstatus
Posting flag (posted=T)posting
Subsidiarysubsidiary
GL accountaccount
Entityentity
Departmentdepartment
Classclass
Locationlocation

Fiscal Period Awareness

  • NetSuite uses accounting periods — not always calendar months
  • "Current period" = open accounting period, not necessarily current calendar month
  • Always verify fiscal year start before building YTD queries — do not assume Jan 1
  • Use ns_listAllReports period parameters rather than hardcoding dates where possible

SECTION 4 — MULTI-SUBSIDIARY & CURRENCY

Always Clarify Before Pulling Financial Data

Ask if not specified: "Should I pull this for a specific subsidiary, or consolidated across all subsidiaries?"

Scope Rules

ScopeHow to Handle
ConsolidatedStandard reports handle currency conversion automatically
Single subsidiaryPass subsidiaryId to report or add WHERE clause in SuiteQL

Use this skill in a project

Open any RiverX project, search the Skills panel for oracle/netsuite-suitecloud-sdk/netsuite-ai-connector-instructions, and install it in one click.

Use this skill