Origami Precision logo Origami Lens logo
Origami Lens
Multi-SaaS Metadata Intelligence
Ready
Tokens: prompt 0 · output 0 · total 0
Loading...
Not set
Record slices

Select preset domains to auto-fill the list; uncheck or clear to go manual.

Mermaid preview (optional)

ERD Preview

erDiagram customer {} contact {} customer }o--|| contact : "contact"


Interactive ERD 📹

Live zoom, pan, hover, and click insights.

Relationship
Lines (hidden)
Creates
Creates (downstream)
Minimap
Select a record to inspect fields

Click a node to expand its full field list.

No record selected.

Introduction

Origami Lens is a full-stack metadata workbench for NetSuite. Each pane shares the same visual language: a control column on the left, a resizable work surface on the right, and persistent indicators for sync status and theme. Keyboard focus follows whichever view is active in the menu bar.

Getting Started

  • Create a context from the top-right "Account ▾" → "Manage" button, "Edit" the seeded context or create a new one. 📹
    Also see: NetSuite token setup.
  • Sync metadata from the top-right “Metadata ▾” menu to refresh cached objects and summaries. 📹
  • Select a slice (O2C, Inventory, etc.) to pre-populate ERD record lists, or type CSV values manually. 📹

NetSuite token setup

origami lens connects to NetSuite using Token Based Authentication (TBA) and a dedicated integration user.

What you will create

  • An integration record in NetSuite
  • An access token tied to an integration user and role

Before you start

You must have a NetSuite administrator user to enable features, manage roles, create integrations, and generate access tokens.

Steps...

Step 1: enable Token Based Authentication

  1. Navigate to SetupCompanyEnable Features
  2. Open the SuiteCloud tab
  3. Enable the following:
    • Token Based Authentication
    • SuiteAnalytics Workbook or SuiteAnalytics Connect if analytics is used in your account
  4. Click Save

Step 2: create an integration record

  1. Go to SetupIntegrationsManage IntegrationsNew
  2. Set the following values:
    • Name: origami lens
    • State: Enabled
    • Authentication: Token Based Authentication
  3. Click Save
  4. Copy and store securely:
    • Consumer Key
    • Consumer Secret

Step 3: create an integration user

Create a dedicated employee record for the integration, for example Origami Lens Integration User.

  • Do not use a personal login
  • Grant only the minimum permissions required
  • Assign a role created specifically for origami lens

Step 4: create a role for origami lens

  1. Navigate to SetupUsers/RolesManage Roles
  2. Create a new role or edit an existing one
  3. Name the role something like origami lens integration role
Required REST and metadata access
  • REST Web Services: Full
  • User Access Tokens: Full
  • Log in using Access Tokens: enabled if present in your account
System notes visibility for full change history

To allow origami lens to view a complete system notes timeline, the role must include the following permission:

  • System Notes for Analytics: View or higher

Without this permission, NetSuite may limit which changes appear in analytics-driven system notes views.

Step 5: create the access token

  1. Go to SetupUsers/RolesAccess TokensNew
  2. Select:
    • Application Name: the origami lens integration record
    • User: the integration user
    • Role: the origami lens integration role
  3. Click Save
  4. Copy and store securely:
    • Token ID
    • Token Secret

Step 6: enter values into origami lens

Enter the following values into the origami lens connection screen:

  • Account ID
  • Consumer Key
  • Consumer Secret
  • Token ID
  • Token Secret

Treat these credentials as production secrets. Store them securely and restrict access.

Quick troubleshooting

Token fails immediately
  • Confirm Token Based Authentication is enabled
  • Confirm the role includes REST Web Services
  • Confirm the token was created for the correct user, role, and integration
System notes appear incomplete
  • Confirm the role includes System Notes for Analytics
  • Confirm the token is using the intended role

ERD Builder 📹

The left pane drives both the Mermaid preview and Dagre graph.

  • Expand hops automatically adds referenced records within the provided hop count.
  • Show lists toggles the inclusion of customlist_* objects.
  • Refs only (expanded) limits expanded mode to reference fields so diagrams remain focused.
  • Include line nodes surfaces line collections as separate nodes; use the Lines toggle inside the Dagre filter bar to hide/show them dynamically.
  • Magnify node zooms into the hovered or selected node and becomes a reset toggle.
  • Export scope supports Visible vs Full ERD; the Notes toggle adds a notes list to exports.
ERD Builder supports deep linking.
ℹ️ Info: Warm the cache: trigger a single metadata fetch (or run a small ERD once) for the current context so cache files exist; subsequent ERDs should be fast.

Metadata Explorer 📹

The Metadata menu exposes two sub-views: Explore and Diff.

  • Slices and search filter the left-hand catalog; slice pills behave like the ERD slicer.
  • Summary card includes lineage pills that route to related records, plus line collection tabs.
  • Notes show up on both the catalog list and Dagre nodes so you can annotate requirements.
  • Tables respond to the resizable gutter; drag to allocate more vertical space to the field grid.
  • Download package exports your metadata contract as JSON files (ZIP), which you can commit into source control and use with the open-source NetSuite-Developer Codex Skill.
Metadata Explorer supports deep linking.

Metadata Diff

Compare cached metadata versions using the selectors at the top of the Diff page.

  • Env A / Env B can be the same or different; versions update based on the selected environment.
  • Select versions, run "Diff metadata caches," then jump into per-object field diffs via the "View diff" shortcut.
  • Use the modal search filter (Ctrl/Cmd+F still works) to locate specific objects inside large diffs.

System Notes

System notes summarize recent NetSuite changes (default range is Yesterday).

  • Row limits apply by plan: trial uses 200 rows, past due uses 50, active uses all.
  • Use the filters to narrow by record type, context, or employee before exporting.
⚠️ Warning: Access token needs: 'System Notes for Analytics' permission to view all changes.

SuiteQL Workbench

  • Run queries with paging controls (Rows dropdown) and filter/highlight output via the toolbar.
  • Use the inline clear button to reset filters, and export to CSV/JSON from the action menu.

Datasets

Datasets mirror the SuiteAnalytics dataset catalog.

  • Select a dataset to preview columns and sample rows; use the right gutter to resize the table area.
  • “Load dataset” fetches fresh data with pagination, respecting the Rows picker.

Saved Searches

  • Load available searches through the MCP connector; Origami normalizes the result columns for sorting/filtering.
  • Use the "Run search" button to execute with the current filter values and export via CSV/JSON as needed.
ℹ️ Info: You might not be able to execute all "Public" saved searches due to permission constraints.
⚠️ Warning: This is an experimental feature requiring the MCP connector. Reach out to support if you need help enabling it.
Token is good for an hour.

SuiteAnalytics Reports

  • Browse enabled SuiteAnalytics reports, then run a report to display rows with the shared table toolbar.
  • The toolbar mirrors SuiteQL/Datasets: inline filters, quick pagination, and export actions.
ℹ️ Info: You might not be able to execute all "Public" saved searches due to permission constraints.
⚠️ Warning: This is an experimental feature requiring the MCP connector. Reach out to support if you need help enabling it.
Token is good for an hour.

Precision AI

Generate narrative insights or SOP drafts using cached metadata and ERD context.

  • Parameter inputs (Top P, Top K, Max tokens) are optional; leave blank to use model defaults.
  • Paste Mermaid snippets or notes into the prompt box, then run "Send to Precision AI." Token counts appear under the status bar.
  • Trial accounts hide the auto-filled schema data field (ERD/Diff) until you upgrade.

CodeEye 📹

CodeEye turns SuiteScript uploads into a deterministic inventory, findings, dependency graph, and diagrams.

  • Uploads are never executed. ZIPs are unpacked safely (no symlinks or path traversal).
  • Secrets are redacted before analysis artifacts are written.
  • Results are delivered as JSON artifacts you can download.
  • Diagrams render in the dual-pane viewer with Mermaid text on the right and SVG fallback for large graphs.
  • Use the Copy button to reuse Mermaid definitions in docs or tickets.

Workflow: Upload → Analyze → Review Summary → Open Diagrams → (Optional) Run AI Actions.

  • Summary Report aggregates files, entry points, integrations, and findings.
  • Runs lists prior analyses per tenant/context and supports hard delete for cleanup.
  • AI Actions (if enabled) use redacted source only; output is advisory.
ℹ️ Info: Mermaid is available for copy/paste. SVG fallback is used automatically for large graphs.
⚠️ Warning: AI output may be inaccurate. Validate before acting on recommendations.
CodeEye metrics glossary

These definitions describe the deterministic metrics in the CodeEye Summary Report. Values come from redacted artifacts only; no AI is used to generate metrics.

Overview

MetricDefinition
Files analyzedCount of files accepted into the run manifest (JS plus config files that pass validation).
Scripts detectedCount of JS files analyzed for SuiteScript logic.
SuiteScript versionsCounts of version guesses (1.0, 2.x, unknown) based on annotations and heuristics.
Script typesCounts by type guess (ClientScript, Suitelet, Scheduled, Map/Reduce, User Event, RESTlet, Other).
Run timestampUTC timestamp from the run manifest.
ContextThe tenant context key associated with the run.

Structural Complexity

MetricDefinition
NodesUnique module identifiers from the dependency graph.
EdgesNumber of directed dependency edges.
Largest componentSize of the largest connected component in the undirected dependency graph.
Circular depsCount of cycles detected using strongly connected components (SCCs), including self-loops.
Shared dependenciesTop modules by fan-in (many inbound edges). Shared utilities or common imports.
High blast-radius componentsTop modules by fan-out (many outbound edges). Changes can affect many downstream paths.

Entry Points and Execution Triggers

  • Scheduled: scripts with scheduled execution signatures.
  • User Event: scripts with beforeLoad/beforeSubmit/afterSubmit hooks.
  • RESTlet: scripts exposing RESTlet handlers.
  • Client: scripts with client-side entry points (pageInit, saveRecord, validateLine, etc.).
  • Map/Reduce: scripts with getInputData/map/reduce/summarize.
  • Other: scripts that do not match the above.

Integration Surface

MetricDefinition
Outbound callsCount of unique external endpoints detected in code (URL strings).
External endpointsUnique URL list discovered in redacted code.
Authentication patternsSignals inferred from integration indicators or URL contents (HTTPS module, legacy HTTP, SFTP/FTP, email).
Integration indicatorsCounts of detected integration signals (https_module, legacy_http, file_transfer, email).
Integration densityRatio of scripts with integrations to total scripts: none (0), low (≤ 0.25), medium (≤ 0.6), high (> 0.6).

Findings Summary

CategoryWhat it includes
SecurityRisky patterns such as eval, new Function, string-based timers, or plain HTTP usage.
GovernanceRecord mutation/search hotspots: record.save, submitRecord, submitFields, search.run, search.runPaged, record.delete.
MaintainabilityLint findings not tied to complexity rules.
Deprecated usageReserved for deprecated API checks; may be empty.
Complexity riskComplexity lint rules plus high complexity metrics (score ≥ 10).

Severity calculation

  • Lint severity: high (2), medium (1), low (0).
  • Complexity metrics severity: high (≥ 50), medium (≥ 25), low (≥ 10).
  • Security rules: eval/new Function = high; string timers and HTTP = medium; default = low.
  • Governance rules: delete_record/submit_record = high; others = medium.

Complexity Metrics Details

MetricDefinition
ComplexityCount of control-flow keywords in redacted code: if, for, while, switch, catch, function.
Comment ratioPercentage of comment markers (// or /*) per total lines.

Diagram Index

The diagram index lists rendered diagrams for the run with node and edge counts. Render types may be Mermaid (client-side) or SVG (server-side fallback).

Notice: NetSuite is a registered trademark of Oracle Corporation and/or its affiliates.

SuiteQL Workbench

Run SuiteQL queries with pagination support.

No query executed yet.
No data loaded.

Saved Searches 🧪

List and run NetSuite saved searches via MCP.

Load saved searches to begin.
Selected: None
Lower bound of results
Upper bound of results
Only for standalone search types
ℹ️ Info: You might not be able to execute all "Public" saved searches due to permission constraints.
⚠️ Warning: This is an experimental feature requiring the MCP connector. Reach out to support if you need help enabling it.
Token is good for an hour.

Saved Search Results

Executed search rows appear here.

Run a saved search to see results.

Reports 🧪

List and run MCP reports.

Load available reports to begin.
Selected: None
ℹ️ Info: You might not be able to execute all "Public" saved searches due to permission constraints.
⚠️ Warning: This is an experimental feature requiring the MCP connector. Reach out to support if you need help enabling it.
Token is good for an hour.

Report Results

Executed report data appears here.

Run a report to see results.

Datasets

Select a dataset to preview sample rows.

Pick a dataset to preview.
No dataset selected.

SoD Conflicts

Define permission pairs and run conflict checks.

No SoD rules yet.

Rule detail

Select or create a rule, then run it.

Last run:
Count: 0

Rule results

Counts summarized by domain and permission pairs.

By domain

No runs yet.

Permission pairs

No runs yet.

System Notes

Pull recent system note changes by relative date range.

⚠️ Warning: Access token needs: 'System Notes for Analytics' permission to view all changes.
Select a range and run.
No data loaded.

Precision AI

Include the current ERD or Diff for insights.

Insights

AI output may be inaccurate. Validate before acting.

No Precision AI run yet.

CodeEye Runs

Runs for the active tenant and context.

-
Created Status Upload Files Findings Integrations Nodes Edges
Loading...

CodeEye 📹

Upload SuiteScript files to generate a deterministic inventory and dependency map. Uploads are never executed.

Limits: 10 files, 2MB total, 10,000 lines.
Tenants' Contexts

Contexts per tenant (read-only)

TenantAppEnvDescription
Loading...
Users

Users and roles

EmailTenantRoleVerifiedMCPDaily token capTokens used (today)
Loading...

Click "Edit" on a user row to open the editor modal.

Email Outbox

Recent notification attempts

AtKindToSubjectProviderStatusError
Loading...

Outbox entries live in Firestore at config/notifications/outbox.