pub struct CodeModeConfig {Show 43 fields
pub enabled: bool,
pub allow_mutations: bool,
pub allowed_mutations: HashSet<String>,
pub blocked_mutations: HashSet<String>,
pub allow_introspection: bool,
pub blocked_fields: HashSet<String>,
pub allowed_queries: HashSet<String>,
pub blocked_queries: HashSet<String>,
pub openapi_reads_enabled: bool,
pub openapi_allow_writes: bool,
pub openapi_allowed_writes: HashSet<String>,
pub openapi_blocked_writes: HashSet<String>,
pub openapi_allow_deletes: bool,
pub openapi_allowed_deletes: HashSet<String>,
pub openapi_blocked_paths: HashSet<String>,
pub openapi_internal_blocked_fields: HashSet<String>,
pub openapi_output_blocked_fields: HashSet<String>,
pub openapi_require_output_declaration: bool,
pub sql_reads_enabled: bool,
pub sql_allow_writes: bool,
pub sql_allow_deletes: bool,
pub sql_allow_ddl: bool,
pub sql_allowed_statements: HashSet<String>,
pub sql_blocked_statements: HashSet<String>,
pub sql_blocked_tables: HashSet<String>,
pub sql_allowed_tables: HashSet<String>,
pub sql_blocked_columns: HashSet<String>,
pub sql_max_rows: u64,
pub sql_max_joins: u32,
pub sql_require_where_on_writes: bool,
pub action_tags: HashMap<String, String>,
pub max_depth: u32,
pub max_field_count: u32,
pub max_cost: u32,
pub allowed_sensitive_categories: HashSet<String>,
pub token_ttl_seconds: i64,
pub auto_approve_levels: Vec<RiskLevel>,
pub max_query_length: usize,
pub max_result_rows: usize,
pub query_timeout_seconds: u32,
pub server_id: Option<String>,
pub sdk_operations: HashSet<String>,
pub operations: Vec<OperationEntry>,
}Expand description
Configuration for Code Mode.
Fields§
§enabled: boolWhether Code Mode is enabled for this server
allow_mutations: boolWhether to allow mutations (MVP: false)
allowed_mutations: HashSet<String>Allowed mutation names (whitelist). If empty and allow_mutations=true, all are allowed.
blocked_mutations: HashSet<String>Blocked mutation names (blacklist). Always blocked even if allow_mutations=true.
allow_introspection: boolWhether to allow introspection queries
blocked_fields: HashSet<String>Fields that should never be returned (Type.field format) - GraphQL
allowed_queries: HashSet<String>Allowed query names (whitelist). If empty and mode is allowlist, none are allowed.
blocked_queries: HashSet<String>Blocked query names (blocklist). Always blocked even if reads enabled.
openapi_reads_enabled: boolWhether read operations (GET) are enabled (default: true)
openapi_allow_writes: boolWhether write operations (POST, PUT, PATCH) are allowed globally
openapi_allowed_writes: HashSet<String>Allowed write operations (operationId or “METHOD /path”)
openapi_blocked_writes: HashSet<String>Blocked write operations
openapi_allow_deletes: boolWhether delete operations (DELETE) are allowed globally
openapi_allowed_deletes: HashSet<String>Allowed delete operations (operationId or “METHOD /path”)
openapi_blocked_paths: HashSet<String>Blocked paths (glob patterns like “/admin/*”)
openapi_internal_blocked_fields: HashSet<String>Fields that are stripped from API responses entirely (no access)
openapi_output_blocked_fields: HashSet<String>Fields that can be used internally but not in script output
openapi_require_output_declaration: boolWhether scripts must declare their return type with @returns
sql_reads_enabled: boolWhether SELECT statements are enabled (default: true).
sql_allow_writes: boolWhether INSERT/UPDATE/MERGE statements are allowed globally.
sql_allow_deletes: boolWhether DELETE/TRUNCATE statements are allowed globally.
sql_allow_ddl: boolWhether DDL (CREATE/ALTER/DROP/GRANT/REVOKE) is allowed globally.
Default is false — DDL is almost never appropriate for LLM-generated code.
sql_allowed_statements: HashSet<String>Allowed statement types (“SELECT”/“INSERT”/“UPDATE”/“DELETE”/“DDL”). If non-empty, only statement types in this set are allowed.
sql_blocked_statements: HashSet<String>Blocked statement types. Always blocked even if globally allowed.
sql_blocked_tables: HashSet<String>Tables that are always forbidden (blocklist mode).
sql_allowed_tables: HashSet<String>If non-empty, only these tables can be accessed (allowlist mode).
sql_blocked_columns: HashSet<String>Columns that may not be referenced in any statement (e.g., password, ssn).
sql_max_rows: u64Maximum row-count estimate allowed (based on LIMIT or default estimate).
sql_max_joins: u32Maximum number of JOINs in a single statement.
sql_require_where_on_writes: boolWhether to require a WHERE clause for UPDATE/DELETE statements.
Action tags to override inferred actions for specific operations.
max_depth: u32Maximum query depth
max_field_count: u32Maximum field count per query
max_cost: u32Maximum estimated query cost
allowed_sensitive_categories: HashSet<String>Allowed sensitive data categories
token_ttl_seconds: i64Token time-to-live in seconds
auto_approve_levels: Vec<RiskLevel>Risk levels that can be auto-approved without human confirmation
max_query_length: usizeMaximum query length in characters
max_result_rows: usizeMaximum result rows to return
query_timeout_seconds: u32Query execution timeout in seconds
server_id: Option<String>Server ID for token generation
sdk_operations: HashSet<String>Allowed SDK operation names for SDK-backed Code Mode. When non-empty, Code Mode uses SDK dispatch instead of HTTP. Operations are validated at compile time — unlisted names are rejected.
operations: Vec<OperationEntry>Declared operations for plain-name ID mapping in Cedar entities. Parsed from [[code_mode.operations]] TOML sections. When non-empty, ScriptEntity calledOperations uses IDs from the registry built from these entries. Unregistered paths fall back to METHOD:/path.
Implementations§
Source§impl CodeModeConfig
impl CodeModeConfig
Sourcepub fn from_toml(toml_str: &str) -> Result<Self, Error>
pub fn from_toml(toml_str: &str) -> Result<Self, Error>
Parse CodeModeConfig from a full TOML config string.
Extracts the [code_mode] section (including [[code_mode.operations]])
and ignores all other sections. This is the recommended way for external
servers to build their config from config.toml:
const CONFIG_TOML: &str = include_str!("../../config.toml");
let config = CodeModeConfig::from_toml(CONFIG_TOML)
.expect("Invalid code_mode section in config.toml");If the TOML has no [code_mode] section, returns CodeModeConfig::default().
Sourcepub fn is_sdk_mode(&self) -> bool
pub fn is_sdk_mode(&self) -> bool
Returns true if this config enables SDK-backed Code Mode.
Sourcepub fn should_auto_approve(&self, risk_level: RiskLevel) -> bool
pub fn should_auto_approve(&self, risk_level: RiskLevel) -> bool
Check if a risk level should be auto-approved.
Sourcepub fn server_id(&self) -> &str
pub fn server_id(&self) -> &str
Get the server ID, falling back to a default.
Note: The "unknown" fallback produces silent AVP default-deny failures
(no Cedar policy matches a server_id of "unknown"). Prefer
resolve_server_id to auto-fill from environment,
or require_server_id to fail fast.
Sourcepub fn resolve_server_id(&mut self)
pub fn resolve_server_id(&mut self)
Auto-resolve server_id from environment if not already set.
Resolution order:
self.server_id(if already set, e.g., from TOML) — no changePMCP_SERVER_IDenv varAWS_LAMBDA_FUNCTION_NAMEenv var (Lambda runtime)- Left as
None— caller is responsible for handling
ValidationPipeline constructors call this
automatically, so wrappers rarely need to invoke it directly.
Sourcepub fn require_server_id(&self) -> Result<&str, ValidationError>
pub fn require_server_id(&self) -> Result<&str, ValidationError>
Return the server_id, or an error if not resolved.
Use this in production code paths that require AVP authorization —
it fails fast with a clear message instead of letting "unknown"
reach AVP and produce a silent default-deny.
Sourcepub fn to_server_config_entity(&self) -> ServerConfigEntity
pub fn to_server_config_entity(&self) -> ServerConfigEntity
Convert to ServerConfigEntity for policy evaluation.
Sourcepub fn to_openapi_server_entity(&self) -> OpenAPIServerEntity
pub fn to_openapi_server_entity(&self) -> OpenAPIServerEntity
Convert to OpenAPIServerEntity for policy evaluation (OpenAPI Code Mode).
Sourcepub fn to_sql_server_entity(&self) -> SqlServerEntity
pub fn to_sql_server_entity(&self) -> SqlServerEntity
Convert to SqlServerEntity for policy evaluation (SQL Code Mode).
Trait Implementations§
Source§impl Clone for CodeModeConfig
impl Clone for CodeModeConfig
Source§fn clone(&self) -> CodeModeConfig
fn clone(&self) -> CodeModeConfig
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for CodeModeConfig
impl Debug for CodeModeConfig
Source§impl Default for CodeModeConfig
impl Default for CodeModeConfig
Source§impl<'de> Deserialize<'de> for CodeModeConfig
impl<'de> Deserialize<'de> for CodeModeConfig
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for CodeModeConfig
impl RefUnwindSafe for CodeModeConfig
impl Send for CodeModeConfig
impl Sync for CodeModeConfig
impl Unpin for CodeModeConfig
impl UnsafeUnpin for CodeModeConfig
impl UnwindSafe for CodeModeConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more