Skip to main content

Kubernetes CRD reference

Packages

toolhive.stacklok.dev/audit

pkg.audit.Config

Config represents the audit logging configuration.

Appears in:

FieldDescriptionDefaultValidation
enabled booleanEnabled controls whether audit logging is enabled.
When true, enables audit logging with the configured options.
false
component stringComponent is the component name to use in audit events.
eventTypes string arrayEventTypes specifies which event types to audit. If empty, all events are audited.
excludeEventTypes string arrayExcludeEventTypes specifies which event types to exclude from auditing.
This takes precedence over EventTypes.
includeRequestData booleanIncludeRequestData determines whether to include request data in audit logs.false
includeResponseData booleanIncludeResponseData determines whether to include response data in audit logs.false
maxDataSize integerMaxDataSize limits the size of request/response data included in audit logs (in bytes).1024
logFile stringLogFile specifies the file path for audit logs. If empty, logs to stdout.

toolhive.stacklok.dev/authtypes

auth.types.BackendAuthStrategy

BackendAuthStrategy defines how to authenticate to a specific backend.

This struct provides type-safe configuration for different authentication strategies using HeaderInjection or TokenExchange fields based on the Type field.

Appears in:

FieldDescriptionDefaultValidation
type stringType is the auth strategy: "unauthenticated", "header_injection", "token_exchange"
headerInjection auth.types.HeaderInjectionConfigHeaderInjection contains configuration for header injection auth strategy.
Used when Type = "header_injection".
tokenExchange auth.types.TokenExchangeConfigTokenExchange contains configuration for token exchange auth strategy.
Used when Type = "token_exchange".

auth.types.HeaderInjectionConfig

HeaderInjectionConfig configures the header injection auth strategy. This strategy injects a static or environment-sourced header value into requests.

Appears in:

FieldDescriptionDefaultValidation
headerName stringHeaderName is the name of the header to inject (e.g., "Authorization").
headerValue stringHeaderValue is the static header value to inject.
Either HeaderValue or HeaderValueEnv should be set, not both.
headerValueEnv stringHeaderValueEnv is the environment variable name containing the header value.
The value will be resolved at runtime from this environment variable.
Either HeaderValue or HeaderValueEnv should be set, not both.

auth.types.TokenExchangeConfig

TokenExchangeConfig configures the OAuth 2.0 token exchange auth strategy. This strategy exchanges incoming tokens for backend-specific tokens using RFC 8693.

Appears in:

FieldDescriptionDefaultValidation
tokenUrl stringTokenURL is the OAuth token endpoint URL for token exchange.
clientId stringClientID is the OAuth client ID for the token exchange request.
clientSecret stringClientSecret is the OAuth client secret (use ClientSecretEnv for security).
clientSecretEnv stringClientSecretEnv is the environment variable name containing the client secret.
The value will be resolved at runtime from this environment variable.
audience stringAudience is the target audience for the exchanged token.
scopes string arrayScopes are the requested scopes for the exchanged token.
subjectTokenType stringSubjectTokenType is the token type of the incoming subject token.
Defaults to "urn:ietf:params:oauth:token-type:access_token" if not specified.

toolhive.stacklok.dev/config

vmcp.config.AggregationConfig

AggregationConfig configures capability aggregation.

Appears in:

FieldDescriptionDefaultValidation
conflictResolution pkg.vmcp.ConflictResolutionStrategyConflictResolution is the strategy: "prefix", "priority", "manual"
conflictResolutionConfig vmcp.config.ConflictResolutionConfigConflictResolutionConfig contains strategy-specific configuration.
tools vmcp.config.WorkloadToolConfig arrayTools contains per-workload tool configuration.
excludeAllTools boolean

vmcp.config.AuthzConfig

AuthzConfig configures authorization.

Appears in:

FieldDescriptionDefaultValidation
type stringType is the authz type: "cedar", "none"
policies string arrayPolicies contains Cedar policy definitions (when Type = "cedar").

vmcp.config.CircuitBreakerConfig

CircuitBreakerConfig configures circuit breaker.

Appears in:

FieldDescriptionDefaultValidation
enabled booleanEnabled indicates if circuit breaker is enabled.
failureThreshold integerFailureThreshold is how many failures trigger open circuit.
timeout vmcp.config.DurationTimeout is how long to keep circuit open.

vmcp.config.CompositeToolConfig

CompositeToolConfig defines a composite tool workflow. This matches the YAML structure from the proposal (lines 173-255).

Appears in:

FieldDescriptionDefaultValidation
name stringName is the workflow name (unique identifier).
description stringDescription describes what the workflow does.
parameters pkg.json.MapParameters defines input parameter schema in JSON Schema format.
Should be a JSON Schema object with "type": "object" and "properties".
Example:
{
"type": "object",
"properties": {
"param1": {"type": "string", "default": "value"},
"param2": {"type": "integer"}
},
"required": ["param2"]
}
We use json.Map rather than a typed struct because JSON Schema is highly
flexible with many optional fields (default, enum, minimum, maximum, pattern,
items, additionalProperties, oneOf, anyOf, allOf, etc.). Using json.Map
allows full JSON Schema compatibility without needing to define every possible
field, and matches how the MCP SDK handles inputSchema.
timeout vmcp.config.DurationTimeout is the maximum workflow execution time.
steps vmcp.config.WorkflowStepConfig arraySteps are the workflow steps to execute.
output vmcp.config.OutputConfigOutput defines the structured output schema for this workflow.
If not specified, the workflow returns the last step's output (backward compatible).

vmcp.config.Config

Config is the unified configuration model for Virtual MCP Server. This is platform-agnostic and used by both CLI and Kubernetes deployments.

Platform-specific adapters (CLI YAML loader, Kubernetes CRD converter) transform their native formats into this model.

Validation:

  • Type: object

Appears in:

FieldDescriptionDefaultValidation
name stringName is the virtual MCP server name.
groupRef stringGroup references an existing MCPGroup that defines backend workloads.
In Kubernetes, the referenced MCPGroup must exist in the same namespace.
Required: {}
incomingAuth vmcp.config.IncomingAuthConfigIncomingAuth configures how clients authenticate to the virtual MCP server.
outgoingAuth vmcp.config.OutgoingAuthConfigOutgoingAuth configures how the virtual MCP server authenticates to backends.
aggregation vmcp.config.AggregationConfigAggregation configures capability aggregation and conflict resolution.
compositeTools vmcp.config.CompositeToolConfig arrayCompositeTools defines inline composite tool workflows.
Full workflow definitions are embedded in the configuration.
For Kubernetes, complex workflows can also reference VirtualMCPCompositeToolDefinition CRDs.
operational vmcp.config.OperationalConfigOperational configures operational settings.
metadata object (keys:string, values:string)Refer to Kubernetes API documentation for fields of metadata.
telemetry pkg.telemetry.ConfigTelemetry configures OpenTelemetry-based observability for the Virtual MCP server
including distributed tracing, OTLP metrics export, and Prometheus metrics endpoint.
audit pkg.audit.ConfigAudit configures audit logging for the Virtual MCP server.
When present, audit logs include MCP protocol operations.
See audit.Config for available configuration options.

vmcp.config.ConflictResolutionConfig

ConflictResolutionConfig contains conflict resolution settings.

Appears in:

FieldDescriptionDefaultValidation
prefixFormat stringPrefixFormat is the prefix format (for prefix strategy).
Options: "{workload}", "{workload}_", "{workload}.", custom string
priorityOrder string arrayPriorityOrder is the explicit priority ordering (for priority strategy).

vmcp.config.ElicitationResponseConfig

ElicitationResponseConfig defines how to handle elicitation responses.

Appears in:

FieldDescriptionDefaultValidation
action stringAction: "skip_remaining", "abort", "continue"

vmcp.config.FailureHandlingConfig

FailureHandlingConfig configures failure handling.

Appears in:

FieldDescriptionDefaultValidation
healthCheckInterval vmcp.config.DurationHealthCheckInterval is how often to check backend health.
unhealthyThreshold integerUnhealthyThreshold is how many failures before marking unhealthy.
partialFailureMode stringPartialFailureMode defines behavior when some backends fail.
Options: "fail" (fail entire request), "best_effort" (return partial results)
circuitBreaker vmcp.config.CircuitBreakerConfigCircuitBreaker configures circuit breaker settings.

vmcp.config.IncomingAuthConfig

IncomingAuthConfig configures client authentication to the virtual MCP server.

Appears in:

FieldDescriptionDefaultValidation
type stringType is the auth type: "oidc", "local", "anonymous"
oidc vmcp.config.OIDCConfigOIDC contains OIDC configuration (when Type = "oidc").
authz vmcp.config.AuthzConfigAuthz contains authorization configuration (optional).

vmcp.config.OIDCConfig

OIDCConfig configures OpenID Connect authentication.

Appears in:

FieldDescriptionDefaultValidation
issuer stringIssuer is the OIDC issuer URL.
clientId stringClientID is the OAuth client ID.
clientSecretEnv stringClientSecretEnv is the name of the environment variable containing the client secret.
This is the secure way to reference secrets - the actual secret value is never stored
in configuration files, only the environment variable name.
The secret value will be resolved from this environment variable at runtime.
audience stringAudience is the required token audience.
resource stringResource is the OAuth 2.0 resource indicator (RFC 8707).
Used in WWW-Authenticate header and OAuth discovery metadata (RFC 9728).
If not specified, defaults to Audience.
scopes string arrayScopes are the required OAuth scopes.
protectedResourceAllowPrivateIp booleanProtectedResourceAllowPrivateIP allows protected resource endpoint on private IP addresses
Use with caution - only enable for trusted internal IDPs or testing
insecureAllowHttp booleanInsecureAllowHTTP allows HTTP (non-HTTPS) OIDC issuers for development/testing
WARNING: This is insecure and should NEVER be used in production

vmcp.config.OperationalConfig

OperationalConfig contains operational settings.

Appears in:

FieldDescriptionDefaultValidation
timeouts vmcp.config.TimeoutConfigTimeouts configures request timeouts.
failureHandling vmcp.config.FailureHandlingConfigFailureHandling configures failure handling.

vmcp.config.OutgoingAuthConfig

OutgoingAuthConfig configures backend authentication.

Appears in:

FieldDescriptionDefaultValidation
source stringSource defines how to discover backend auth: "inline", "discovered"
- inline: Explicit configuration in OutgoingAuth
- discovered: Auto-discover from backend MCPServer.externalAuthConfigRef (Kubernetes only)
default auth.types.BackendAuthStrategyDefault is the default auth strategy for backends without explicit config.
backends object (keys:string, values:auth.types.BackendAuthStrategy)Backends contains per-backend auth configuration.

vmcp.config.OutputConfig

OutputConfig defines the structured output schema for a composite tool workflow. This follows the same pattern as the Parameters field, defining both the MCP output schema (type, description) and runtime value construction (value, default).

Appears in:

FieldDescriptionDefaultValidation
properties object (keys:string, values:vmcp.config.OutputProperty)Properties defines the output properties.
Map key is the property name, value is the property definition.
required string arrayRequired lists property names that must be present in the output.

vmcp.config.OutputProperty

OutputProperty defines a single output property. For non-object types, Value is required. For object types, either Value or Properties must be specified (but not both).

Appears in:

FieldDescriptionDefaultValidation
type stringType is the JSON Schema type: "string", "integer", "number", "boolean", "object", "array".
description stringDescription is a human-readable description exposed to clients and models.
value stringValue is a template string for constructing the runtime value.
For object types, this can be a JSON string that will be deserialized.
Supports template syntax: {{.steps.step_id.output.field}}, {{.params.param_name}}
properties object (keys:string, values:vmcp.config.OutputProperty)Properties defines nested properties for object types.
Each nested property has full metadata (type, description, value/properties).
Schemaless: {}
Type: object
default pkg.json.AnyDefault is the fallback value if template expansion fails.
Type coercion is applied to match the declared Type.

vmcp.config.StepErrorHandling

StepErrorHandling defines error handling for a workflow step.

Appears in:

FieldDescriptionDefaultValidation
action stringAction: "abort", "continue", "retry"
retryCount integerRetryCount is the number of retry attempts (for retry action).
retryDelay vmcp.config.DurationRetryDelay is the initial delay between retries.

vmcp.config.TimeoutConfig

TimeoutConfig configures timeouts.

Appears in:

FieldDescriptionDefaultValidation
default vmcp.config.DurationDefault is the default timeout for backend requests.
perWorkload object (keys:string, values:vmcp.config.Duration)PerWorkload contains per-workload timeout overrides.

vmcp.config.ToolOverride

ToolOverride defines tool name/description overrides.

Appears in:

FieldDescriptionDefaultValidation
name stringName is the new tool name (for renaming).
description stringDescription is the new tool description (for updating).

vmcp.config.WorkflowStepConfig

WorkflowStepConfig defines a single workflow step. This matches the proposal's step configuration (lines 180-255).

Appears in:

FieldDescriptionDefaultValidation
id stringID uniquely identifies this step.
type stringType is the step type: "tool", "elicitation"
tool stringTool is the tool name to call (for tool steps).
arguments pkg.json.MapArguments are the tool arguments (supports template expansion).
condition stringCondition is an optional execution condition (template syntax).
dependsOn string arrayDependsOn lists step IDs that must complete first (for DAG execution).
onError vmcp.config.StepErrorHandlingOnError defines error handling for this step.
message stringElicitation config (for elicitation steps).
schema pkg.json.Map
timeout vmcp.config.Duration
onDecline vmcp.config.ElicitationResponseConfigElicitation response handlers.
onCancel vmcp.config.ElicitationResponseConfig
defaultResults pkg.json.MapDefaultResults provides fallback output values when this step is skipped
(due to condition evaluating to false) or fails (when onError.action is "continue").
Each key corresponds to an output field name referenced by downstream steps.

vmcp.config.WorkloadToolConfig

WorkloadToolConfig configures tool filtering/overrides for a workload.

Appears in:

FieldDescriptionDefaultValidation
workload stringWorkload is the workload name/ID.
filter string arrayFilter is the list of tools to include (nil = include all).
overrides object (keys:string, values:vmcp.config.ToolOverride)Overrides maps tool names to override configurations.
excludeAll boolean

toolhive.stacklok.dev/telemetry

pkg.telemetry.Config

Config holds the configuration for OpenTelemetry instrumentation.

Appears in:

FieldDescriptionDefaultValidation
endpoint stringEndpoint is the OTLP endpoint URL
serviceName stringServiceName is the service name for telemetry
serviceVersion stringServiceVersion is the service version for telemetry
tracingEnabled booleanTracingEnabled controls whether distributed tracing is enabled
When false, no tracer provider is created even if an endpoint is configured
metricsEnabled booleanMetricsEnabled controls whether OTLP metrics are enabled
When false, OTLP metrics are not sent even if an endpoint is configured
This is independent of EnablePrometheusMetricsPath
samplingRate stringSamplingRate is the trace sampling rate (0.0-1.0) as a string.
Only used when TracingEnabled is true.
Example: "0.05" for 5% sampling.
headers object (keys:string, values:string)Headers contains authentication headers for the OTLP endpoint
insecure booleanInsecure indicates whether to use HTTP instead of HTTPS for the OTLP endpoint
enablePrometheusMetricsPath booleanEnablePrometheusMetricsPath controls whether to expose Prometheus-style /metrics endpoint
The metrics are served on the main transport port at /metrics
This is separate from OTLP metrics which are sent to the Endpoint
environmentVariables string arrayEnvironmentVariables is a list of environment variable names that should be
included in telemetry spans as attributes. Only variables in this list will
be read from the host machine and included in spans for observability.
Example: []string{"NODE_ENV", "DEPLOYMENT_ENV", "SERVICE_VERSION"}
customAttributes object (keys:string, values:string)CustomAttributes contains custom resource attributes to be added to all telemetry signals.
These are parsed from CLI flags (--otel-custom-attributes) or environment variables
(OTEL_RESOURCE_ATTRIBUTES) as key=value pairs.
We use map[string]string for proper JSON serialization instead of []attribute.KeyValue
which doesn't marshal/unmarshal correctly.

toolhive.stacklok.dev/v1alpha1

Resource Types

api.v1alpha1.APIPhase

Underlying type: string

APIPhase represents the API service state

Validation:

  • Enum: [NotStarted Deploying Ready Unhealthy Error]

Appears in:

FieldDescription
NotStartedAPIPhaseNotStarted means API deployment has not been created
DeployingAPIPhaseDeploying means API is being deployed
ReadyAPIPhaseReady means API is ready to serve requests
UnhealthyAPIPhaseUnhealthy means API is deployed but not healthy
ErrorAPIPhaseError means API deployment failed

api.v1alpha1.APISource

APISource defines API source configuration for ToolHive Registry APIs Phase 1: Supports ToolHive API endpoints (no pagination) Phase 2: Will add support for upstream MCP Registry API with pagination

Appears in:

FieldDescriptionDefaultValidation
endpoint stringEndpoint is the base API URL (without path)
The controller will append the appropriate paths:
Phase 1 (ToolHive API):
- /v0/servers - List all servers (single response, no pagination)
- /v0/servers/{name} - Get specific server (future)
- /v0/info - Get registry metadata (future)
Example: "http://my-registry-api.default.svc.cluster.local/api"
MinLength: 1
Pattern: ^https?://.*
Required: {}

api.v1alpha1.APIStatus

APIStatus provides detailed information about the API service

Appears in:

FieldDescriptionDefaultValidation
phase api.v1alpha1.APIPhasePhase represents the current API service phaseEnum: [NotStarted Deploying Ready Unhealthy Error]
message stringMessage provides additional information about the API status
endpoint stringEndpoint is the URL where the API is accessible
readySince TimeReadySince is the timestamp when the API became ready

api.v1alpha1.AggregationConfig

AggregationConfig defines tool aggregation and conflict resolution strategies

Appears in:

FieldDescriptionDefaultValidation
conflictResolution stringConflictResolution defines the strategy for resolving tool name conflicts
- prefix: Automatically prefix tool names with workload identifier
- priority: First workload in priority order wins
- manual: Explicitly define overrides for all conflicts
prefixEnum: [prefix priority manual]
conflictResolutionConfig api.v1alpha1.ConflictResolutionConfigConflictResolutionConfig provides configuration for the chosen strategy
tools api.v1alpha1.WorkloadToolConfig arrayTools defines per-workload tool filtering and overrides
References existing MCPToolConfig resources

api.v1alpha1.AuditConfig

AuditConfig defines audit logging configuration for the MCP server

Appears in:

FieldDescriptionDefaultValidation
enabled booleanEnabled controls whether audit logging is enabled
When true, enables audit logging with default configuration
false

api.v1alpha1.AuthzConfigRef

AuthzConfigRef defines a reference to authorization configuration

Appears in:

FieldDescriptionDefaultValidation
type stringType is the type of authorization configurationconfigMapEnum: [configMap inline]
configMap api.v1alpha1.ConfigMapAuthzRefConfigMap references a ConfigMap containing authorization configuration
Only used when Type is "configMap"
inline api.v1alpha1.InlineAuthzConfigInline contains direct authorization configuration
Only used when Type is "inline"

api.v1alpha1.BackendAuthConfig

BackendAuthConfig defines authentication configuration for a backend MCPServer

Appears in:

FieldDescriptionDefaultValidation
type stringType defines the authentication typeEnum: [discovered external_auth_config_ref]
Required: {}
externalAuthConfigRef api.v1alpha1.ExternalAuthConfigRefExternalAuthConfigRef references an MCPExternalAuthConfig resource
Only used when Type is "external_auth_config_ref"

api.v1alpha1.CircuitBreakerConfig

CircuitBreakerConfig configures circuit breaker behavior

Appears in:

FieldDescriptionDefaultValidation
enabled booleanEnabled controls whether circuit breaker is enabledfalse
failureThreshold integerFailureThreshold is the number of failures before opening the circuit5
timeout stringTimeout is the duration to wait before attempting to close the circuit60s

api.v1alpha1.CompositeToolDefinitionRef

CompositeToolDefinitionRef references a VirtualMCPCompositeToolDefinition resource

Appears in:

FieldDescriptionDefaultValidation
name stringName is the name of the VirtualMCPCompositeToolDefinition resource in the same namespaceRequired: {}

api.v1alpha1.CompositeToolSpec

CompositeToolSpec defines an inline composite tool For complex workflows, reference VirtualMCPCompositeToolDefinition resources instead

Appears in:

FieldDescriptionDefaultValidation
name stringName is the name of the composite toolRequired: {}
description stringDescription describes the composite toolRequired: {}
parameters RawExtensionParameters defines the input parameter schema in JSON Schema format.
Should be a JSON Schema object with "type": "object" and "properties".
Per MCP specification, this should follow standard JSON Schema for tool inputSchema.
Example:
{
"type": "object",
"properties": {
"param1": {"type": "string", "default": "value"},
"param2": {"type": "integer"}
},
"required": ["param2"]
}
Type: object
steps api.v1alpha1.WorkflowStep arraySteps defines the workflow stepsMinItems: 1
Required: {}
timeout stringTimeout is the maximum execution time for the composite tool30m
output api.v1alpha1.OutputSpecOutput defines the structured output schema for the composite tool.
Specifies how to construct the final output from workflow step results.
If not specified, the workflow returns the last step's output (backward compatible).

api.v1alpha1.ConfigMapAuthzRef

ConfigMapAuthzRef references a ConfigMap containing authorization configuration

Appears in:

FieldDescriptionDefaultValidation
name stringName is the name of the ConfigMapRequired: {}
key stringKey is the key in the ConfigMap that contains the authorization configurationauthz.json

api.v1alpha1.ConfigMapOIDCRef

ConfigMapOIDCRef references a ConfigMap containing OIDC configuration

Appears in:

FieldDescriptionDefaultValidation
name stringName is the name of the ConfigMapRequired: {}
key stringKey is the key in the ConfigMap that contains the OIDC configurationoidc.json

api.v1alpha1.ConflictResolutionConfig

ConflictResolutionConfig provides configuration for conflict resolution strategies

Appears in:

FieldDescriptionDefaultValidation
prefixFormat stringPrefixFormat defines the prefix format for the "prefix" strategy
Supports placeholders: {workload}, {workload}_, {workload}.
{workload}_
priorityOrder string arrayPriorityOrder defines the workload priority order for the "priority" strategy

api.v1alpha1.DiscoveredBackend

DiscoveredBackend represents a discovered backend MCPServer in the MCPGroup

Appears in:

FieldDescriptionDefaultValidation
name stringName is the name of the backend MCPServer
authConfigRef stringAuthConfigRef is the name of the discovered MCPExternalAuthConfig (if any)
authType stringAuthType is the type of authentication configured
status stringStatus is the current status of the backend (ready, degraded, unavailable)
lastHealthCheck TimeLastHealthCheck is the timestamp of the last health check
url stringURL is the URL of the backend MCPServer

api.v1alpha1.ElicitationResponseHandler

ElicitationResponseHandler defines how to handle user responses to elicitation requests

Appears in:

FieldDescriptionDefaultValidation
action stringAction defines the action to take when the user declines or cancels
- skip_remaining: Skip remaining steps in the workflow
- abort: Abort the entire workflow execution
- continue: Continue to the next step
abortEnum: [skip_remaining abort continue]

api.v1alpha1.EnvVar

EnvVar represents an environment variable in a container

Appears in:

FieldDescriptionDefaultValidation
name stringName of the environment variableRequired: {}
value stringValue of the environment variableRequired: {}

api.v1alpha1.ErrorHandling

ErrorHandling defines error handling behavior for workflow steps

Appears in:

FieldDescriptionDefaultValidation
action stringAction defines the action to take on errorabortEnum: [abort continue retry]
maxRetries integerMaxRetries is the maximum number of retries
Only used when Action is "retry"
retryDelay stringRetryDelay is the delay between retry attempts
Only used when Action is "retry"
Pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m))+$

api.v1alpha1.ExternalAuthConfigRef

ExternalAuthConfigRef defines a reference to a MCPExternalAuthConfig resource. The referenced MCPExternalAuthConfig must be in the same namespace as the MCPServer.

Appears in:

FieldDescriptionDefaultValidation
name stringName is the name of the MCPExternalAuthConfig resourceRequired: {}

api.v1alpha1.ExternalAuthType

Underlying type: string

ExternalAuthType represents the type of external authentication

Appears in:

FieldDescription
tokenExchangeExternalAuthTypeTokenExchange is the type for RFC-8693 token exchange
headerInjectionExternalAuthTypeHeaderInjection is the type for custom header injection
unauthenticatedExternalAuthTypeUnauthenticated is the type for no authentication
This should only be used for backends on trusted networks (e.g., localhost, VPC)
or when authentication is handled by network-level security

api.v1alpha1.FailureHandlingConfig

FailureHandlingConfig configures failure handling behavior

Appears in:

FieldDescriptionDefaultValidation
healthCheckInterval stringHealthCheckInterval is the interval between health checks30s
unhealthyThreshold integerUnhealthyThreshold is the number of consecutive failures before marking unhealthy3
partialFailureMode stringPartialFailureMode defines behavior when some backends are unavailable
- fail: Fail entire request if any backend is unavailable
- best_effort: Continue with available backends
failEnum: [fail best_effort]
circuitBreaker api.v1alpha1.CircuitBreakerConfigCircuitBreaker configures circuit breaker behavior

api.v1alpha1.GitSource

GitSource defines Git repository source configuration

Appears in:

FieldDescriptionDefaultValidation
repository stringRepository is the Git repository URL (HTTP/HTTPS/SSH)MinLength: 1
Pattern: ^(file:///|https?://|git@|ssh://|git://).*
Required: {}
branch stringBranch is the Git branch to use (mutually exclusive with Tag and Commit)MinLength: 1
tag stringTag is the Git tag to use (mutually exclusive with Branch and Commit)MinLength: 1
commit stringCommit is the Git commit SHA to use (mutually exclusive with Branch and Tag)MinLength: 1
path stringPath is the path to the registry file within the repositoryregistry.jsonPattern: ^.*\.json$

api.v1alpha1.HeaderInjectionConfig

HeaderInjectionConfig holds configuration for custom HTTP header injection authentication. This allows injecting a secret-based header value into requests to backend MCP servers. For security reasons, only secret references are supported (no plaintext values).

Appears in:

FieldDescriptionDefaultValidation
headerName stringHeaderName is the name of the HTTP header to injectMinLength: 1
Required: {}
valueSecretRef api.v1alpha1.SecretKeyRefValueSecretRef references a Kubernetes Secret containing the header valueRequired: {}

api.v1alpha1.IncomingAuthConfig

IncomingAuthConfig configures authentication for clients connecting to the Virtual MCP server

Appears in:

FieldDescriptionDefaultValidation
type stringType defines the authentication type: anonymous or oidc
When no authentication is required, explicitly set this to "anonymous"
Enum: [anonymous oidc]
Required: {}
oidcConfig api.v1alpha1.OIDCConfigRefOIDCConfig defines OIDC authentication configuration
Reuses MCPServer OIDC patterns
authzConfig api.v1alpha1.AuthzConfigRefAuthzConfig defines authorization policy configuration
Reuses MCPServer authz patterns

api.v1alpha1.InlineAuthzConfig

InlineAuthzConfig contains direct authorization configuration

Appears in:

FieldDescriptionDefaultValidation
policies string arrayPolicies is a list of Cedar policy stringsMinItems: 1
Required: {}
entitiesJson stringEntitiesJSON is a JSON string representing Cedar entities[]

api.v1alpha1.InlineOIDCConfig

InlineOIDCConfig contains direct OIDC configuration

Appears in:

FieldDescriptionDefaultValidation
issuer stringIssuer is the OIDC issuer URLRequired: {}
audience stringAudience is the expected audience for the token
jwksUrl stringJWKSURL is the URL to fetch the JWKS from
introspectionUrl stringIntrospectionURL is the URL for token introspection endpoint
clientId stringClientID is the OIDC client ID
clientSecret stringClientSecret is the client secret for introspection (optional)
Deprecated: Use ClientSecretRef instead for better security
clientSecretRef api.v1alpha1.SecretKeyRefClientSecretRef is a reference to a Kubernetes Secret containing the client secret
If both ClientSecret and ClientSecretRef are provided, ClientSecretRef takes precedence
thvCABundlePath stringThvCABundlePath is the path to CA certificate bundle file for HTTPS requests
The file must be mounted into the pod (e.g., via ConfigMap or Secret volume)
jwksAuthTokenPath stringJWKSAuthTokenPath is the path to file containing bearer token for JWKS/OIDC requests
The file must be mounted into the pod (e.g., via Secret volume)
jwksAllowPrivateIP booleanJWKSAllowPrivateIP allows JWKS/OIDC endpoints on private IP addresses
Use with caution - only enable for trusted internal IDPs
false
protectedResourceAllowPrivateIP booleanProtectedResourceAllowPrivateIP allows protected resource endpoint on private IP addresses
Use with caution - only enable for trusted internal IDPs or testing
false
insecureAllowHTTP booleanInsecureAllowHTTP allows HTTP (non-HTTPS) OIDC issuers for development/testing
WARNING: This is insecure and should NEVER be used in production
Only enable for local development, testing, or trusted internal networks
false
scopes string arrayScopes is the list of OAuth scopes to advertise in the well-known endpoint (RFC 9728)
If empty, defaults to ["openid"]

api.v1alpha1.KubernetesOIDCConfig

KubernetesOIDCConfig configures OIDC for Kubernetes service account token validation

Appears in:

FieldDescriptionDefaultValidation
serviceAccount stringServiceAccount is the name of the service account to validate tokens for
If empty, uses the pod's service account
namespace stringNamespace is the namespace of the service account
If empty, uses the MCPServer's namespace
audience stringAudience is the expected audience for the tokentoolhive
issuer stringIssuer is the OIDC issuer URLhttps://kubernetes.default.svc
jwksUrl stringJWKSURL is the URL to fetch the JWKS from
If empty, OIDC discovery will be used to automatically determine the JWKS URL
introspectionUrl stringIntrospectionURL is the URL for token introspection endpoint
If empty, OIDC discovery will be used to automatically determine the introspection URL
useClusterAuth booleanUseClusterAuth enables using the Kubernetes cluster's CA bundle and service account token
When true, uses /var/run/secrets/kubernetes.io/serviceaccount/ca.crt for TLS verification
and /var/run/secrets/kubernetes.io/serviceaccount/token for bearer token authentication
Defaults to true if not specified

api.v1alpha1.MCPExternalAuthConfig

MCPExternalAuthConfig is the Schema for the mcpexternalauthconfigs API. MCPExternalAuthConfig resources are namespace-scoped and can only be referenced by MCPServer resources within the same namespace. Cross-namespace references are not supported for security and isolation reasons.

Appears in:

FieldDescriptionDefaultValidation
apiVersion stringtoolhive.stacklok.dev/v1alpha1
kind stringMCPExternalAuthConfig
kind stringKind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
apiVersion stringAPIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
metadata ObjectMetaRefer to Kubernetes API documentation for fields of metadata.
spec api.v1alpha1.MCPExternalAuthConfigSpec
status api.v1alpha1.MCPExternalAuthConfigStatus

api.v1alpha1.MCPExternalAuthConfigList

MCPExternalAuthConfigList contains a list of MCPExternalAuthConfig

FieldDescriptionDefaultValidation
apiVersion stringtoolhive.stacklok.dev/v1alpha1
kind stringMCPExternalAuthConfigList
kind stringKind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
apiVersion stringAPIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
metadata ListMetaRefer to Kubernetes API documentation for fields of metadata.
items api.v1alpha1.MCPExternalAuthConfig array

api.v1alpha1.MCPExternalAuthConfigSpec

MCPExternalAuthConfigSpec defines the desired state of MCPExternalAuthConfig. MCPExternalAuthConfig resources are namespace-scoped and can only be referenced by MCPServer resources in the same namespace.

Appears in:

FieldDescriptionDefaultValidation
type api.v1alpha1.ExternalAuthTypeType is the type of external authentication to configureEnum: [tokenExchange headerInjection unauthenticated]
Required: {}
tokenExchange api.v1alpha1.TokenExchangeConfigTokenExchange configures RFC-8693 OAuth 2.0 Token Exchange
Only used when Type is "tokenExchange"
headerInjection api.v1alpha1.HeaderInjectionConfigHeaderInjection configures custom HTTP header injection
Only used when Type is "headerInjection"

api.v1alpha1.MCPExternalAuthConfigStatus

MCPExternalAuthConfigStatus defines the observed state of MCPExternalAuthConfig

Appears in:

FieldDescriptionDefaultValidation
observedGeneration integerObservedGeneration is the most recent generation observed for this MCPExternalAuthConfig.
It corresponds to the MCPExternalAuthConfig's generation, which is updated on mutation by the API Server.
configHash stringConfigHash is a hash of the current configuration for change detection
referencingServers string arrayReferencingServers is a list of MCPServer resources that reference this MCPExternalAuthConfig
This helps track which servers need to be reconciled when this config changes

api.v1alpha1.MCPGroup

MCPGroup is the Schema for the mcpgroups API

Appears in:

FieldDescriptionDefaultValidation
apiVersion stringtoolhive.stacklok.dev/v1alpha1
kind stringMCPGroup
kind stringKind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
apiVersion stringAPIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
metadata ObjectMetaRefer to Kubernetes API documentation for fields of metadata.
spec api.v1alpha1.MCPGroupSpec
status api.v1alpha1.MCPGroupStatus

api.v1alpha1.MCPGroupList

MCPGroupList contains a list of MCPGroup

FieldDescriptionDefaultValidation
apiVersion stringtoolhive.stacklok.dev/v1alpha1
kind stringMCPGroupList
kind stringKind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
apiVersion stringAPIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
metadata ListMetaRefer to Kubernetes API documentation for fields of metadata.
items api.v1alpha1.MCPGroup array

api.v1alpha1.MCPGroupPhase

Underlying type: string

MCPGroupPhase represents the lifecycle phase of an MCPGroup

Validation:

  • Enum: [Ready Pending Failed]

Appears in:

FieldDescription
ReadyMCPGroupPhaseReady indicates the MCPGroup is ready
PendingMCPGroupPhasePending indicates the MCPGroup is pending
FailedMCPGroupPhaseFailed indicates the MCPGroup has failed

api.v1alpha1.MCPGroupSpec

MCPGroupSpec defines the desired state of MCPGroup

Appears in:

FieldDescriptionDefaultValidation
description stringDescription provides human-readable context

api.v1alpha1.MCPGroupStatus

MCPGroupStatus defines observed state

Appears in:

FieldDescriptionDefaultValidation
phase api.v1alpha1.MCPGroupPhasePhase indicates current statePendingEnum: [Ready Pending Failed]
servers string arrayServers lists MCPServer names in this group
serverCount integerServerCount is the number of MCPServers
remoteProxies string arrayRemoteProxies lists MCPRemoteProxy names in this group
remoteProxyCount integerRemoteProxyCount is the number of MCPRemoteProxies
conditions Condition arrayConditions represent observations

api.v1alpha1.MCPRegistry

MCPRegistry is the Schema for the mcpregistries API

Appears in:

FieldDescriptionDefaultValidation
apiVersion stringtoolhive.stacklok.dev/v1alpha1
kind stringMCPRegistry
kind stringKind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
apiVersion stringAPIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
metadata ObjectMetaRefer to Kubernetes API documentation for fields of metadata.
spec api.v1alpha1.MCPRegistrySpec
status api.v1alpha1.MCPRegistryStatus

api.v1alpha1.MCPRegistryAuthConfig

MCPRegistryAuthConfig defines authentication configuration for the registry API server.

Appears in:

FieldDescriptionDefaultValidation
mode api.v1alpha1.MCPRegistryAuthModeMode specifies the authentication mode (anonymous or oauth)
Defaults to "anonymous" if not specified.
Use "oauth" to enable OAuth/OIDC authentication.
anonymousEnum: [anonymous oauth]
oauth api.v1alpha1.MCPRegistryOAuthConfigOAuth defines OAuth/OIDC specific authentication settings
Only used when Mode is "oauth"

api.v1alpha1.MCPRegistryAuthMode

Underlying type: string

MCPRegistryAuthMode represents the authentication mode for the registry API server

Appears in:

FieldDescription
anonymousMCPRegistryAuthModeAnonymous allows unauthenticated access
oauthMCPRegistryAuthModeOAuth enables OAuth/OIDC authentication

api.v1alpha1.MCPRegistryConfig

MCPRegistryConfig defines the configuration for a registry data source

Appears in:

FieldDescriptionDefaultValidation
name stringName is a unique identifier for this registry configuration within the MCPRegistryMinLength: 1
Required: {}
format stringFormat is the data format (toolhive, upstream)toolhiveEnum: [toolhive upstream]
configMapRef ConfigMapKeySelectorConfigMapRef defines the ConfigMap source configuration
Mutually exclusive with Git, API, and PVCRef
git api.v1alpha1.GitSourceGit defines the Git repository source configuration
Mutually exclusive with ConfigMapRef, API, and PVCRef
api api.v1alpha1.APISourceAPI defines the API source configuration
Mutually exclusive with ConfigMapRef, Git, and PVCRef
pvcRef api.v1alpha1.PVCSourcePVCRef defines the PersistentVolumeClaim source configuration
Mutually exclusive with ConfigMapRef, Git, and API
syncPolicy api.v1alpha1.SyncPolicySyncPolicy defines the automatic synchronization behavior for this registry.
If specified, enables automatic synchronization at the given interval.
Manual synchronization is always supported via annotation-based triggers
regardless of this setting.
filter api.v1alpha1.RegistryFilterFilter defines include/exclude patterns for registry content

api.v1alpha1.MCPRegistryDatabaseConfig

MCPRegistryDatabaseConfig defines PostgreSQL database configuration for the registry API server. Uses a two-user security model: separate users for operations and migrations.

Appears in:

FieldDescriptionDefaultValidation
host stringHost is the database server hostnamepostgres
port integerPort is the database server port5432Maximum: 65535
Minimum: 1
user stringUser is the application user (limited privileges: SELECT, INSERT, UPDATE, DELETE)
Credentials should be provided via pgpass file or environment variables
db_app
migrationUser stringMigrationUser is the migration user (elevated privileges: CREATE, ALTER, DROP)
Used for running database schema migrations
Credentials should be provided via pgpass file or environment variables
db_migrator
database stringDatabase is the database nameregistry
sslMode stringSSLMode is the SSL mode for the connection
Valid values: disable, allow, prefer, require, verify-ca, verify-full
preferEnum: [disable allow prefer require verify-ca verify-full]
maxOpenConns integerMaxOpenConns is the maximum number of open connections to the database10Minimum: 1
maxIdleConns integerMaxIdleConns is the maximum number of idle connections in the pool2Minimum: 0
connMaxLifetime stringConnMaxLifetime is the maximum amount of time a connection may be reused (Go duration format)
Examples: "30m", "1h", "24h"
30mPattern: ^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$
dbAppUserPasswordSecretRef SecretKeySelectorDBAppUserPasswordSecretRef references a Kubernetes Secret containing the password for the application database user.
The operator will use this password along with DBMigrationUserPasswordSecretRef to generate a pgpass file
that is mounted to the registry API container.
Required: {}
dbMigrationUserPasswordSecretRef SecretKeySelectorDBMigrationUserPasswordSecretRef references a Kubernetes Secret containing the password for the migration database user.
The operator will use this password along with DBAppUserPasswordSecretRef to generate a pgpass file
that is mounted to the registry API container.
Required: {}

api.v1alpha1.MCPRegistryList

MCPRegistryList contains a list of MCPRegistry

FieldDescriptionDefaultValidation
apiVersion stringtoolhive.stacklok.dev/v1alpha1
kind stringMCPRegistryList
kind stringKind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
apiVersion stringAPIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
metadata ListMetaRefer to Kubernetes API documentation for fields of metadata.
items api.v1alpha1.MCPRegistry array

api.v1alpha1.MCPRegistryOAuthConfig

MCPRegistryOAuthConfig defines OAuth/OIDC specific authentication settings

Appears in:

FieldDescriptionDefaultValidation
resourceUrl stringResourceURL is the URL identifying this protected resource (RFC 9728)
Used in the /.well-known/oauth-protected-resource endpoint
providers api.v1alpha1.MCPRegistryOAuthProviderConfig arrayProviders defines the OAuth/OIDC providers for authentication
Multiple providers can be configured (e.g., Kubernetes + external IDP)
MinItems: 1
scopesSupported string arrayScopesSupported defines the OAuth scopes supported by this resource (RFC 9728)
Defaults to ["mcp-registry:read", "mcp-registry:write"] if not specified
realm stringRealm is the protection space identifier for WWW-Authenticate header (RFC 7235)
Defaults to "mcp-registry" if not specified

api.v1alpha1.MCPRegistryOAuthProviderConfig

MCPRegistryOAuthProviderConfig defines configuration for an OAuth/OIDC provider

Appears in:

FieldDescriptionDefaultValidation
name stringName is a unique identifier for this provider (e.g., "kubernetes", "keycloak")MinLength: 1
Required: {}
issuerUrl stringIssuerURL is the OIDC issuer URL (e.g., https://accounts.google.com)
The JWKS URL will be discovered automatically from .well-known/openid-configuration
unless JwksUrl is explicitly specified
MinLength: 1
Pattern: ^https?://.*
Required: {}
jwksUrl stringJwksUrl is the URL to fetch the JSON Web Key Set (JWKS) from
If specified, OIDC discovery is skipped and this URL is used directly
Example: https://kubernetes.default.svc/openid/v1/jwks
Pattern: ^https?://.*
audience stringAudience is the expected audience claim in the token (REQUIRED)
Per RFC 6749 Section 4.1.3, tokens must be validated against expected audience
For Kubernetes, this is typically the API server URL
MinLength: 1
Required: {}
clientId stringClientID is the OAuth client ID for token introspection (optional)
clientSecretRef SecretKeySelectorClientSecretRef is a reference to a Secret containing the client secret
The secret should have a key "clientSecret" containing the secret value
caCertRef ConfigMapKeySelectorCACertRef is a reference to a ConfigMap containing the CA certificate bundle
for verifying the provider's TLS certificate.
Required for Kubernetes in-cluster authentication or self-signed certificates
caCertPath stringCaCertPath is the path to the CA certificate bundle for verifying the provider's TLS certificate.
Required for Kubernetes in-cluster authentication or self-signed certificates
authTokenRef SecretKeySelectorAuthTokenRef is a reference to a Secret containing a bearer token for authenticating
to OIDC/JWKS endpoints. Useful when the OIDC discovery or JWKS endpoint requires authentication.
Example: ServiceAccount token for Kubernetes API server
authTokenFile stringAuthTokenFile is the path to a file containing a bearer token for authenticating to OIDC/JWKS endpoints.
Useful when the OIDC discovery or JWKS endpoint requires authentication.
Example: /var/run/secrets/kubernetes.io/serviceaccount/token
introspectionUrl stringIntrospectionURL is the OAuth 2.0 Token Introspection endpoint (RFC 7662)
Used for validating opaque (non-JWT) tokens
If not specified, only JWT tokens can be validated via JWKS
Pattern: ^https?://.*
allowPrivateIP booleanAllowPrivateIP allows JWKS/OIDC endpoints on private IP addresses
Required when the OAuth provider (e.g., Kubernetes API server) is running on a private network
Example: Set to true when using https://kubernetes.default.svc as the issuer URL
false

api.v1alpha1.MCPRegistryPhase

Underlying type: string

MCPRegistryPhase represents the phase of the MCPRegistry

Validation:

  • Enum: [Pending Ready Failed Syncing Terminating]

Appears in:

FieldDescription
PendingMCPRegistryPhasePending means the MCPRegistry is being initialized
ReadyMCPRegistryPhaseReady means the MCPRegistry is ready and operational
FailedMCPRegistryPhaseFailed means the MCPRegistry has failed
SyncingMCPRegistryPhaseSyncing means the MCPRegistry is currently syncing data
TerminatingMCPRegistryPhaseTerminating means the MCPRegistry is being deleted

api.v1alpha1.MCPRegistrySpec

MCPRegistrySpec defines the desired state of MCPRegistry

Appears in:

FieldDescriptionDefaultValidation
displayName stringDisplayName is a human-readable name for the registry
registries api.v1alpha1.MCPRegistryConfig arrayRegistries defines the configuration for the registry data sourcesMinItems: 1
Required: {}
enforceServers booleanEnforceServers indicates whether MCPServers in this namespace must have their images
present in at least one registry in the namespace. When any registry in the namespace
has this field set to true, enforcement is enabled for the entire namespace.
MCPServers with images not found in any registry will be rejected.
When false (default), MCPServers can be deployed regardless of registry presence.
false
podTemplateSpec RawExtensionPodTemplateSpec defines the pod template to use for the registry API server
This allows for customizing the pod configuration beyond what is provided by the other fields.
Note that to modify the specific container the registry API server runs in, you must specify
the registry-api container name in the PodTemplateSpec.
This field accepts a PodTemplateSpec object as JSON/YAML.
Type: object
databaseConfig api.v1alpha1.MCPRegistryDatabaseConfigDatabaseConfig defines the PostgreSQL database configuration for the registry API server.
If not specified, defaults will be used:
- Host: "postgres"
- Port: 5432
- User: "db_app"
- MigrationUser: "db_migrator"
- Database: "registry"
- SSLMode: "prefer"
- MaxOpenConns: 10
- MaxIdleConns: 2
- ConnMaxLifetime: "30m"
authConfig api.v1alpha1.MCPRegistryAuthConfigAuthConfig defines the authentication configuration for the registry API server.
If not specified, defaults to anonymous authentication.

api.v1alpha1.MCPRegistryStatus

MCPRegistryStatus defines the observed state of MCPRegistry

Appears in:

FieldDescriptionDefaultValidation
phase api.v1alpha1.MCPRegistryPhasePhase represents the current overall phase of the MCPRegistry
Derived from sync and API status
Enum: [Pending Ready Failed Syncing Terminating]
message stringMessage provides additional information about the current phase
syncStatus api.v1alpha1.SyncStatusSyncStatus provides detailed information about data synchronization
apiStatus api.v1alpha1.APIStatusAPIStatus provides detailed information about the API service
lastAppliedFilterHash stringLastAppliedFilterHash is the hash of the last applied filter
storageRef api.v1alpha1.StorageReferenceStorageRef is a reference to the internal storage location
lastManualSyncTrigger stringLastManualSyncTrigger tracks the last processed manual sync annotation value
Used to detect new manual sync requests via toolhive.stacklok.dev/sync-trigger annotation
conditions Condition arrayConditions represent the latest available observations of the MCPRegistry's state

api.v1alpha1.MCPRemoteProxy

MCPRemoteProxy is the Schema for the mcpremoteproxies API It enables proxying remote MCP servers with authentication, authorization, audit logging, and tool filtering

Appears in:

FieldDescriptionDefaultValidation
apiVersion stringtoolhive.stacklok.dev/v1alpha1
kind stringMCPRemoteProxy
kind stringKind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
apiVersion stringAPIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
metadata ObjectMetaRefer to Kubernetes API documentation for fields of metadata.
spec api.v1alpha1.MCPRemoteProxySpec
status api.v1alpha1.MCPRemoteProxyStatus

api.v1alpha1.MCPRemoteProxyList

MCPRemoteProxyList contains a list of MCPRemoteProxy

FieldDescriptionDefaultValidation
apiVersion stringtoolhive.stacklok.dev/v1alpha1
kind stringMCPRemoteProxyList
kind stringKind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
apiVersion stringAPIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
metadata ListMetaRefer to Kubernetes API documentation for fields of metadata.
items api.v1alpha1.MCPRemoteProxy array

api.v1alpha1.MCPRemoteProxyPhase

Underlying type: string

MCPRemoteProxyPhase is a label for the condition of a MCPRemoteProxy at the current time

Validation:

  • Enum: [Pending Ready Failed Terminating]

Appears in:

FieldDescription
PendingMCPRemoteProxyPhasePending means the proxy is being created
ReadyMCPRemoteProxyPhaseReady means the proxy is ready and operational
FailedMCPRemoteProxyPhaseFailed means the proxy failed to start or encountered an error
TerminatingMCPRemoteProxyPhaseTerminating means the proxy is being deleted

api.v1alpha1.MCPRemoteProxySpec

MCPRemoteProxySpec defines the desired state of MCPRemoteProxy

Appears in:

FieldDescriptionDefaultValidation
remoteURL stringRemoteURL is the URL of the remote MCP server to proxyPattern: ^https?://
Required: {}
port integerPort is the port to expose the MCP proxy on8080Maximum: 65535
Minimum: 1
transport stringTransport is the transport method for the remote proxy (sse or streamable-http)streamable-httpEnum: [sse streamable-http]
oidcConfig api.v1alpha1.OIDCConfigRefOIDCConfig defines OIDC authentication configuration for the proxy
This validates incoming tokens from clients. Required for proxy mode.
Required: {}
externalAuthConfigRef api.v1alpha1.ExternalAuthConfigRefExternalAuthConfigRef references a MCPExternalAuthConfig resource for token exchange.
When specified, the proxy will exchange validated incoming tokens for remote service tokens.
The referenced MCPExternalAuthConfig must exist in the same namespace as this MCPRemoteProxy.
authzConfig api.v1alpha1.AuthzConfigRefAuthzConfig defines authorization policy configuration for the proxy
audit api.v1alpha1.AuditConfigAudit defines audit logging configuration for the proxy
toolConfigRef api.v1alpha1.ToolConfigRefToolConfigRef references a MCPToolConfig resource for tool filtering and renaming.
The referenced MCPToolConfig must exist in the same namespace as this MCPRemoteProxy.
Cross-namespace references are not supported for security and isolation reasons.
If specified, this allows filtering and overriding tools from the remote MCP server.
telemetry api.v1alpha1.TelemetryConfigTelemetry defines observability configuration for the proxy
resources api.v1alpha1.ResourceRequirementsResources defines the resource requirements for the proxy container
trustProxyHeaders booleanTrustProxyHeaders indicates whether to trust X-Forwarded-* headers from reverse proxies
When enabled, the proxy will use X-Forwarded-Proto, X-Forwarded-Host, X-Forwarded-Port,
and X-Forwarded-Prefix headers to construct endpoint URLs
false
endpointPrefix stringEndpointPrefix is the path prefix to prepend to SSE endpoint URLs.
This is used to handle path-based ingress routing scenarios where the ingress
strips a path prefix before forwarding to the backend.
resourceOverrides api.v1alpha1.ResourceOverridesResourceOverrides allows overriding annotations and labels for resources created by the operator
groupRef stringGroupRef is the name of the MCPGroup this proxy belongs to
Must reference an existing MCPGroup in the same namespace

api.v1alpha1.MCPRemoteProxyStatus

MCPRemoteProxyStatus defines the observed state of MCPRemoteProxy

Appears in:

FieldDescriptionDefaultValidation
phase api.v1alpha1.MCPRemoteProxyPhasePhase is the current phase of the MCPRemoteProxyEnum: [Pending Ready Failed Terminating]
url stringURL is the internal cluster URL where the proxy can be accessed
externalURL stringExternalURL is the external URL where the proxy can be accessed (if exposed externally)
observedGeneration integerObservedGeneration reflects the generation of the most recently observed MCPRemoteProxy
conditions Condition arrayConditions represent the latest available observations of the MCPRemoteProxy's state
toolConfigHash stringToolConfigHash stores the hash of the referenced ToolConfig for change detection
externalAuthConfigHash stringExternalAuthConfigHash is the hash of the referenced MCPExternalAuthConfig spec
message stringMessage provides additional information about the current phase

api.v1alpha1.MCPServer

MCPServer is the Schema for the mcpservers API

Appears in:

FieldDescriptionDefaultValidation
apiVersion stringtoolhive.stacklok.dev/v1alpha1
kind stringMCPServer
kind stringKind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
apiVersion stringAPIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
metadata ObjectMetaRefer to Kubernetes API documentation for fields of metadata.
spec api.v1alpha1.MCPServerSpec
status api.v1alpha1.MCPServerStatus

api.v1alpha1.MCPServerList

MCPServerList contains a list of MCPServer

FieldDescriptionDefaultValidation
apiVersion stringtoolhive.stacklok.dev/v1alpha1
kind stringMCPServerList
kind stringKind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
apiVersion stringAPIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
metadata ListMetaRefer to Kubernetes API documentation for fields of metadata.
items api.v1alpha1.MCPServer array

api.v1alpha1.MCPServerPhase

Underlying type: string

MCPServerPhase is the phase of the MCPServer

Validation:

  • Enum: [Pending Running Failed Terminating]

Appears in:

FieldDescription
PendingMCPServerPhasePending means the MCPServer is being created
RunningMCPServerPhaseRunning means the MCPServer is running
FailedMCPServerPhaseFailed means the MCPServer failed to start
TerminatingMCPServerPhaseTerminating means the MCPServer is being deleted

api.v1alpha1.MCPServerSpec

MCPServerSpec defines the desired state of MCPServer

Appears in:

FieldDescriptionDefaultValidation
image stringImage is the container image for the MCP serverRequired: {}
transport stringTransport is the transport method for the MCP server (stdio, streamable-http or sse)stdioEnum: [stdio streamable-http sse]
proxyMode stringProxyMode is the proxy mode for stdio transport (sse or streamable-http)
This setting is only used when Transport is "stdio"
streamable-httpEnum: [sse streamable-http]
port integerPort is the port to expose the MCP server on
Deprecated: Use ProxyPort instead
8080Maximum: 65535
Minimum: 1
targetPort integerTargetPort is the port that MCP server listens to
Deprecated: Use McpPort instead
Maximum: 65535
Minimum: 1
proxyPort integerProxyPort is the port to expose the proxy runner on8080Maximum: 65535
Minimum: 1
mcpPort integerMcpPort is the port that MCP server listens toMaximum: 65535
Minimum: 1
args string arrayArgs are additional arguments to pass to the MCP server
env api.v1alpha1.EnvVar arrayEnv are environment variables to set in the MCP server container
volumes api.v1alpha1.Volume arrayVolumes are volumes to mount in the MCP server container
resources api.v1alpha1.ResourceRequirementsResources defines the resource requirements for the MCP server container
secrets api.v1alpha1.SecretRef arraySecrets are references to secrets to mount in the MCP server container
serviceAccount stringServiceAccount is the name of an already existing service account to use by the MCP server.
If not specified, a ServiceAccount will be created automatically and used by the MCP server.
permissionProfile api.v1alpha1.PermissionProfileRefPermissionProfile defines the permission profile to use
podTemplateSpec RawExtensionPodTemplateSpec defines the pod template to use for the MCP server
This allows for customizing the pod configuration beyond what is provided by the other fields.
Note that to modify the specific container the MCP server runs in, you must specify
the mcp container name in the PodTemplateSpec.
This field accepts a PodTemplateSpec object as JSON/YAML.
Type: object
resourceOverrides api.v1alpha1.ResourceOverridesResourceOverrides allows overriding annotations and labels for resources created by the operator
oidcConfig api.v1alpha1.OIDCConfigRefOIDCConfig defines OIDC authentication configuration for the MCP server
authzConfig api.v1alpha1.AuthzConfigRefAuthzConfig defines authorization policy configuration for the MCP server
audit api.v1alpha1.AuditConfigAudit defines audit logging configuration for the MCP server
tools string arrayToolsFilter is the filter on tools applied to the MCP server
Deprecated: Use ToolConfigRef instead
toolConfigRef api.v1alpha1.ToolConfigRefToolConfigRef references a MCPToolConfig resource for tool filtering and renaming.
The referenced MCPToolConfig must exist in the same namespace as this MCPServer.
Cross-namespace references are not supported for security and isolation reasons.
If specified, this takes precedence over the inline ToolsFilter field.
externalAuthConfigRef api.v1alpha1.ExternalAuthConfigRefExternalAuthConfigRef references a MCPExternalAuthConfig resource for external authentication.
The referenced MCPExternalAuthConfig must exist in the same namespace as this MCPServer.
telemetry api.v1alpha1.TelemetryConfigTelemetry defines observability configuration for the MCP server
trustProxyHeaders booleanTrustProxyHeaders indicates whether to trust X-Forwarded-* headers from reverse proxies
When enabled, the proxy will use X-Forwarded-Proto, X-Forwarded-Host, X-Forwarded-Port,
and X-Forwarded-Prefix headers to construct endpoint URLs
false
endpointPrefix stringEndpointPrefix is the path prefix to prepend to SSE endpoint URLs.
This is used to handle path-based ingress routing scenarios where the ingress
strips a path prefix before forwarding to the backend.
groupRef stringGroupRef is the name of the MCPGroup this server belongs to
Must reference an existing MCPGroup in the same namespace

api.v1alpha1.MCPServerStatus

MCPServerStatus defines the observed state of MCPServer

Appears in:

FieldDescriptionDefaultValidation
conditions Condition arrayConditions represent the latest available observations of the MCPServer's state
toolConfigHash stringToolConfigHash stores the hash of the referenced ToolConfig for change detection
externalAuthConfigHash stringExternalAuthConfigHash is the hash of the referenced MCPExternalAuthConfig spec
url stringURL is the URL where the MCP server can be accessed
phase api.v1alpha1.MCPServerPhasePhase is the current phase of the MCPServerEnum: [Pending Running Failed Terminating]
message stringMessage provides additional information about the current phase

api.v1alpha1.MCPToolConfig

MCPToolConfig is the Schema for the mcptoolconfigs API. MCPToolConfig resources are namespace-scoped and can only be referenced by MCPServer resources within the same namespace. Cross-namespace references are not supported for security and isolation reasons.

Appears in:

FieldDescriptionDefaultValidation
apiVersion stringtoolhive.stacklok.dev/v1alpha1
kind stringMCPToolConfig
kind stringKind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
apiVersion stringAPIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
metadata ObjectMetaRefer to Kubernetes API documentation for fields of metadata.
spec api.v1alpha1.MCPToolConfigSpec
status api.v1alpha1.MCPToolConfigStatus

api.v1alpha1.MCPToolConfigList

MCPToolConfigList contains a list of MCPToolConfig

FieldDescriptionDefaultValidation
apiVersion stringtoolhive.stacklok.dev/v1alpha1
kind stringMCPToolConfigList
kind stringKind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
apiVersion stringAPIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
metadata ListMetaRefer to Kubernetes API documentation for fields of metadata.
items api.v1alpha1.MCPToolConfig array

api.v1alpha1.MCPToolConfigSpec

MCPToolConfigSpec defines the desired state of MCPToolConfig. MCPToolConfig resources are namespace-scoped and can only be referenced by MCPServer resources in the same namespace.

Appears in:

FieldDescriptionDefaultValidation
toolsFilter string arrayToolsFilter is a list of tool names to filter (allow list).
Only tools in this list will be exposed by the MCP server.
If empty, all tools are exposed.
toolsOverride object (keys:string, values:api.v1alpha1.ToolOverride)ToolsOverride is a map from actual tool names to their overridden configuration.
This allows renaming tools and/or changing their descriptions.

api.v1alpha1.MCPToolConfigStatus

MCPToolConfigStatus defines the observed state of MCPToolConfig

Appears in:

FieldDescriptionDefaultValidation
observedGeneration integerObservedGeneration is the most recent generation observed for this MCPToolConfig.
It corresponds to the MCPToolConfig's generation, which is updated on mutation by the API Server.
configHash stringConfigHash is a hash of the current configuration for change detection
referencingServers string arrayReferencingServers is a list of MCPServer resources that reference this MCPToolConfig
This helps track which servers need to be reconciled when this config changes

api.v1alpha1.NameFilter

NameFilter defines name-based filtering

Appears in:

FieldDescriptionDefaultValidation
include string arrayInclude is a list of glob patterns to include
exclude string arrayExclude is a list of glob patterns to exclude

api.v1alpha1.NetworkPermissions

NetworkPermissions defines the network permissions for an MCP server

Appears in:

FieldDescriptionDefaultValidation
mode stringMode specifies the network mode for the container (e.g., "host", "bridge", "none")
When empty, the default container runtime network mode is used
outbound api.v1alpha1.OutboundNetworkPermissionsOutbound defines the outbound network permissions

api.v1alpha1.OIDCConfigRef

OIDCConfigRef defines a reference to OIDC configuration

Appears in:

FieldDescriptionDefaultValidation
type stringType is the type of OIDC configurationkubernetesEnum: [kubernetes configMap inline]
resourceUrl stringResourceURL is the explicit resource URL for OAuth discovery endpoint (RFC 9728)
If not specified, defaults to the in-cluster Kubernetes service URL
kubernetes api.v1alpha1.KubernetesOIDCConfigKubernetes configures OIDC for Kubernetes service account token validation
Only used when Type is "kubernetes"
configMap api.v1alpha1.ConfigMapOIDCRefConfigMap references a ConfigMap containing OIDC configuration
Only used when Type is "configmap"
inline api.v1alpha1.InlineOIDCConfigInline contains direct OIDC configuration
Only used when Type is "inline"

api.v1alpha1.OpenTelemetryConfig

OpenTelemetryConfig defines pure OpenTelemetry configuration

Appears in:

FieldDescriptionDefaultValidation
enabled booleanEnabled controls whether OpenTelemetry is enabledfalse
endpoint stringEndpoint is the OTLP endpoint URL for tracing and metrics
serviceName stringServiceName is the service name for telemetry
If not specified, defaults to the MCPServer name
headers string arrayHeaders contains authentication headers for the OTLP endpoint
Specified as key=value pairs
insecure booleanInsecure indicates whether to use HTTP instead of HTTPS for the OTLP endpointfalse
metrics api.v1alpha1.OpenTelemetryMetricsConfigMetrics defines OpenTelemetry metrics-specific configuration
tracing api.v1alpha1.OpenTelemetryTracingConfigTracing defines OpenTelemetry tracing configuration

api.v1alpha1.OpenTelemetryMetricsConfig

OpenTelemetryMetricsConfig defines OpenTelemetry metrics configuration

Appears in:

FieldDescriptionDefaultValidation
enabled booleanEnabled controls whether OTLP metrics are sentfalse

api.v1alpha1.OpenTelemetryTracingConfig

OpenTelemetryTracingConfig defines OpenTelemetry tracing configuration

Appears in:

FieldDescriptionDefaultValidation
enabled booleanEnabled controls whether OTLP tracing is sentfalse
samplingRate stringSamplingRate is the trace sampling rate (0.0-1.0)0.05

api.v1alpha1.OperationalConfig

OperationalConfig defines operational settings

Appears in:

FieldDescriptionDefaultValidation
logLevel stringLogLevel sets the logging level for the Virtual MCP server.
Set to "debug" to enable debug logging. When not set, defaults to info level.
Enum: [debug]
timeouts api.v1alpha1.TimeoutConfigTimeouts configures timeout settings
failureHandling api.v1alpha1.FailureHandlingConfigFailureHandling configures failure handling behavior

api.v1alpha1.OutboundNetworkPermissions

OutboundNetworkPermissions defines the outbound network permissions

Appears in:

FieldDescriptionDefaultValidation
insecureAllowAll booleanInsecureAllowAll allows all outbound network connections (not recommended)false
allowHost string arrayAllowHost is a list of hosts to allow connections to
allowPort integer arrayAllowPort is a list of ports to allow connections to

api.v1alpha1.OutgoingAuthConfig

OutgoingAuthConfig configures authentication from Virtual MCP to backend MCPServers

Appears in:

FieldDescriptionDefaultValidation
source stringSource defines how backend authentication configurations are determined
- discovered: Automatically discover from backend's MCPServer.spec.externalAuthConfigRef
- inline: Explicit per-backend configuration in VirtualMCPServer
discoveredEnum: [discovered inline]
default api.v1alpha1.BackendAuthConfigDefault defines default behavior for backends without explicit auth config
backends object (keys:string, values:api.v1alpha1.BackendAuthConfig)Backends defines per-backend authentication overrides
Works in all modes (discovered, inline)

api.v1alpha1.OutputPropertySpec

OutputPropertySpec defines a single output property

Appears in:

FieldDescriptionDefaultValidation
type stringType is the JSON Schema type: "string", "integer", "number", "boolean", "object", "array"Enum: [string integer number boolean object array]
Required: {}
description stringDescription is a human-readable description exposed to clients and models
value stringValue is a template string for constructing the runtime value
Supports template syntax: {{.steps.step_id.output.field}}, {{.params.param_name}}
For object types, this can be a JSON string that will be deserialized
properties object (keys:string, values:api.v1alpha1.OutputPropertySpec)Properties defines nested properties for object typesSchemaless: {}
default RawExtensionDefault is the fallback value if template expansion failsSchemaless: {}

api.v1alpha1.OutputSpec

OutputSpec defines the structured output schema for a composite tool workflow

Appears in:

FieldDescriptionDefaultValidation
properties object (keys:string, values:api.v1alpha1.OutputPropertySpec)Properties defines the output properties
Map key is the property name, value is the property definition
required string arrayRequired lists property names that must be present in the output

api.v1alpha1.PVCSource

PVCSource defines PersistentVolumeClaim source configuration

Appears in:

FieldDescriptionDefaultValidation
claimName stringClaimName is the name of the PersistentVolumeClaimMinLength: 1
Required: {}
path stringPath is the relative path to the registry file within the PVC.
The PVC is mounted at /config/registry/{registryName}/.
The full file path becomes: /config/registry/{registryName}/{path}
This design:
- Each registry gets its own mount point (consistent with ConfigMap sources)
- Multiple registries can share the same PVC by mounting it at different paths
- Users control PVC organization freely via the path field
Examples:
Registry "production" using PVC "shared-data" with path "prod/registry.json":
PVC contains /prod/registry.json → accessed at /config/registry/production/prod/registry.json
Registry "development" using SAME PVC "shared-data" with path "dev/registry.json":
PVC contains /dev/registry.json → accessed at /config/registry/development/dev/registry.json
(Same PVC, different mount path)
Registry "staging" using DIFFERENT PVC "other-pvc" with path "registry.json":
PVC contains /registry.json → accessed at /config/registry/staging/registry.json
(Different PVC, independent mount)
Registry "team-a" with path "v1/servers.json":
PVC contains /v1/servers.json → accessed at /config/registry/team-a/v1/servers.json
(Subdirectories allowed in path)
registry.jsonPattern: ^.*\.json$

api.v1alpha1.PermissionProfileRef

PermissionProfileRef defines a reference to a permission profile

Appears in:

FieldDescriptionDefaultValidation
type stringType is the type of permission profile referencebuiltinEnum: [builtin configmap]
name stringName is the name of the permission profile
If Type is "builtin", Name must be one of: "none", "network"
If Type is "configmap", Name is the name of the ConfigMap
Required: {}
key stringKey is the key in the ConfigMap that contains the permission profile
Only used when Type is "configmap"

api.v1alpha1.PrometheusConfig

PrometheusConfig defines Prometheus-specific configuration

Appears in:

FieldDescriptionDefaultValidation
enabled booleanEnabled controls whether Prometheus metrics endpoint is exposedfalse

api.v1alpha1.ProxyDeploymentOverrides

ProxyDeploymentOverrides defines overrides specific to the proxy deployment

Appears in:

FieldDescriptionDefaultValidation
annotations object (keys:string, values:string)Annotations to add or override on the resource
labels object (keys:string, values:string)Labels to add or override on the resource
podTemplateMetadataOverrides api.v1alpha1.ResourceMetadataOverrides
env api.v1alpha1.EnvVar arrayEnv are environment variables to set in the proxy container (thv run process)
These affect the toolhive proxy itself, not the MCP server it manages
Use TOOLHIVE_DEBUG=true to enable debug logging in the proxy

api.v1alpha1.RegistryFilter

RegistryFilter defines include/exclude patterns for registry content

Appears in:

FieldDescriptionDefaultValidation
names api.v1alpha1.NameFilterNameFilters defines name-based filtering
tags api.v1alpha1.TagFilterTags defines tag-based filtering

api.v1alpha1.ResourceList

ResourceList is a set of (resource name, quantity) pairs

Appears in:

FieldDescriptionDefaultValidation
cpu stringCPU is the CPU limit in cores (e.g., "500m" for 0.5 cores)
memory stringMemory is the memory limit in bytes (e.g., "64Mi" for 64 megabytes)

api.v1alpha1.ResourceMetadataOverrides

ResourceMetadataOverrides defines metadata overrides for a resource

Appears in:

FieldDescriptionDefaultValidation
annotations object (keys:string, values:string)Annotations to add or override on the resource
labels object (keys:string, values:string)Labels to add or override on the resource

api.v1alpha1.ResourceOverrides

ResourceOverrides defines overrides for annotations and labels on created resources

Appears in:

FieldDescriptionDefaultValidation
proxyDeployment api.v1alpha1.ProxyDeploymentOverridesProxyDeployment defines overrides for the Proxy Deployment resource (toolhive proxy)
proxyService api.v1alpha1.ResourceMetadataOverridesProxyService defines overrides for the Proxy Service resource (points to the proxy deployment)

api.v1alpha1.ResourceRequirements

ResourceRequirements describes the compute resource requirements

Appears in:

FieldDescriptionDefaultValidation
limits api.v1alpha1.ResourceListLimits describes the maximum amount of compute resources allowed
requests api.v1alpha1.ResourceListRequests describes the minimum amount of compute resources required

api.v1alpha1.RetryPolicy

RetryPolicy defines retry behavior for workflow steps

Appears in:

FieldDescriptionDefaultValidation
maxRetries integerMaxRetries is the maximum number of retry attempts3Maximum: 10
Minimum: 1
backoffStrategy stringBackoffStrategy defines the backoff strategy
- fixed: Fixed delay between retries
- exponential: Exponential backoff
exponentialEnum: [fixed exponential]
initialDelay stringInitialDelay is the initial delay before first retry1sPattern: ^([0-9]+(\.[0-9]+)?(ms|s|m))+$
maxDelay stringMaxDelay is the maximum delay between retries30sPattern: ^([0-9]+(\.[0-9]+)?(ms|s|m))+$
retryableErrors string arrayRetryableErrors defines which errors should trigger retry
If empty, all errors are retryable
Supports regex patterns

api.v1alpha1.SecretKeyRef

SecretKeyRef is a reference to a key within a Secret

Appears in:

FieldDescriptionDefaultValidation
name stringName is the name of the secretRequired: {}
key stringKey is the key within the secretRequired: {}

api.v1alpha1.SecretRef

SecretRef is a reference to a secret

Appears in:

FieldDescriptionDefaultValidation
name stringName is the name of the secretRequired: {}
key stringKey is the key in the secret itselfRequired: {}
targetEnvName stringTargetEnvName is the environment variable to be used when setting up the secret in the MCP server
If left unspecified, it defaults to the key

api.v1alpha1.StorageReference

StorageReference defines a reference to internal storage

Appears in:

FieldDescriptionDefaultValidation
type stringType is the storage type (configmap)Enum: [configmap]
configMapRef LocalObjectReferenceConfigMapRef is a reference to a ConfigMap storage
Only used when Type is "configmap"

api.v1alpha1.SyncPhase

Underlying type: string

SyncPhase represents the data synchronization state

Validation:

  • Enum: [Syncing Complete Failed]

Appears in:

FieldDescription
SyncingSyncPhaseSyncing means sync is currently in progress
CompleteSyncPhaseComplete means sync completed successfully
FailedSyncPhaseFailed means sync failed

api.v1alpha1.SyncPolicy

SyncPolicy defines automatic synchronization behavior. When specified, enables automatic synchronization at the given interval. Manual synchronization via annotation-based triggers is always available regardless of this policy setting.

Appears in:

FieldDescriptionDefaultValidation
interval stringInterval is the sync interval for automatic synchronization (Go duration format)
Examples: "1h", "30m", "24h"
Pattern: ^([0-9]+(\.[0-9]+)?(ns|us|µs|ms|s|m|h))+$
Required: {}

api.v1alpha1.SyncStatus

SyncStatus provides detailed information about data synchronization

Appears in:

FieldDescriptionDefaultValidation
phase api.v1alpha1.SyncPhasePhase represents the current synchronization phaseEnum: [Syncing Complete Failed]
message stringMessage provides additional information about the sync status
lastAttempt TimeLastAttempt is the timestamp of the last sync attempt
attemptCount integerAttemptCount is the number of sync attempts since last successMinimum: 0
lastSyncTime TimeLastSyncTime is the timestamp of the last successful sync
lastSyncHash stringLastSyncHash is the hash of the last successfully synced data
Used to detect changes in source data
serverCount integerServerCount is the total number of servers in the registryMinimum: 0

api.v1alpha1.TagFilter

TagFilter defines tag-based filtering

Appears in:

FieldDescriptionDefaultValidation
include string arrayInclude is a list of tags to include
exclude string arrayExclude is a list of tags to exclude

api.v1alpha1.TelemetryConfig

TelemetryConfig defines observability configuration for the MCP server

Appears in:

FieldDescriptionDefaultValidation
openTelemetry api.v1alpha1.OpenTelemetryConfigOpenTelemetry defines OpenTelemetry configuration
prometheus api.v1alpha1.PrometheusConfigPrometheus defines Prometheus-specific configuration

api.v1alpha1.TimeoutConfig

TimeoutConfig configures timeout settings

Appears in:

FieldDescriptionDefaultValidation
default stringDefault is the default timeout for backend requests30s
perWorkload object (keys:string, values:string)PerWorkload defines per-workload timeout overrides

api.v1alpha1.TokenExchangeConfig

TokenExchangeConfig holds configuration for RFC-8693 OAuth 2.0 Token Exchange. This configuration is used to exchange incoming authentication tokens for tokens that can be used with external services. The structure matches the tokenexchange.Config from pkg/auth/tokenexchange/middleware.go

Appears in:

FieldDescriptionDefaultValidation
tokenUrl stringTokenURL is the OAuth 2.0 token endpoint URL for token exchangeRequired: {}
clientId stringClientID is the OAuth 2.0 client identifier
Optional for some token exchange flows (e.g., Google Cloud Workforce Identity)
clientSecretRef api.v1alpha1.SecretKeyRefClientSecretRef is a reference to a secret containing the OAuth 2.0 client secret
Optional for some token exchange flows (e.g., Google Cloud Workforce Identity)
audience stringAudience is the target audience for the exchanged tokenRequired: {}
scopes string arrayScopes is a list of OAuth 2.0 scopes to request for the exchanged token
subjectTokenType stringSubjectTokenType is the type of the incoming subject token.
Accepts short forms: "access_token" (default), "id_token", "jwt"
Or full URNs: "urn:ietf:params:oauth:token-type:access_token",
"urn:ietf:params:oauth:token-type:id_token",
"urn:ietf:params:oauth:token-type:jwt"
For Google Workload Identity Federation with OIDC providers (like Okta), use "id_token"
Pattern: ^(access_token|id_token|jwt|urn:ietf:params:oauth:token-type:(access_token|id_token|jwt))?$
externalTokenHeaderName stringExternalTokenHeaderName is the name of the custom header to use for the exchanged token.
If set, the exchanged token will be added to this custom header (e.g., "X-Upstream-Token").
If empty or not set, the exchanged token will replace the Authorization header (default behavior).

api.v1alpha1.ToolConfigRef

ToolConfigRef defines a reference to a MCPToolConfig resource. The referenced MCPToolConfig must be in the same namespace as the MCPServer.

Appears in:

FieldDescriptionDefaultValidation
name stringName is the name of the MCPToolConfig resource in the same namespaceRequired: {}

api.v1alpha1.ToolOverride

ToolOverride represents a tool override configuration. Both Name and Description can be overridden independently, but they can't be both empty.

Appears in:

FieldDescriptionDefaultValidation
name stringName is the redefined name of the tool
description stringDescription is the redefined description of the tool

api.v1alpha1.ValidationStatus

Underlying type: string

ValidationStatus represents the validation state of a workflow

Validation:

  • Enum: [Valid Invalid Unknown]

Appears in:

FieldDescription
ValidValidationStatusValid indicates the workflow is valid
InvalidValidationStatusInvalid indicates the workflow has validation errors
UnknownValidationStatusUnknown indicates validation hasn't been performed yet

api.v1alpha1.VirtualMCPCompositeToolDefinition

VirtualMCPCompositeToolDefinition is the Schema for the virtualmcpcompositetooldefinitions API VirtualMCPCompositeToolDefinition defines reusable composite workflows that can be referenced by multiple VirtualMCPServer instances

Appears in:

FieldDescriptionDefaultValidation
apiVersion stringtoolhive.stacklok.dev/v1alpha1
kind stringVirtualMCPCompositeToolDefinition
kind stringKind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
apiVersion stringAPIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
metadata ObjectMetaRefer to Kubernetes API documentation for fields of metadata.
spec api.v1alpha1.VirtualMCPCompositeToolDefinitionSpec
status api.v1alpha1.VirtualMCPCompositeToolDefinitionStatus

api.v1alpha1.VirtualMCPCompositeToolDefinitionList

VirtualMCPCompositeToolDefinitionList contains a list of VirtualMCPCompositeToolDefinition

FieldDescriptionDefaultValidation
apiVersion stringtoolhive.stacklok.dev/v1alpha1
kind stringVirtualMCPCompositeToolDefinitionList
kind stringKind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
apiVersion stringAPIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
metadata ListMetaRefer to Kubernetes API documentation for fields of metadata.
items api.v1alpha1.VirtualMCPCompositeToolDefinition array

api.v1alpha1.VirtualMCPCompositeToolDefinitionSpec

VirtualMCPCompositeToolDefinitionSpec defines the desired state of VirtualMCPCompositeToolDefinition

Appears in:

FieldDescriptionDefaultValidation
name stringName is the workflow name exposed as a composite toolMaxLength: 64
MinLength: 1
Pattern: ^[a-z0-9]([a-z0-9_-]*[a-z0-9])?$
Required: {}
description stringDescription is a human-readable description of the workflowMinLength: 1
Required: {}
parameters RawExtensionParameters defines the input parameter schema for the workflow in JSON Schema format.
Should be a JSON Schema object with "type": "object" and "properties".
Per MCP specification, this should follow standard JSON Schema for tool inputSchema.
Example:
{
"type": "object",
"properties": {
"param1": {"type": "string", "default": "value"},
"param2": {"type": "integer"}
},
"required": ["param2"]
}
Type: object
steps api.v1alpha1.WorkflowStep arraySteps defines the workflow step definitions
Steps are executed sequentially in Phase 1
Phase 2 will support DAG execution via dependsOn
MinItems: 1
Required: {}
timeout stringTimeout is the overall workflow timeout
Defaults to 30m if not specified
30mPattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$
failureMode stringFailureMode defines the failure handling strategy
- abort: Stop execution on first failure (default)
- continue: Continue executing remaining steps
abortEnum: [abort continue]
output api.v1alpha1.OutputSpecOutput defines the structured output schema for the composite tool.
Specifies how to construct the final output from workflow step results.
If not specified, the workflow returns the last step's output (backward compatible).

api.v1alpha1.VirtualMCPCompositeToolDefinitionStatus

VirtualMCPCompositeToolDefinitionStatus defines the observed state of VirtualMCPCompositeToolDefinition

Appears in:

FieldDescriptionDefaultValidation
validationStatus api.v1alpha1.ValidationStatusValidationStatus indicates the validation state of the workflow
- Valid: Workflow structure is valid
- Invalid: Workflow has validation errors
Enum: [Valid Invalid Unknown]
validationErrors string arrayValidationErrors contains validation error messages if ValidationStatus is Invalid
referencingVirtualServers string arrayReferencingVirtualServers lists VirtualMCPServer resources that reference this workflow
This helps track which servers need to be reconciled when this workflow changes
observedGeneration integerObservedGeneration is the most recent generation observed for this VirtualMCPCompositeToolDefinition
It corresponds to the resource's generation, which is updated on mutation by the API Server
conditions Condition arrayConditions represent the latest available observations of the workflow's state

api.v1alpha1.VirtualMCPServer

VirtualMCPServer is the Schema for the virtualmcpservers API VirtualMCPServer aggregates multiple backend MCPServers into a unified endpoint

Appears in:

FieldDescriptionDefaultValidation
apiVersion stringtoolhive.stacklok.dev/v1alpha1
kind stringVirtualMCPServer
kind stringKind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
apiVersion stringAPIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
metadata ObjectMetaRefer to Kubernetes API documentation for fields of metadata.
spec api.v1alpha1.VirtualMCPServerSpec
status api.v1alpha1.VirtualMCPServerStatus

api.v1alpha1.VirtualMCPServerList

VirtualMCPServerList contains a list of VirtualMCPServer

FieldDescriptionDefaultValidation
apiVersion stringtoolhive.stacklok.dev/v1alpha1
kind stringVirtualMCPServerList
kind stringKind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
apiVersion stringAPIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
metadata ListMetaRefer to Kubernetes API documentation for fields of metadata.
items api.v1alpha1.VirtualMCPServer array

api.v1alpha1.VirtualMCPServerPhase

Underlying type: string

VirtualMCPServerPhase represents the lifecycle phase of a VirtualMCPServer

Validation:

  • Enum: [Pending Ready Degraded Failed]

Appears in:

FieldDescription
PendingVirtualMCPServerPhasePending indicates the VirtualMCPServer is being initialized
ReadyVirtualMCPServerPhaseReady indicates the VirtualMCPServer is ready and serving requests
DegradedVirtualMCPServerPhaseDegraded indicates the VirtualMCPServer is running but some backends are unavailable
FailedVirtualMCPServerPhaseFailed indicates the VirtualMCPServer has failed

api.v1alpha1.VirtualMCPServerSpec

VirtualMCPServerSpec defines the desired state of VirtualMCPServer

Appears in:

FieldDescriptionDefaultValidation
incomingAuth api.v1alpha1.IncomingAuthConfigIncomingAuth configures authentication for clients connecting to the Virtual MCP server
Must be explicitly set - use "anonymous" type when no authentication is required
Required: {}
outgoingAuth api.v1alpha1.OutgoingAuthConfigOutgoingAuth configures authentication from Virtual MCP to backend MCPServers
aggregation api.v1alpha1.AggregationConfigAggregation defines tool aggregation and conflict resolution strategies
compositeTools api.v1alpha1.CompositeToolSpec arrayCompositeTools defines inline composite tool definitions
For complex workflows, reference VirtualMCPCompositeToolDefinition resources instead
compositeToolRefs api.v1alpha1.CompositeToolDefinitionRef arrayCompositeToolRefs references VirtualMCPCompositeToolDefinition resources
for complex, reusable workflows
operational api.v1alpha1.OperationalConfigOperational defines operational settings like timeouts and health checks
serviceType stringServiceType specifies the Kubernetes service type for the Virtual MCP serverClusterIPEnum: [ClusterIP NodePort LoadBalancer]
podTemplateSpec RawExtensionPodTemplateSpec defines the pod template to use for the Virtual MCP server
This allows for customizing the pod configuration beyond what is provided by the other fields.
Note that to modify the specific container the Virtual MCP server runs in, you must specify
the 'vmcp' container name in the PodTemplateSpec.
This field accepts a PodTemplateSpec object as JSON/YAML.
Type: object
config vmcp.config.ConfigConfig is the Virtual MCP server configuration
The only field currently required within config is config.groupRef.
GroupRef references an existing MCPGroup that defines backend workloads.
The referenced MCPGroup must exist in the same namespace.
The telemetry and audit config from here are also supported, but not required.
NOTE: THIS IS NOT ENTIRELY USED AND IS PARTIALLY DUPLICATED BY THE SPEC FIELDS ABOVE.
Type: object

api.v1alpha1.VirtualMCPServerStatus

VirtualMCPServerStatus defines the observed state of VirtualMCPServer

Appears in:

FieldDescriptionDefaultValidation
conditions Condition arrayConditions represent the latest available observations of the VirtualMCPServer's state
observedGeneration integerObservedGeneration is the most recent generation observed for this VirtualMCPServer
phase api.v1alpha1.VirtualMCPServerPhasePhase is the current phase of the VirtualMCPServerPendingEnum: [Pending Ready Degraded Failed]
message stringMessage provides additional information about the current phase
url stringURL is the URL where the Virtual MCP server can be accessed
discoveredBackends api.v1alpha1.DiscoveredBackend arrayDiscoveredBackends lists discovered backend configurations from the MCPGroup
backendCount integerBackendCount is the number of discovered backends

api.v1alpha1.Volume

Volume represents a volume to mount in a container

Appears in:

FieldDescriptionDefaultValidation
name stringName is the name of the volumeRequired: {}
hostPath stringHostPath is the path on the host to mountRequired: {}
mountPath stringMountPath is the path in the container to mount toRequired: {}
readOnly booleanReadOnly specifies whether the volume should be mounted read-onlyfalse

api.v1alpha1.WorkflowStep

WorkflowStep defines a step in a composite tool workflow

Appears in:

FieldDescriptionDefaultValidation
id stringID is the unique identifier for this stepRequired: {}
type stringType is the step type (tool, elicitation, etc.)toolEnum: [tool elicitation]
tool stringTool is the tool to call (format: "workload.tool_name")
Only used when Type is "tool"
arguments RawExtensionArguments is a map of argument values with template expansion support.
Supports Go template syntax with .params and .steps for string values.
Non-string values (integers, booleans, arrays, objects) are passed as-is.
Note: the templating is only supported on the first level of the key-value pairs.
Type: object
message stringMessage is the elicitation message
Only used when Type is "elicitation"
schema RawExtensionSchema defines the expected response schema for elicitationType: object
onDecline api.v1alpha1.ElicitationResponseHandlerOnDecline defines the action to take when the user explicitly declines the elicitation
Only used when Type is "elicitation"
onCancel api.v1alpha1.ElicitationResponseHandlerOnCancel defines the action to take when the user cancels/dismisses the elicitation
Only used when Type is "elicitation"
dependsOn string arrayDependsOn lists step IDs that must complete before this step
condition stringCondition is a template expression that determines if the step should execute
onError api.v1alpha1.ErrorHandlingOnError defines error handling behavior
timeout stringTimeout is the maximum execution time for this step
defaultResults object (keys:string, values:RawExtension)DefaultResults provides fallback output values when this step is skipped
(due to condition evaluating to false) or fails (when onError.action is "continue").
Each key corresponds to an output field name referenced by downstream steps.
Required if the step may be skipped AND downstream steps reference this step's output.
Schemaless: {}

api.v1alpha1.WorkloadToolConfig

WorkloadToolConfig defines tool filtering and overrides for a specific workload

Appears in:

FieldDescriptionDefaultValidation
workload stringWorkload is the name of the backend MCPServer workloadRequired: {}
toolConfigRef api.v1alpha1.ToolConfigRefToolConfigRef references a MCPToolConfig resource for tool filtering and renaming
If specified, Filter and Overrides are ignored
filter string arrayFilter is an inline list of tool names to allow (allow list)
Only used if ToolConfigRef is not specified
overrides object (keys:string, values:api.v1alpha1.ToolOverride)Overrides is an inline map of tool overrides
Only used if ToolConfigRef is not specified