Configuration

English · Русский

Defaults are conservative. Raise limits only after reviewing expected data volume, available resources, and the trust level of the input.

These settings describe stable 1.6.0. Historical anchors remain available. Configuration and tool registration do not grant dataset permission or local preservation approval. Existing component settings and exact allowlists remain supported.

All byte values are integer bytes unless stated otherwise.

CLI flags override the corresponding command defaults. Environment variables configure resource, database, provider, and transport boundaries only where listed below; they do not silently activate an optional provider or overwrite an explicit CLI value. Use COMMAND --help to inspect CLI defaults and doctor --json for installed/local capability states. doctor deliberately does not read provider credentials or test remote reachability.

Common Transformation Profile

Stable 1.6.0 provides the common CLI/MCP workflow. Its versioned reference profile combines two or more inputs with one independently reviewed DatasetSpec for final linked validation:

schema_version: "0.1"
validation: validation.yaml
inputs:
  - entity: fictional_parents
    source: parents.csv
    policy: parents-policy.yaml
  - entity: fictional_children
    source: children.csv
    policy: children-policy.yaml
    mappings: [keys.csv]

mappings and generation_policies list exact local reference paths to bind; they do not embed source rows. All paths are relative to the explicit reference root, not to each policy's directory, and must pass restricted no-follow reads. Entities must match their policies and final validation spec. Unknown/duplicate keys, conflicting links, unsafe references and budget exhaustion fail closed. Source, policies, mappings, generation policies, validation and exact profile bytes bind the reviewed digest, including order and whitespace.

Optional shared resource_limits supports only max_total_input_bytes and max_output_bytes; remaining dimensions stay in per-input behavior policies. Session precedence and explicit run-cap checks below still apply. Combined review bytes must fit --max-review-bytes; no truncation or implicit cap raise. The local create/wizard saves only policies/spec/references, not source copies or receipts. Saving changes paths and therefore requires fresh review. See the common-profile CLI workflow for draft CSV proposals, local confirmation and retained-publication restrictions. This profile is not a compatibility promise for stable 1.5.0. The finite stable 1.6.0 campaign completed with recorded coverage limits. Registration and release acceptance grant no dataset authority or local preservation approval.

Input And Generation Limits

Variable Default Purpose
TEST_DATA_AGENT_MAX_GENERATION_COUNT 100000 Maximum rows per entity
TEST_DATA_AGENT_MAX_INPUT_FILE_BYTES 134217728 Maximum bytes per input file
TEST_DATA_AGENT_MAX_TOTAL_INPUT_BYTES 536870912 Maximum total input bytes
TEST_DATA_AGENT_MAX_INPUT_ROWS 1000000 Maximum input rows
TEST_DATA_AGENT_MAX_INPUT_COLUMNS 1000 Maximum columns
TEST_DATA_AGENT_MAX_INPUT_CELLS 10000000 Maximum row/column cells
TEST_DATA_AGENT_MAX_INPUT_FILES 100 Maximum files in a source folder
TEST_DATA_AGENT_MAX_INPUT_CELL_CHARS 1000000 Maximum characters in one CSV cell or JSON string value
TEST_DATA_AGENT_MAX_PARQUET_EXPANDED_BYTES 536870912 Maximum estimated expanded Parquet bytes
TEST_DATA_AGENT_MAX_YAML_ALIASES 50 Maximum YAML aliases
TEST_DATA_AGENT_MAX_YAML_DEPTH 100 Maximum YAML nesting depth
TEST_DATA_AGENT_MAX_JSON_DEPTH 100 Maximum structural depth for JSON datasets, profile/spec imports, and profile caches before parsing
TEST_DATA_AGENT_MAX_BUSINESS_RULES_BYTES 1048576 Maximum rule payload bytes
TEST_DATA_AGENT_MAX_BUSINESS_RULE_EVALUATIONS 5000000 Estimated row/rule work limit
TEST_DATA_AGENT_MAX_OUTPUT_BYTES 536870912 Maximum complete generated bundle size
TEST_DATA_AGENT_MIN_FREE_DISK_BYTES 134217728 Disk space kept in reserve
TEST_DATA_AGENT_MAX_GENERATION_SECONDS 300 Generation wall-clock limit
TEST_DATA_AGENT_MAX_LOCAL_PROFILE_SECONDS 120 Wall-clock limit for one local CSV-folder profile
TEST_DATA_AGENT_MAX_LOCAL_PROFILE_SAMPLE_ROWS 1000000 Cumulative relationship/rule sample-row ceiling per folder profile

Values must be positive integers, except the two *_SECONDS values, which accept positive finite numbers. Invalid environment values fail closed.

Generator MCP Invocation Deadline

TEST_DATA_AGENT_MCP_MAX_INVOCATION_SECONDS defaults to 120 and accepts a finite positive number of seconds. Set it in the generator MCP client's env configuration and restart that server. The Compose generator service forwards the same variable from the shell or Compose .env file. Startup rejects invalid values with a value-free configuration error (exit 78). One captured value governs both the transport request context and service invocation; tool arguments cannot change it.

For a reviewed longer run, for example set this value to 1800. The independent TEST_DATA_AGENT_MAX_GENERATION_SECONDS, profiling and transformation byte/row/ cell limits still apply; set the relevant limits explicitly too. This setting does not enlarge SQL access, raw frame, argument or response-byte ceilings and does not establish measured 1M × 100 capacity. Trino MCP keeps its separate TRINO_MAX_INVOCATION_SECONDS setting.

Transformation Input Limits

These settings apply to transformation acquisition, decoding and policy-aware review preflight in stable 1.6.0, plus CSV profiling/trace shape checks. They do not change source-free profiling/MCP budgets or themselves establish end-to-end capacity. Remaining pipeline caps still apply. The fictional private replacement-only CSV scenario passed 300,000 rows × 50 columns; see candidate evidence. This does not certify public execution, SQL routes or the 1M × 100 target.

Use resource_limits in the saved behavior profile (not DatasetProfile):

resource_limits:
  max_input_rows: 1000000
  max_input_columns: 100
  max_input_cells: 100000000

For the current shell session, override a setting explicitly:

export TEST_DATA_AGENT_TRANSFORM_MAX_INPUT_ROWS=1000000
export TEST_DATA_AGENT_TRANSFORM_MAX_INPUT_COLUMNS=100
export TEST_DATA_AGENT_TRANSFORM_MAX_INPUT_CELLS=100000000

For one invocation, prefix that invocation with the same NAME=value assignments instead of exporting them. No new public execution command is introduced here. In PowerShell, use $env:TEST_DATA_AGENT_TRANSFORM_MAX_INPUT_ROWS = '1000000' for the session.

Behavior-profile key under resource_limits Decoder default Unit
max_input_rows 1000000 rows
max_input_columns 1000 columns
max_input_cells 100000000 cells
max_input_file_bytes 134217728 bytes
max_total_input_bytes 536870912 combined snapshot bytes
max_input_cell_chars 1000000 characters
max_parquet_expanded_bytes 536870912 decoded/estimated expanded bytes
max_output_bytes 536870912 transformation output bytes

Each key has a session variable named TEST_DATA_AGENT_TRANSFORM_ followed by the uppercase key. Values must be positive integers no greater than 9223372036854775807. Precedence, per explicitly supplied field: transformation session variable, saved behavior profile, legacy TEST_DATA_AGENT_<KEY> variable, decoder default. Invalid settings fail; they are not silently ignored.

Structured limit failures identify requested_above_limit or limit_exceeded, the amount, threshold, unit, and origin (session, profile, legacy_session, or default). They name the exact session variable and saved-profile key to change. No data values are included; no automatic increase or truncation occurs. Trace requests above the effective cell limit fail with requested_above_limit instead of being silently capped. If the trace exhausts its smaller per-run budget, limit_exceeded reports origin trace_run and explicitly names trace_csv_review_request(max_cells=...) as the parameter to increase within the session/profile ceiling. Changing only the ceiling does not change that explicit per-run argument. Registered CLI/MCP request boundaries retain typed value-free limit failures. Increasing a decoder limit does not override the explicit total-input budget, downstream work/output budgets, or explicit SQL capture run arguments. Expanded-byte accounting is not a peak-RSS promise.

Transformation total-input accounting includes source, behavior policy, referenced mappings/generation policies, classification evidence and displayed review bytes. Read-only review resolves the same session/profile ceiling as the registered execution workflow; it does not silently request the default ceiling. Set TEST_DATA_AGENT_TRANSFORM_MAX_TOTAL_INPUT_BYTES for the session or resource_limits.max_total_input_bytes in the saved behavior profile. The registered transform-execute CLI additionally accepts --max-total-input-bytes and the workspace-scoped execute_transformation tool accepts max_total_input_bytes. These implemented RC interfaces do not issue approval. Smaller explicit run caps report snapshot_run; a run cap above the configured ceiling is rejected, not raised.

Transformation CSV character limits reach parsing, sensitivity detection and profile finalization. Internal CSV readers coordinate the stdlib process-global field limit for each record and restore its previous value even on failure. Each reader keeps its own limit; source-free readers retain legacy/default limits. External code directly changing csv.field_size_limit is outside this coordination. On parser overflow, the reported amount is the first forbidden character (limit + 1), not the length of an unread remainder of the field.

Transformation CSV execution uses resource_limits.max_output_bytes or TEST_DATA_AGENT_TRANSFORM_MAX_OUTPUT_BYTES as the output ceiling, distinct from input-file bytes. Its explicit max_output_bytes run argument must fit that ceiling; it is no longer silently capped at 128 MiB. Actual exhaustion reports origin output_run, the encoded byte count (including CSV header and quoting), and replace_csv_snapshot(max_output_bytes=...). Partial output is not returned. Transformation SQL/Parquet encoding checks its max_bytes run argument and reports sql_output_run / parquet_output_run with the corresponding render_transformation_sql(max_bytes=...) / render_transformation_parquet(max_bytes=...) recovery parameter. Publication also counts the manifest: bundle_run names temporary_csv_publication(max_output_bytes=...). A bundle over budget is rejected before publication. These share the output ceiling when invoked by the publisher; standalone renderers only receive their explicit run budget. Configured query capture uses the same transformation input ceilings: max_rows / max_bytes must fit the effective row / input-file-byte limits before opening its stream. Runtime exhaustion names query_rows_run or query_bytes_run and the corresponding _capture_authorized_result argument. Captured bytes include the query envelope; decoded bytes have their own max_parquet_expanded_bytes ceiling. The resolved limits and their origins are bound into capture metadata. PostgreSQL's owned stream uses these authorized capture limits, not aggregate-profiling result-row/cell budgets; allowlists, read-only sessions and existing statement/time limits remain. The private process supervisor reconstructs only validated fixed-schema limit diagnostics after clean worker exit and cleanup, never driver exception text. The registered RC workflow uses these checks; synthetic isolation evidence does not establish live-database acceptance.

The private replacement dry-run has the same checks. Its exhausted run budget reports origin replacement_trace_run and names trace_csv_replacements(max_cells=...); a request above the effective session/profile ceiling reports requested_above_limit before tracing.

Local CSV-Folder Profile Limits

Each fresh local folder profile receives one typed monotonic budget. Its defaults are 120 seconds, at most 1,000,000 retained sample rows, 536,870,912 input bytes, and 10,000,000 streamed cells. The byte and cell caps reuse TEST_DATA_AGENT_MAX_TOTAL_INPUT_BYTES and TEST_DATA_AGENT_MAX_INPUT_CELLS; the normal CLI sample is smaller at 50,000 rows via --rule-sample-rows.

The Python API can pass narrower LocalProfileLimits through a fresh LocalProfileBudget. Deadline, sample, byte, or cell exhaustion raises a structured LocalProfileLimitError. A failed profile is not written to the metadata-only cache.

PostgreSQL Profiling

profile-postgres requires POSTGRES_ALLOWED_SCHEMAS, POSTGRES_ALLOWED_TABLES, and POSTGRES_ALLOWED_COLUMNS. Connection settings use POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DATABASE, POSTGRES_USER, and POSTGRES_SSLMODE. As an alternative to the host, port, database, and TLS components, POSTGRES_JDBC_URL accepts the credential-free jdbc:postgresql://host:port/database?sslmode=verify-full shape. This is URL syntax parsed into the existing Psycopg configuration, not a Java/JDBC runtime. Set POSTGRES_PASSWORD_ENV to the name of the environment variable containing the password; never put a user or password in the URL. The URL is limited to 4,096 UTF-8 bytes, its host to 253 characters, and its database identifier to 63 characters.

Each POSTGRES_ALLOWED_COLUMNS item is either an exact schema.table.column or a table-qualified schema.table.*. Wildcards are expanded from bounded metadata into explicit columns before aggregate queries; they never become SQL projection stars or local-value permissions.

The POSTGRES_MAX_TABLES, POSTGRES_MAX_COLUMNS, POSTGRES_MAX_STATEMENTS, POSTGRES_MAX_RESULT_ROWS, POSTGRES_MAX_RESULT_CELLS, and POSTGRES_MAX_SECONDS limits bound one profile. Statement and lock timeouts use POSTGRES_STATEMENT_TIMEOUT_MS and POSTGRES_LOCK_TIMEOUT_MS. See the PostgreSQL workflow for a complete example.

Variable Default Purpose
POSTGRES_SOURCE_ID postgres Stable non-secret source identity used in qualified entity names
POSTGRES_JDBC_URL unset Credential-free JDBC-style endpoint; conflicts with unequal explicit host, port, database, or TLS components
POSTGRES_HOST localhost PostgreSQL host; never serialized into profile identity
POSTGRES_PORT 5432 PostgreSQL port
POSTGRES_DATABASE postgres Database name
POSTGRES_USER test_data_agent Existing read-only database role
POSTGRES_PASSWORD_ENV unset Name of the environment variable containing the password
POSTGRES_SSLMODE verify-full Verify the certificate and configured hostname; weaker modes require explicit local opt-in
POSTGRES_ALLOW_INSECURE false Required with require, verify-ca, or disable; local isolated testing only
POSTGRES_ALLOWED_SCHEMAS required Comma-separated schema allowlist
POSTGRES_ALLOWED_TABLES required Comma-separated schema.table allowlist
POSTGRES_ALLOWED_COLUMNS required Comma-separated exact schema.table.column or table-qualified schema.table.* profiling selectors
POSTGRES_STATEMENT_TIMEOUT_MS 30000 Per-statement timeout requested on the read-only session
POSTGRES_LOCK_TIMEOUT_MS 5000 Lock wait timeout requested on the read-only session
POSTGRES_MAX_TABLES 100 Maximum profiled tables
POSTGRES_MAX_COLUMNS 1000 Maximum profiled columns
POSTGRES_MAX_STATEMENTS 1500 Cumulative statement limit
POSTGRES_MAX_RESULT_ROWS 10000 Cumulative aggregate/metadata result rows
POSTGRES_MAX_RESULT_CELLS 100000 Cumulative aggregate/metadata result cells
POSTGRES_MAX_SECONDS 120 Shared monotonic profile deadline

The database role must independently lack write privileges. The client also requests default_transaction_read_only=on, but that setting is defense in depth rather than a replacement for role permissions. No arbitrary SQL or source-row profiling option exists.

SQL Query Source Limits

profile-query uses the selected adapter's existing connection, physical table/column allowlists, statement/result/time/scan budgets, and read-only enforcement. Trino query sources require TRINO_ALLOWED_TABLE_COLUMNS; an unrestricted Trino configuration is rejected for this command.

Variable Default Purpose
SQL_QUERY_MAX_BYTES 65536 Maximum UTF-8 bytes in the local query file
SQL_QUERY_MAX_AST_NODES 500 Maximum parsed SQL nodes
SQL_QUERY_MAX_AST_DEPTH 32 Maximum parsed SQL nesting depth
SQL_QUERY_MAX_PROJECTED_COLUMNS 100 Maximum explicit fields after wildcard expansion

Values must be positive integers and remain below the built-in absolute caps. The file is read once with descriptor metadata revalidation. SQL text and literals are not accepted through environment variables or CLI options and are not written to profiles, manifests, errors, providers, or MCP responses.

GigaChat Advisor

GigaChat is explicit and off unless agent-advise --provider gigachat is selected. Configure exactly one runtime authentication value:

Variable Default Purpose
GIGACHAT_CREDENTIALS unset Authorization key used by the official SDK to obtain an access token
GIGACHAT_ACCESS_TOKEN unset Pre-obtained short-lived access token; mutually exclusive with GIGACHAT_CREDENTIALS
GIGACHAT_SCOPE GIGACHAT_API_PERS GIGACHAT_API_PERS, GIGACHAT_API_B2B, or GIGACHAT_API_CORP
GIGACHAT_CA_BUNDLE_FILE system trust store Absolute or relative path to a reviewed readable CA bundle

Credentials are never accepted as CLI arguments or written to settings, workspaces, logs, or errors. The API and authorization endpoints are fixed to the official HTTPS services. TLS verification cannot be disabled; endpoint, client-certificate, SSL-context, or token-expiry overrides fail locally.

The CLI exposes only the optional --model override. Applications that use the Python adapter can provide frozen GigaChatAdvisorSettings to narrow the default 4 MiB request, 1 MiB response, 4,096 output-token, 15-second timeout, and zero-retry budgets. See Use The GigaChat Advisor.

Generator MCP

See MCP Permissions for the tool-by-tool rights matrix. These settings constrain application behavior; they do not grant operating-system access, database privileges or human approval. Ordinary MCP tool paths use the workspace; audit/authentication files and owned runtime temporary storage have separate configured locations.

Variable Required Purpose
TEST_DATA_AGENT_WORKSPACE_ROOT Recommended Bounds generator workspace tool paths; does not sandbox the process or relocate audit/authentication/runtime temporary files
TEST_DATA_AGENT_MAX_PROFILE_PAYLOAD_BYTES Optional Maximum inline safe profile size; defaults to 4 MiB
TEST_DATA_AGENT_AUDIT_LOG Optional Enables a shared HMAC-authenticated JSONL audit log
TEST_DATA_AGENT_AUDIT_HMAC_KEY Required with audit log Base64 key containing at least 32 random bytes
TEST_DATA_AGENT_AUDIT_HMAC_KEY_FILE Alternative to key value Path to a bounded base64 secret file
TEST_DATA_AGENT_AUDIT_ACTOR Optional Stable non-sensitive worker or deployment label
TEST_DATA_AGENT_AUDIT_MAX_BYTES Optional Audit log size limit; defaults to 64 MiB

When unset, the generator server uses the current working directory. For shared or production-like use, always set a dedicated narrow workspace.

Configure exactly one of TEST_DATA_AGENT_AUDIT_HMAC_KEY and TEST_DATA_AGENT_AUDIT_HMAC_KEY_FILE. Secret files must be regular, non-linked, at most 4096 bytes, and not group- or world-writable.

Trino MCP

The default aggregate-only tools are source-literal-free. The explicit opt-in row-returning tools are configured separately. Both servers use stdio, with no MCP HTTP listener or per-tool OAuth scopes. Trino database authentication and client tool-confirmation policy remain separate:

Variable Default Purpose
TRINO_ENABLE_SAFE_SELECT false Enables run_safe_select; every returned string is recursively masked in bounded composite values, but other non-string source values may remain outside the source-literal-free guarantee

Trino Connection

Use TRINO_JDBC_URL as an alternative to separate host and port settings. Its supported form is jdbc:trino://host:port/catalog/schema?SSL=true. Catalog and schema are optional request defaults and are accepted only when each is in the mandatory allowlist. Authentication remains in TRINO_USER and existing runtime secret mechanisms; URL credentials, tokens, roles, session properties, headers, proxies, unknown properties, and SSL=false are rejected. The URL is parsed into the existing Python Trino client and does not load Java or a JDBC driver. The URL is limited to 4,096 UTF-8 bytes, its host to 253 characters, and each catalog or schema identifier to 255 characters.

For a complete MCP username/password configuration, including protected password injection and a macOS Keychain launcher, follow MCP with a username and password or the Russian guide.

Variable Default Purpose
TRINO_JDBC_URL unset Credential-free JDBC-style endpoint; conflicts with unequal explicit endpoint/default components
TRINO_HOST localhost Trino host name
TRINO_PORT 8080 Trino port
TRINO_USER test_data_agent Trino user
TRINO_HTTP_SCHEME https https or explicitly allowed http
TRINO_AUTH_METHOD none Optional methods in stable 1.6.0: basic, jwt, kerberos, gssapi, oauth2, certificate; authenticated connections require HTTPS and certificate verification
TRINO_AUTH_SECRET_ENV unset Name of a runtime environment variable containing the Basic password or JWT, not the secret itself
TRINO_AUTH_CERTIFICATE_ENV unset Name of a runtime environment variable containing the client certificate path
TRINO_AUTH_KEY_ENV unset Name of a runtime environment variable containing the private-key path
TRINO_CATALOG unset Optional request default; must be in TRINO_ALLOWED_CATALOGS
TRINO_SCHEMA unset Optional request default; requires TRINO_CATALOG and membership in TRINO_ALLOWED_SCHEMAS
TRINO_ALLOWED_CATALOGS required Comma-separated catalog allowlist
TRINO_ALLOWED_SCHEMAS required Comma-separated schema allowlist
TRINO_ALLOWED_TABLE_COLUMNS unset Optional exact catalog.schema.table.column or restricted table-qualified catalog.schema.table.* profile selectors; wildcard does not authorize category literals
TRINO_REQUEST_TIMEOUT_SECONDS 30 Client request timeout, 0.1 to 300
TRINO_MAX_RESULT_ROWS 10000 Client result cap, maximum 100000
TRINO_QUERY_MAX_EXECUTION_TIME 30s Trino execution-time session budget
TRINO_QUERY_MAX_RUN_TIME 45s Trino total run-time session budget
TRINO_QUERY_MAX_SCAN_PHYSICAL_BYTES 1GB Trino physical scan budget
TRINO_DEPLOYMENT_PROFILE trusted-local trusted-local permits an unset cumulative scan ceiling; shared-hardened requires a finite TRINO_MAX_INVOCATION_ESTIMATED_SCAN_BYTES

The Kerberos/GSSAPI methods require their driver's optional requests_kerberos / requests_gssapi dependencies and existing runtime credentials. They use mutual authentication without delegation. profile-query --adapter trino --trino-oauth-browser explicitly opts into opening the configured Trino HTTPS authentication route at a local terminal when TRINO_AUTH_METHOD=oauth2. It never prints authentication URLs; pipes reject before connection. This is a local-only flag; MCP never installs a browser callback. Python applications can explicitly supply their own trusted redirect callback. The auth object is reused within one client; OAuth token caching remains the driver's implementation, including its optional operating-system keyring backend. These local checks do not prove remote reachability or authorize live access.

The OAuth2 HTTP adapter also guards the driver's direct token polling: requests must target the configured HTTPS Trino host and port, use verified TLS, and fit the remaining invocation/request deadline. Environment proxies and netrc are not inherited. Other token-server origins fail closed; this is not evidence of acceptance against a remote identity provider or a hard wall-clock guarantee for arbitrary slow response bodies. Selecting OAuth2 installs idempotent value-free diagnostic filters on trino.auth and urllib3.connectionpool; the latter can log token request paths at DEBUG. These filters remain attached for the process lifetime, including other traffic using those loggers. They neither store secrets nor disable the process logger or change its level.

Duration values use ms, s, m, or h. Data-size values use B, kB, MB, or GB.

TRINO_QUERY_MAX_RUN_TIME must be greater than or equal to TRINO_QUERY_MAX_EXECUTION_TIME.

When TRINO_ALLOWED_TABLE_COLUMNS is set, table profiling uses only its exact selectors plus metadata-expanded columns from a matching table wildcard. The request fails before aggregate work when metadata is empty, malformed, duplicated, inconsistent, or over the invocation column budget.

This selector is not a universal per-tool ACL: metadata discovery, count/cardinality tools, rule probes and optional run_safe_select do not apply it. The optional row tool checks catalog/schema scope and SQL safety, not this column list. Restrict the database identity's actual table/column grants independently. Catalog and schema allowlists are independent sets, not allowed catalog/schema pairs. See Trino tool rights.

Trino Invocation Limits

These limits apply to one MCP tool invocation, including nested table and column profiling. Every invocation receives a fresh monotonic budget.

Variable Default Unit Scope Failure behavior
TRINO_MAX_INVOCATION_PROFILED_COLUMNS 100 columns Per invocation Rejects before profiling the next column
TRINO_MAX_INVOCATION_STATEMENTS 150 statements Per invocation Rejects before opening the next Trino connection
TRINO_MAX_INVOCATION_SECONDS 120 seconds Per invocation Clamps HTTP and Trino query timeouts; closes active query resources on expiry
TRINO_MAX_INVOCATION_ESTIMATED_SCAN_BYTES unset bytes Per invocation; required for shared-hardened Rejects before a statement whose conservative estimate would exceed the limit

All configured values must be finite and positive. Column, statement, and scan limits accept integers; invocation seconds accepts a number. Invalid values fail server startup. The shared-hardened profile fails closed when the cumulative scan ceiling is unset. Budget exhaustion raises a bounded query-work error and does not restore work already consumed by nested helpers.

The typed budget also keeps database_result_bytes and transport_response_bytes separate; each defaults to 4 MiB in the Trino MCP work limits. The transport limit is measured in UTF-8 bytes after final MCP JSON serialization and framing, at the production writer boundary. Its minimum is 350 bytes: that fixed amount is reserved for the bounded terminal error response, so normal responses can use at most the configured total minus the reserve. A related notification and its final response share the same per-invocation budget.

TRINO_QUERY_MAX_EXECUTION_TIME, TRINO_QUERY_MAX_RUN_TIME, and TRINO_QUERY_MAX_SCAN_PHYSICAL_BYTES remain per-query limits. The invocation deadline clamps the two per-query time limits and TRINO_REQUEST_TIMEOUT_SECONDS to the remaining invocation time. When the optional cumulative scan limit is set, each statement conservatively consumes the configured per-query TRINO_QUERY_MAX_SCAN_PHYSICAL_BYTES cap. Leaving the cumulative cap unset is allowed only for the explicitly named trusted-local profile; the shared-hardened profile requires a finite cap before startup.

Explicit Safety Overrides

Variable Default Effect
TRINO_ALLOW_UNRESTRICTED false Allows missing catalog/schema allowlists
TRINO_ALLOW_INSECURE_HTTP false Allows plain HTTP

These accept 1, true, yes, or on and their false equivalents.

Do not enable either override for production or production-adjacent Trino. Plain HTTP is intended only for an isolated local integration environment.

Configured SQL Session Bounds

The generator MCP entrypoint reads these administrator settings once at startup. They bound the instance-owned configured_query_session manager, not ordinary source-free profiling or database credentials. Published 1.5.0 has no session tool. Invalid settings or workspace paths stop startup with a fixed error and exit code 78.

Variable Default Accepted values and meaning
TEST_DATA_AGENT_QUERY_SESSION_MAX_ACTIVE 4 Integer 1–32; maximum simultaneously owned sessions.
TEST_DATA_AGENT_QUERY_SESSION_MAX_CUMULATIVE_BYTES 67108864 Positive integer through 9223372036854775807; lifetime input-byte reservation ceiling for this server instance.
TEST_DATA_AGENT_QUERY_SESSION_MAX_SECONDS 300 Finite seconds 0.1–3600; session lifetime starts before capture and is never renewed by requests.

Each open reserves its explicit max_total_bytes before database work. Reservations are not refunded after failure, close or expiry. Per-input policy and transformation session ceilings still apply, as do SQL allowlists and statement, scan, invocation, transport and response budgets. Active operations are clamped to the session's remaining lifetime and request deadline. max_review_bytes must be positive and no greater than max_total_bytes; the output cap must fit the effective batch output ceiling. Expiry timers clean owned snapshots without requiring another request. The entrypoint also closes all sessions on normal or failed transport shutdown; cleanup failures refuse further work. See the session workflow.