diff --git a/static/api-specs/toolhive-crd-api.md b/static/api-specs/toolhive-crd-api.md
index 1424ef5b..7f791e75 100644
--- a/static/api-specs/toolhive-crd-api.md
+++ b/static/api-specs/toolhive-crd-api.md
@@ -17,6 +17,46 @@ Package v1alpha1 contains API Schema definitions for the toolhive v1alpha1 API g
+#### APIPhase
+
+_Underlying type:_ _string_
+
+APIPhase represents the API service state
+
+_Validation:_
+- Enum: [NotStarted Deploying Ready Unhealthy Error]
+
+_Appears in:_
+- [APIStatus](#apistatus)
+
+| Field | Description |
+| --- | --- |
+| `NotStarted` | APIPhaseNotStarted means API deployment has not been created
|
+| `Deploying` | APIPhaseDeploying means API is being deployed
|
+| `Ready` | APIPhaseReady means API is ready to serve requests
|
+| `Unhealthy` | APIPhaseUnhealthy means API is deployed but not healthy
|
+| `Error` | APIPhaseError means API deployment failed
|
+
+
+#### APIStatus
+
+
+
+APIStatus provides detailed information about the API service
+
+
+
+_Appears in:_
+- [MCPRegistryStatus](#mcpregistrystatus)
+
+| Field | Description | Default | Validation |
+| --- | --- | --- | --- |
+| `phase` _[APIPhase](#apiphase)_ | Phase represents the current API service phase | | Enum: [NotStarted Deploying Ready Unhealthy Error]
|
+| `message` _string_ | Message provides additional information about the API status | | |
+| `endpoint` _string_ | Endpoint is the URL where the API is accessible | | |
+| `readySince` _[Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#time-v1-meta)_ | ReadySince is the timestamp when the API became ready | | |
+
+
#### AuditConfig
@@ -318,14 +358,10 @@ _Appears in:_
| Field | Description | Default | Validation |
| --- | --- | --- | --- |
-| `phase` _[MCPRegistryPhase](#mcpregistryphase)_ | Phase represents the current phase of the MCPRegistry | | Enum: [Pending Ready Failed Syncing Terminating]
|
+| `phase` _[MCPRegistryPhase](#mcpregistryphase)_ | Phase represents the current overall phase of the MCPRegistry
Derived from sync and API status | | Enum: [Pending Ready Failed Syncing Terminating]
|
| `message` _string_ | Message provides additional information about the current phase | | |
-| `lastSyncTime` _[Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#time-v1-meta)_ | LastSyncTime is the timestamp of the last successful sync | | |
-| `lastSyncHash` _string_ | LastSyncHash is the hash of the last successfully synced data
Used to detect changes in source data | | |
-| `serverCount` _integer_ | ServerCount is the total number of servers in the registry | | Minimum: 0
|
-| `deployedServerCount` _integer_ | DeployedServerCount is the number of deployed servers with matching labels | | Minimum: 0
|
-| `syncAttempts` _integer_ | SyncAttempts is the number of sync attempts since last success | | Minimum: 0
|
-| `apiEndpoint` _string_ | APIEndpoint is the URL of the registry API service | | |
+| `syncStatus` _[SyncStatus](#syncstatus)_ | SyncStatus provides detailed information about data synchronization | | |
+| `apiStatus` _[APIStatus](#apistatus)_ | APIStatus provides detailed information about the API service | | |
| `storageRef` _[StorageReference](#storagereference)_ | StorageRef is a reference to the internal storage location | | |
| `lastManualSyncTrigger` _string_ | LastManualSyncTrigger tracks the last processed manual sync annotation value
Used to detect new manual sync requests via toolhive.stacklok.dev/sync-trigger annotation | | |
| `conditions` _[Condition](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#condition-v1-meta) array_ | Conditions represent the latest available observations of the MCPRegistry's state | | |
@@ -832,6 +868,26 @@ _Appears in:_
| `configMapRef` _[LocalObjectReference](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#localobjectreference-v1-core)_ | ConfigMapRef is a reference to a ConfigMap storage
Only used when Type is "configmap" | | |
+#### SyncPhase
+
+_Underlying type:_ _string_
+
+SyncPhase represents the data synchronization state
+
+_Validation:_
+- Enum: [Idle Syncing Complete Failed]
+
+_Appears in:_
+- [SyncStatus](#syncstatus)
+
+| Field | Description |
+| --- | --- |
+| `Idle` | SyncPhaseIdle means no sync is needed or scheduled
|
+| `Syncing` | SyncPhaseSyncing means sync is currently in progress
|
+| `Complete` | SyncPhaseComplete means sync completed successfully
|
+| `Failed` | SyncPhaseFailed means sync failed
|
+
+
#### SyncPolicy
@@ -851,6 +907,28 @@ _Appears in:_
| `interval` _string_ | Interval 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: \{\}
|
+#### SyncStatus
+
+
+
+SyncStatus provides detailed information about data synchronization
+
+
+
+_Appears in:_
+- [MCPRegistryStatus](#mcpregistrystatus)
+
+| Field | Description | Default | Validation |
+| --- | --- | --- | --- |
+| `phase` _[SyncPhase](#syncphase)_ | Phase represents the current synchronization phase | | Enum: [Idle Syncing Complete Failed]
|
+| `message` _string_ | Message provides additional information about the sync status | | |
+| `lastAttempt` _[Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#time-v1-meta)_ | LastAttempt is the timestamp of the last sync attempt | | |
+| `attemptCount` _integer_ | AttemptCount is the number of sync attempts since last success | | Minimum: 0
|
+| `lastSyncTime` _[Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#time-v1-meta)_ | LastSyncTime is the timestamp of the last successful sync | | |
+| `lastSyncHash` _string_ | LastSyncHash is the hash of the last successfully synced data
Used to detect changes in source data | | |
+| `serverCount` _integer_ | ServerCount is the total number of servers in the registry | | Minimum: 0
|
+
+
#### TagFilter