diff --git a/static/api-specs/toolhive-crd-api.md b/static/api-specs/toolhive-crd-api.md index 42c8540c..86f50d15 100644 --- a/static/api-specs/toolhive-crd-api.md +++ b/static/api-specs/toolhive-crd-api.md @@ -212,6 +212,7 @@ _Appears in:_ | `parameters` _[RawExtension](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#rawextension-runtime-pkg)_ | Parameters 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` _[WorkflowStep](#workflowstep) array_ | Steps defines the workflow steps | | MinItems: 1
Required: \{\}
| | `timeout` _string_ | Timeout is the maximum execution time for the composite tool | 30m | | +| `output` _[OutputSpec](#outputspec)_ | Output 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). | | | #### ConfigMapAuthzRef @@ -734,9 +735,10 @@ _Appears in:_ | --- | --- | --- | --- | | `name` _string_ | Name is a unique identifier for this registry configuration within the MCPRegistry | | MinLength: 1
Required: \{\}
| | `format` _string_ | Format is the data format (toolhive, upstream) | toolhive | Enum: [toolhive upstream]
| -| `configMapRef` _[ConfigMapKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#configmapkeyselector-v1-core)_ | ConfigMapRef defines the ConfigMap source configuration
Mutually exclusive with Git and API | | | -| `git` _[GitSource](#gitsource)_ | Git defines the Git repository source configuration
Mutually exclusive with ConfigMapRef and API | | | -| `api` _[APISource](#apisource)_ | API defines the API source configuration
Mutually exclusive with ConfigMapRef and Git | | | +| `configMapRef` _[ConfigMapKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#configmapkeyselector-v1-core)_ | ConfigMapRef defines the ConfigMap source configuration
Mutually exclusive with Git, API, and PVCRef | | | +| `git` _[GitSource](#gitsource)_ | Git defines the Git repository source configuration
Mutually exclusive with ConfigMapRef, API, and PVCRef | | | +| `api` _[APISource](#apisource)_ | API defines the API source configuration
Mutually exclusive with ConfigMapRef, Git, and PVCRef | | | +| `pvcRef` _[PVCSource](#pvcsource)_ | PVCRef defines the PersistentVolumeClaim source configuration
Mutually exclusive with ConfigMapRef, Git, and API | | | | `syncPolicy` _[SyncPolicy](#syncpolicy)_ | SyncPolicy 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` _[RegistryFilter](#registryfilter)_ | Filter defines include/exclude patterns for registry content | | | @@ -1332,6 +1334,62 @@ _Appears in:_ | `backends` _object (keys:string, values:[BackendAuthConfig](#backendauthconfig))_ | Backends defines per-backend authentication overrides
Works in all modes (discovered, inline) | | | +#### OutputPropertySpec + + + +OutputPropertySpec defines a single output property + + + +_Appears in:_ +- [OutputPropertySpec](#outputpropertyspec) +- [OutputSpec](#outputspec) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `type` _string_ | Type is the JSON Schema type: "string", "integer", "number", "boolean", "object", "array" | | Enum: [string integer number boolean object array]
Required: \{\}
| +| `description` _string_ | Description is a human-readable description exposed to clients and models | | | +| `value` _string_ | Value 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:[OutputPropertySpec](#outputpropertyspec))_ | Properties defines nested properties for object types | | Schemaless: \{\}
| +| `default` _[RawExtension](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#rawextension-runtime-pkg)_ | Default is the fallback value if template expansion fails | | Schemaless: \{\}
| + + +#### OutputSpec + + + +OutputSpec defines the structured output schema for a composite tool workflow + + + +_Appears in:_ +- [CompositeToolSpec](#compositetoolspec) +- [VirtualMCPCompositeToolDefinitionSpec](#virtualmcpcompositetooldefinitionspec) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `properties` _object (keys:string, values:[OutputPropertySpec](#outputpropertyspec))_ | Properties defines the output properties
Map key is the property name, value is the property definition | | | +| `required` _string array_ | Required lists property names that must be present in the output | | | + + +#### PVCSource + + + +PVCSource defines PersistentVolumeClaim source configuration + + + +_Appears in:_ +- [MCPRegistryConfig](#mcpregistryconfig) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `claimName` _string_ | ClaimName is the name of the PersistentVolumeClaim | | MinLength: 1
Required: \{\}
| +| `path` _string_ | Path 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.json | Pattern: `^.*\.json$`
| + + #### PermissionProfileRef @@ -1807,6 +1865,7 @@ _Appears in:_ | `steps` _[WorkflowStep](#workflowstep) array_ | Steps defines the workflow step definitions
Steps are executed sequentially in Phase 1
Phase 2 will support DAG execution via dependsOn | | MinItems: 1
Required: \{\}
| | `timeout` _string_ | Timeout is the overall workflow timeout
Defaults to 30m if not specified | 30m | Pattern: `^([0-9]+(\.[0-9]+)?(ms\|s\|m\|h))+$`
| | `failureMode` _string_ | FailureMode defines the failure handling strategy
- abort: Stop execution on first failure (default)
- continue: Continue executing remaining steps | abort | Enum: [abort continue]
| +| `output` _[OutputSpec](#outputspec)_ | Output 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). | | | #### VirtualMCPCompositeToolDefinitionStatus