netsuite-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HOST | No | HTTP server host (default 0.0.0.0) | 0.0.0.0 |
| PORT | No | HTTP server port (default 3001) | 3001 |
| ALLOWED_HOSTS | No | Allowed hosts for HTTP server (default localhost) | localhost |
| NETSUITE_TOKEN_ID | Yes | NetSuite Token ID (Access Token) | |
| NETSUITE_ACCOUNT_ID | Yes | NetSuite Account ID (sandbox or production) | |
| NETSUITE_CONSUMER_KEY | Yes | NetSuite Consumer Key from Integration | |
| NETSUITE_TOKEN_SECRET | Yes | NetSuite Token Secret | |
| NETSUITE_CONSUMER_SECRET | Yes | NetSuite Consumer Secret |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| netsuite_get_vendorsA | List NetSuite vendors (suppliers) with optional search and pagination. Optional parameters: limit (number), offset (number), q (string, search query on companyName, via SuiteQL when provided). |
| netsuite_get_vendor_filterable_fieldsA | Inspect NetSuite vendor metadata-catalog and return fields that are filterable with the REST Record Query Language (?q=). Useful to know which field names are valid in RQL filters. |
| netsuite_get_vendor_by_external_idA | Find a NetSuite vendor by its externalId (e.g. 'spk_supplier_'). Uses NetSuite REST Record Query Language (RQL) on the vendor list, then enriches with full vendor details. Returns { found, vendor: { id, companyName, externalId, email, subsidiary } | null } |
| netsuite_search_vendors_by_nameA | Search NetSuite vendors by name (case-insensitive, partial match). Uses NetSuite REST Record Query Language (RQL) on the vendor list, then enriches with full vendor details. Optional filter by subsidiaryId. |
| netsuite_get_vendor_by_idA | Get a single NetSuite vendor by internal ID. Returns full vendor details with expanded sub-resources. Required parameter: id (string, NetSuite internal vendor ID) |
| netsuite_get_latest_vendorsA | Get the most recently created vendors in a Spendesk-compatible format (name, email, phone, address, VAT, currency, external ID). Uses REST API (no SuiteQL required). Optional parameter: limit (number, default 5) |
| netsuite_get_vendor_formsA | Get list of custom form IDs used by existing vendors. Returns form IDs to use with netsuite_create_vendor. Use this if vendor creation fails with 400 to discover the correct customForm ID. |
| netsuite_create_vendorA | Create a new NetSuite vendor (supplier). If vendor creation fails with 400, first call netsuite_get_vendor_forms to discover the correct customForm ID, then retry with customForm and any required customFields. Required: companyName (string), subsidiary (string). Optional: email, phone, externalId (for idempotency), customForm (string, custom form ID), customFields (object, key-value map of custom field IDs), isPerson (boolean), currency, vatRegNumber, legalName, addr1, city, zip, country |
| netsuite_update_vendorB | Update an existing NetSuite vendor. Required: id (string). Optional: companyName, email, externalId |
| netsuite_get_vendor_billsB | List NetSuite vendor bills with optional search and pagination. Optional parameters: limit (number), offset (number), q (string, search query), status (string, e.g. 'VendBill:A' for open bills) |
| netsuite_get_vendor_billA | Get a single NetSuite vendor bill by internal ID. Returns full bill details with expanded sub-resources (expense lines, items). Required parameter: id (string, NetSuite internal vendor bill ID) |
| netsuite_get_vendor_bill_by_external_idA | Get a vendor bill by its externalId (idempotency helper). Required: externalId (string). Returns { found: boolean, bill: { id, tranId, externalId, entity, tranDate, total } | null } |
| netsuite_get_vendor_bills_for_vendorA | Get vendor bills for a specific vendor, optionally filtered by date range. Required: vendorId (string). Optional: from (YYYY-MM-DD), to (YYYY-MM-DD), limit (number, default 50). |
| netsuite_create_vendor_billA | Create a new NetSuite vendor bill with expense lines. Required: entity (vendor ID), subsidiary, tranDate (YYYY-MM-DD). Optional: dueDate, tranId, memo, currency, exchangeRate, foreignAmount, externalId, expense (array of lines with account, amount as NET, memo, department, location, class, taxCode). Set department from cost center map for analytics. Use vatLines for VAT: array of { taxCodeId, taxRate, vatAmount, netAmount } so the tax authority ledger is updated. |
| netsuite_update_vendor_billA | Update any field of an existing NetSuite vendor bill via PATCH. Supports: header fields (entity, tranDate, dueDate, tranId, memo, currency, exchangeRate, subsidiary), expense sublist (account, amount, taxCode, memo, department, location, class, amortization), item sublist, custom body fields, billing address. When expense[] is provided, uses ?replace=expense to REPLACE all lines (not merge). Same for item[] with ?replace=item. |
| netsuite_get_employeesA | List NetSuite employees with optional search and pagination. Used to match Spendesk Members to NetSuite Employees for expense reports. Optional parameters: limit (number), offset (number), q (string, search query) |
| netsuite_get_employeeA | Get a single NetSuite employee by internal ID. Returns full employee details with expanded sub-resources. Required parameter: id (string, NetSuite internal employee ID) |
| netsuite_get_expense_report_by_external_idA | Get an expense report by its externalId (idempotency check before creating an expense report). |
| netsuite_get_expense_reportsA | List NetSuite expense reports with optional search and pagination. Optional parameters: limit (number), offset (number), q (string, search query), status (string, e.g. 'ExpRpt:A' for approved) |
| netsuite_get_ns_expense_categoriesB | List NS expense categories for expense report lines (category.id required per line). |
| netsuite_get_expense_report_by_idA | GET a NS expense report by internal ID with expanded sub-resources (e.g. expense.items[].category). |
| netsuite_create_expense_reportA | Create a new NetSuite expense report for an employee with expense lines. Required: employee, subsidiary, tranDate; per line: category (NS expense category ID), amount; multi-currency: currency. Optional: memo, externalId, expenseList.expense[].expenseDate, department, etc. |
| netsuite_get_bill_paymentsB | List NetSuite vendor payments (bill payments) with optional search and pagination. Optional parameters: limit (number), offset (number), q (string, search query) |
| netsuite_get_bill_paymentA | Get a single NetSuite vendor payment (bill payment) by ID. Required parameter: id (string, payment ID) |
| netsuite_create_bill_paymentA | Create a NetSuite vendor payment (bill payment) and apply it to one or more vendor bills. Required parameters: entity (string, vendor ID), tranDate (string, YYYY-MM-DD). Optional: account (string, bank account ID, auto-resolved from vendor subsidiary if not provided), currency (string, defaults to '1' for EUR), externalId (for idempotence), memo, apply (array of {doc: billId, apply: true, amount: number}). NOTE: Without apply array, creates an unapplied payment. |
| netsuite_get_vendor_creditsA | List NetSuite vendor credits with optional search and pagination. Optional parameters: limit (number), offset (number), q (string, search query) |
| netsuite_get_vendor_credit_by_external_idA | Get a vendor credit by its externalId (idempotency check before creating a credit). Required: externalId (string). Returns { found: boolean, credit: { id, externalId, tranDate, total } | null } |
| netsuite_create_vendor_creditA | Create a NetSuite vendor credit (for Spendesk credit notes / refunds). Use externalId for idempotency (e.g. spk_payable_). Optionally apply to an existing bill via applyList. |
| netsuite_get_journal_entry_by_external_idA | Get a journal entry by its externalId (idempotency helper). Required: externalId (string). Returns { found: boolean, entry: { id, externalId, tranDate, ... } | null } |
| netsuite_get_journal_entriesA | List NetSuite journal entries with optional search and pagination. Optional parameters: limit (number), offset (number), q (string, search query) |
| netsuite_create_journal_entryB | Create a new NetSuite journal entry with debit/credit lines. Required parameters: subsidiary (string), tranDate (string, YYYY-MM-DD). Optional: memo, externalId (for idempotence), line (array with account, debit, credit, department, location, class, memo, entity) |
| netsuite_create_accrual_journal_entryA | Create a month-end accrual journal entry with automatic NS reversal. Use after spendesk_get_accruals to post charges-à-payer (408xxx) entries. NS will auto-reverse on reversalDate (typically 1st of next month). |
| netsuite_get_record_schemaA | Get the exact NetSuite REST API schema for a record type. Returns required fields, property names, and sub-resources (those using items[] format). Use before implementing or debugging a create handler. |
| netsuite_get_accountsA | List NetSuite accounts (chart of accounts) with optional filter by type. Optional parameters: limit (number), offset (number), type (string, e.g. 'Bank', 'Expense') |
| netsuite_get_tax_codesA | List NetSuite sales tax items with id, name, rate, country, isInactive. Returns active codes only; use results to populate CLIENT_CONFIG.TAX_CODES by rate. Optional: limit, offset. |
| netsuite_get_departmentsA | List NetSuite departments / cost centers with names, full names, and parent. Fetches pages and enriches each entry via the detail endpoint. |
| netsuite_get_subsidiariesA | List NetSuite subsidiaries with names, countries, currencies, and elimination flags. |
| netsuite_get_currenciesA | List NetSuite currencies with exchange rates. Optional parameters: limit (number), offset (number) |
| netsuite_get_bank_accounts_by_subsidiaryA | Get bank accounts (type = 'Bank') available for a given subsidiary. Required: subsidiaryId (string). Returns list of { id, acctnumber, fullname, description }. |
| netsuite_execute_suiteqlA | Execute a read-only SuiteQL query against NetSuite. Only SELECT queries are allowed. Required parameter: query (string, SQL SELECT statement). Optional: limit (number, default 100, max 1000), offset (number, default 0). ⚠️ IMPORTANT: Use "FETCH FIRST N ROWS ONLY" instead of "LIMIT N" (auto-converted). Examples: SELECT id, companyName, externalId FROM vendor WHERE externalId = 'spk_supplier_xxx' FETCH FIRST 1 ROWS ONLY SELECT id, acctnumber, fullname FROM account WHERE type = 'Bank' AND subsidiary = 1 SELECT id, tranId, externalId FROM transaction WHERE externalId = 'spk_payable_xxx' AND type = 'VendBill' FETCH FIRST 1 ROWS ONLY |
| netsuite_get_locationsA | List NetSuite locations (analytical dimension for geographical or physical location tracking). Optional parameters: limit (number), offset (number) |
| netsuite_get_classificationsA | List NetSuite classifications (class - analytical dimension for project, product line, or business unit tracking). Optional parameters: limit (number), offset (number) |
| netsuite_list_filesA | List files from NetSuite File Cabinet with optional pagination. Optional parameters: limit (number), offset (number) |
| netsuite_upload_fileA | Upload a file to NetSuite File Cabinet (e.g. invoice PDF). Returns the file internal ID for use with netsuite_attach_file_to_record. Required: name, fileType (e.g. 'PDF'), content (base64), folder (folder internal ID from NS File Cabinet). Optional: description, isOnline. |
| netsuite_attach_file_to_recordA | Attach a File Cabinet file to a NetSuite record (e.g. vendor bill). Use after netsuite_upload_file. Required: recordType ('vendorBill', 'vendorCredit', etc.), recordId (internal ID), fileId (from upload). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/julienchriqui-okkoer/netsuite-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server