CutovaDemoStart free
001securityarchitecture

Trust

Start with the work you want to allow.

Choose the Epicor tools available to your assistant. Begin with a focused use case, review the results, and expand from there. This page explains the connection, credentials, logs and external processing.

Written to be handed to whoever runs your controls review.

002data handlingresults, logs and files

Where your Epicor data goes.

Tool results pass through Cutova to your chosen AI client and provider. Ordinary query results are assembled in memory, without a result database or cache. Request values and credentials are excluded from diagnostic logging. Error details are redacted before logging. File-producing tools store temporary outputs separately.

Query results

Ordinary query results are assembled in memory for the reply. They are not saved in a result database or cache. Logging and temporary file outputs have the separate handling described here.

not stored

Logs

Diagnostic logs record operational metadata such as request counts, response sizes and error codes. Request values and credentials are excluded. Epicor error details are redacted before logging. Diagnostic and error logs are access-controlled and kept no more than 30 days.

diagnostic data

Credentials

Cutova stores the service account username, password and API key configured by your administrator, encrypted with AES-256-GCM. The account needs impersonation rights for user tool calls. End-user sign-in happens with Epicor; Cutova does not receive those users' Epicor passwords during sign-in.

encrypted

File downloads

A few tools can return a file. Those are written to a private file on disk. The download link stops working after 15 minutes, and the file itself is removed soon after by a cleanup that runs every 15 minutes. Ordinary query results use the in-memory response path described above.

15-min link

TOON compression is an option you can turn on to save tokens. With it, Cutova parses your response data in memory to reformat and trim it before it goes to your AI client. The result is returned to the client. The logging practices described above still apply.

Show the exact mechanism

The Epicor response is parsed into an object before Cutova sees it, and Cutova re-serializes it to build the reply. In the optional TOON compression mode it restructures the rows into a columnar form to shrink the payload, and never drops a row. No result is written to the database, and there is no result cache.

File-download outputs apply to Function tools that are configured for them, never to a BAQ or a Business Object query. The bytes are written with private permissions under a server-side upload directory and recorded with a database row. The download link expires 15 minutes after it is issued (UPLOAD_TTL_SECONDS), after which it cannot be read. A cleanup that runs every 15 minutes then deletes the expired file and its row, in batches, so the file is gone within about a sweep of its link expiring.

Cutova records administrative, billing and grant actions. For operational history, configure Epicor auditing for the workflows your team uses.

003executionOnBehalfOf

Every tool call runs as the authenticated Epicor user.

  1. 1

    User authenticates

    The user signs in to Epicor through the OAuth flow. Their Epicor identity (username, company) is captured in an McpPrincipal record.

  2. 2

    AI client calls a tool

    The request carries the OAuth access token. McpBearerGuard extracts the principal id and validates the token.

  3. 3

    Impersonated execution

    The tool runs against Epicor as the original user, using Epicor OnBehalfOf impersonation and the applicable server-side permissions.

  4. 4

    Scoped response

    The configured Epicor API applies its server-side controls. Review the permissions and behavior of each tool; screen-only logic is not necessarily reproduced.

004at restAES-256-GCM

Encryption at rest

Configured Epicor credentials are encrypted before storage in Cutova's database.

Epicor credentials

These are the executing credentials an administrator sets for the instance: the service account Cutova runs Epicor calls on. We never receive an individual user's Epicor password. People sign in to Epicor themselves, and their actions run on top of the service account by impersonation. That stored API key, username and password are encrypted with AES-256-GCM using a 32-byte server-side secret. Each value gets a unique 12-byte initialization vector and a 16-byte authentication tag, so tampering is detected rather than decrypted.

AES-256-GCM

Secrets hashed, not stored

On the server, refresh tokens and gateway API keys are stored as SHA-256 hashes for lookup. The installed gateway protects its connection key with Windows data protection and restricted local access. OAuth authorization codes are single-use and bound to the client's PKCE challenge.

SHA-256
005authenticationthree surfaces

Three authentication surfaces, each purpose-built.

Admin API

console
Protocol
OpenID Connect via Keycloak
Token type
RS256 JWT (asymmetric)
Validation
JWKS endpoint, rotating keys
Claims
tenantId, email, roles

Administrators authenticate against Keycloak. Tokens are validated using the published JWKS endpoint. No shared secret.

Epicor JWT

direct
Protocol
Epicor-issued JWT
Validation
Instance's registered public key (PEM/JWKS)
Context
username, email, company
Use
Direct end-user tool execution

Epicor-issued tokens are validated against the instance's registered public key. Identity comes straight from the Epicor token claims.

MCP OAuth 2.1

ai clients
Protocol
Authorization code + PKCE (SHA-256)
Token signing
HS256 with server secret
Access token
1 hour
Refresh token
90 days, rotated on every use

AI clients authenticate via OAuth 2.1 with PKCE. No client secret: the code verifier proves the client.

006isolationtenant + transport

Isolation and transport

Tenant context

Cutova scopes protected operations to the authenticated tenant. A request cannot override that ownership by supplying another tenant id. Instances, tools and credentials stay within their tenant context.

TenantContextGuard

Instance isolation

An Epicor instance belongs to exactly one tenant. Tools, resources and credentials are bound to their instance, and tokens embed both tenant and instance claims. McpBearerGuard checks the token's instance against the tool's before it runs.

token scoping

Transport

TLS 1.2/1.3 with HSTS and automated certificate renewal; HTTP redirects to HTTPS. The on-premise gateway uses WebSocket over TLS with an SHA-256-hashed API key, and its registration tokens are one-time with a 24-hour expiry. Revoking a gateway closes its active connection and prevents reconnection with that key.

TLS · WSS

Token rotation

Refresh tokens are bound to the client that received consent and rotate on use. Access tokens live one hour. Administrators can revoke access when a connection is no longer needed.

rotate on use

Roles

Console sign-in uses two roles: Super Admin and Admin. Permissions are enforced at the API with a guard and at the UI with structural directives. Legacy End User and Viewer roles remain defined for backward compatibility and are never assigned.

RBAC
007subprocessorsproviders and review

Providers involved in the service.

Hosting, email and payment providers support the service. Your chosen AI provider receives tool results. An optional schema-description helper also uses an external AI provider when enabled.

Vultr

Hosts the VPS Cutova runs on, in Atlanta, GA. Your data transits their infrastructure in memory, and your encrypted credentials and any transient file outputs sit on their disk. As the infrastructure provider, Vultr states it does not use, access or share your content except as required by law or for security.

hosting

Cloudflare

Sends our transactional email, such as sign-in and account messages. It receives no Epicor data.

email only

Stripe

Processes card payments if you buy a plan by card. It receives your billing email and your Cutova tenant id, and handles the card details directly, so we never see or store a full card number. It receives no Epicor data.

payment processing

Keycloak

Handles admin sign-in. It is self-hosted on the same servers, so no separate vendor operates it or receives data through it.

self-hosted

Your AI provider

The assistant and provider you connect receive tool results. Their retention and use of those results depend on your agreement and settings. Use a provider and account configuration approved by your organization.

your choice, your agreement

Optional AI schema descriptions

This optional helper uses OpenAI by default. Existing compatible provider endpoints remain supported and are identified in the approval notice. Each request requires administrator approval after reviewing the configured model, transmitted fields and data terms. It sends tool and field names, types and existing descriptions to provide business context. It does not automatically send query results. Names and descriptions can contain business information, so review them first. Manual editing does not use AI.

OpenAI processes this metadata separately from your connected assistant, subject to our applicable subprocessor obligations. See OpenAI data use and retention. We do not promise zero provider retention.

optional external processing

Independent audit status. Cutova has not completed a SOC 2 examination and does not have a SOC 2 report. The controls described here are not an independent attestation.