Documentation
¶
Overview ¶
Package registry provides MCP server registry management functionality. It supports multiple registry sources including embedded data, local files, remote URLs, and API endpoints, with optional caching and conversion capabilities.
Index ¶
- func ConvertServerJSON(serverJSON *v0.ServerJSON) (types.ServerMetadata, error)
- func ConvertServersToMetadata(servers []*v0.ServerJSON) ([]types.ServerMetadata, error)
- func ResetDefaultProvider()
- func ValidateEmbeddedRegistry() error
- func ValidateRegistrySchema(registryData []byte) error
- func ValidateUpstreamRegistry(registryData []byte) error
- type APIRegistryProvider
- func (p *APIRegistryProvider) GetImageServer(name string) (*types.ImageMetadata, error)
- func (p *APIRegistryProvider) GetRegistry() (*types.Registry, error)
- func (p *APIRegistryProvider) GetServer(name string) (types.ServerMetadata, error)
- func (p *APIRegistryProvider) ListServers() ([]types.ServerMetadata, error)
- func (p *APIRegistryProvider) SearchServers(query string) ([]types.ServerMetadata, error)
- type BaseProvider
- func (p *BaseProvider) GetImageServer(name string) (*types.ImageMetadata, error)
- func (p *BaseProvider) GetServer(name string) (types.ServerMetadata, error)
- func (p *BaseProvider) ListImageServers() ([]*types.ImageMetadata, error)
- func (p *BaseProvider) ListServers() ([]types.ServerMetadata, error)
- func (p *BaseProvider) SearchImageServers(query string) ([]*types.ImageMetadata, error)
- func (p *BaseProvider) SearchServers(query string) ([]types.ServerMetadata, error)
- type CachedAPIRegistryProvider
- func (*CachedAPIRegistryProvider) ConvertServerJSON(serverJSON *v0.ServerJSON) (types.ServerMetadata, error)
- func (*CachedAPIRegistryProvider) ConvertServersToMetadataWithCache(servers []*v0.ServerJSON) ([]types.ServerMetadata, error)
- func (p *CachedAPIRegistryProvider) ForceRefresh() error
- func (p *CachedAPIRegistryProvider) GetImageServer(name string) (*types.ImageMetadata, error)
- func (p *CachedAPIRegistryProvider) GetRegistry() (*types.Registry, error)
- func (p *CachedAPIRegistryProvider) GetRemoteServer(name string) (*types.RemoteServerMetadata, error)
- func (p *CachedAPIRegistryProvider) GetServer(name string) (types.ServerMetadata, error)
- func (p *CachedAPIRegistryProvider) GetServerWithContext(ctx context.Context, name string) (types.ServerMetadata, error)
- func (p *CachedAPIRegistryProvider) ListServers() ([]types.ServerMetadata, error)
- func (p *CachedAPIRegistryProvider) SearchServers(query string) ([]types.ServerMetadata, error)
- type Configurator
- type DefaultConfigurator
- type LocalRegistryProvider
- type Provider
- type RemoteRegistryProvider
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ConvertServerJSON ¶ added in v0.6.3
func ConvertServerJSON(serverJSON *v0.ServerJSON) (types.ServerMetadata, error)
ConvertServerJSON converts an MCP Registry API ServerJSON to ToolHive ServerMetadata Uses converters from converters.go (same package) Note: Only handles OCI packages and remote servers, skips npm/pypi by design
func ConvertServersToMetadata ¶ added in v0.6.3
func ConvertServersToMetadata(servers []*v0.ServerJSON) ([]types.ServerMetadata, error)
ConvertServersToMetadata converts a slice of ServerJSON to a slice of ServerMetadata Skips servers that cannot be converted (e.g., incomplete entries) Uses official converters from toolhive-registry package
func ResetDefaultProvider ¶ added in v0.2.4
func ResetDefaultProvider()
ResetDefaultProvider clears the cached default provider instance This allows the provider to be recreated with updated configuration. This function is thread-safe and can be called concurrently. The mutex is required here because we're modifying the sync.Once itself, which is not a thread-safe operation.
func ValidateEmbeddedRegistry ¶ added in v0.2.8
func ValidateEmbeddedRegistry() error
ValidateEmbeddedRegistry validates the embedded registry.json against the schema
func ValidateRegistrySchema ¶ added in v0.2.8
ValidateRegistrySchema validates registry JSON data against the registry schema This validates the old ToolHive registry format (flat structure).
func ValidateUpstreamRegistry ¶ added in v0.6.7
ValidateUpstreamRegistry validates UpstreamRegistry JSON data against the upstream-registry.schema.json This validates the complete registry structure including meta, data, servers, and groups. It uses gojsonschema which automatically handles HTTP/HTTPS schema references.
Types ¶
type APIRegistryProvider ¶ added in v0.6.3
type APIRegistryProvider struct {
*BaseProvider
// contains filtered or unexported fields
}
APIRegistryProvider provides registry data from an MCP Registry API endpoint It queries the API on-demand for each operation, ensuring fresh data.
func NewAPIRegistryProvider ¶ added in v0.6.3
func NewAPIRegistryProvider(apiURL string, allowPrivateIp bool) (*APIRegistryProvider, error)
NewAPIRegistryProvider creates a new API registry provider
func (*APIRegistryProvider) GetImageServer ¶ added in v0.6.3
func (p *APIRegistryProvider) GetImageServer(name string) (*types.ImageMetadata, error)
GetImageServer returns a specific container server by name (overrides BaseProvider) This override is necessary because BaseProvider.GetImageServer calls p.GetServer, which would call BaseProvider.GetServer instead of APIRegistryProvider.GetServer
func (*APIRegistryProvider) GetRegistry ¶ added in v0.6.3
func (p *APIRegistryProvider) GetRegistry() (*types.Registry, error)
GetRegistry returns the registry data by fetching all servers from the API This method queries the API and converts all servers to ToolHive format. Note: This can be slow for large registries as it fetches everything.
func (*APIRegistryProvider) GetServer ¶ added in v0.6.3
func (p *APIRegistryProvider) GetServer(name string) (types.ServerMetadata, error)
GetServer returns a specific server by name (queries API directly)
func (*APIRegistryProvider) ListServers ¶ added in v0.6.3
func (p *APIRegistryProvider) ListServers() ([]types.ServerMetadata, error)
ListServers returns all servers from the API
func (*APIRegistryProvider) SearchServers ¶ added in v0.6.3
func (p *APIRegistryProvider) SearchServers(query string) ([]types.ServerMetadata, error)
SearchServers searches for servers matching the query (queries API directly)
type BaseProvider ¶ added in v0.2.6
type BaseProvider struct {
// GetRegistryFunc is a function that fetches the registry data
// This allows different providers to implement their own data fetching logic
GetRegistryFunc func() (*types.Registry, error)
}
BaseProvider provides common implementation for registry providers
func NewBaseProvider ¶ added in v0.2.6
func NewBaseProvider(getRegistry func() (*types.Registry, error)) *BaseProvider
NewBaseProvider creates a new base provider with the given registry function
func (*BaseProvider) GetImageServer ¶ added in v0.2.6
func (p *BaseProvider) GetImageServer(name string) (*types.ImageMetadata, error)
GetImageServer returns a specific container server by name (legacy method)
func (*BaseProvider) GetServer ¶ added in v0.2.6
func (p *BaseProvider) GetServer(name string) (types.ServerMetadata, error)
GetServer returns a specific server by name (container or remote)
func (*BaseProvider) ListImageServers ¶ added in v0.2.6
func (p *BaseProvider) ListImageServers() ([]*types.ImageMetadata, error)
ListImageServers returns all container servers (legacy method)
func (*BaseProvider) ListServers ¶ added in v0.2.6
func (p *BaseProvider) ListServers() ([]types.ServerMetadata, error)
ListServers returns all servers (both container and remote)
func (*BaseProvider) SearchImageServers ¶ added in v0.2.6
func (p *BaseProvider) SearchImageServers(query string) ([]*types.ImageMetadata, error)
SearchImageServers searches for container servers matching the query (legacy method)
func (*BaseProvider) SearchServers ¶ added in v0.2.6
func (p *BaseProvider) SearchServers(query string) ([]types.ServerMetadata, error)
SearchServers searches for servers matching the query (both container and remote)
type CachedAPIRegistryProvider ¶ added in v0.6.3
type CachedAPIRegistryProvider struct {
*APIRegistryProvider
// contains filtered or unexported fields
}
CachedAPIRegistryProvider wraps APIRegistryProvider with caching support. Provides both in-memory and optional persistent file caching. Works for both CLI (with persistent cache) and API server (memory only).
func NewCachedAPIRegistryProvider ¶ added in v0.6.3
func NewCachedAPIRegistryProvider(apiURL string, allowPrivateIp bool, usePersistent bool) (*CachedAPIRegistryProvider, error)
NewCachedAPIRegistryProvider creates a new cached API registry provider. If usePersistent is true, it will use a file cache in ~/.toolhive/cache/ The validation happens in NewAPIRegistryProvider by actually trying to use the API.
func (*CachedAPIRegistryProvider) ConvertServerJSON ¶ added in v0.6.3
func (*CachedAPIRegistryProvider) ConvertServerJSON(serverJSON *v0.ServerJSON) (types.ServerMetadata, error)
ConvertServerJSON wraps ConvertServerJSON for cached provider
func (*CachedAPIRegistryProvider) ConvertServersToMetadataWithCache ¶ added in v0.6.3
func (*CachedAPIRegistryProvider) ConvertServersToMetadataWithCache(servers []*v0.ServerJSON) ([]types.ServerMetadata, error)
ConvertServersToMetadataWithCache wraps ConvertServersToMetadata for cached provider
func (*CachedAPIRegistryProvider) ForceRefresh ¶ added in v0.6.3
func (p *CachedAPIRegistryProvider) ForceRefresh() error
ForceRefresh forces a cache refresh, ignoring TTL.
func (*CachedAPIRegistryProvider) GetImageServer ¶ added in v0.6.3
func (p *CachedAPIRegistryProvider) GetImageServer(name string) (*types.ImageMetadata, error)
GetImageServer returns a specific container server by name (uses cache).
func (*CachedAPIRegistryProvider) GetRegistry ¶ added in v0.6.3
func (p *CachedAPIRegistryProvider) GetRegistry() (*types.Registry, error)
GetRegistry returns the registry data, using cache if valid. Falls back to stale cache if API is unavailable.
func (*CachedAPIRegistryProvider) GetRemoteServer ¶ added in v0.6.3
func (p *CachedAPIRegistryProvider) GetRemoteServer(name string) (*types.RemoteServerMetadata, error)
GetRemoteServer returns a specific remote server by name (uses cache).
func (*CachedAPIRegistryProvider) GetServer ¶ added in v0.6.3
func (p *CachedAPIRegistryProvider) GetServer(name string) (types.ServerMetadata, error)
GetServer returns a specific server by name (overrides base to use cache).
func (*CachedAPIRegistryProvider) GetServerWithContext ¶ added in v0.6.3
func (p *CachedAPIRegistryProvider) GetServerWithContext(ctx context.Context, name string) (types.ServerMetadata, error)
GetServerWithContext returns a specific server by name with context support
func (*CachedAPIRegistryProvider) ListServers ¶ added in v0.6.3
func (p *CachedAPIRegistryProvider) ListServers() ([]types.ServerMetadata, error)
ListServers returns all servers from cache.
func (*CachedAPIRegistryProvider) SearchServers ¶ added in v0.6.3
func (p *CachedAPIRegistryProvider) SearchServers(query string) ([]types.ServerMetadata, error)
SearchServers searches for servers, using cached data.
type Configurator ¶ added in v0.8.3
type Configurator interface {
// SetRegistryFromInput auto-detects the registry type (URL/API/File) and configures it.
// Returns the detected registry type and any error.
// Callers should call registry.ResetDefaultProvider() after this method succeeds.
SetRegistryFromInput(input string, allowPrivateIP bool) (registryType string, err error)
// UnsetRegistry resets the registry configuration to defaults (built-in registry).
// Returns any error that occurred during the operation.
// Callers should call registry.ResetDefaultProvider() after this method succeeds.
UnsetRegistry() error
// GetRegistryInfo returns information about the currently configured registry.
// Returns the registry type (api/url/file/default) and the source (URL or path).
GetRegistryInfo() (registryType, source string)
}
Configurator provides high-level operations for registry configuration management. It encapsulates registry type detection, validation, and persistence.
Note: Callers are responsible for resetting the registry provider cache after configuration changes by calling registry.ResetDefaultProvider(). This avoids circular dependencies between the config and registry packages.
func NewConfigurator ¶ added in v0.8.3
func NewConfigurator() Configurator
NewConfigurator creates a new registry configurator with the default provider.
func NewConfiguratorWithProvider ¶ added in v0.8.3
func NewConfiguratorWithProvider(provider config.Provider) Configurator
NewConfiguratorWithProvider creates a new registry configurator with a custom provider. This is useful for testing.
type DefaultConfigurator ¶ added in v0.8.3
type DefaultConfigurator struct {
// contains filtered or unexported fields
}
DefaultConfigurator is the default implementation of Configurator.
func (*DefaultConfigurator) GetRegistryInfo ¶ added in v0.8.3
func (s *DefaultConfigurator) GetRegistryInfo() (string, string)
GetRegistryInfo returns information about the currently configured registry.
func (*DefaultConfigurator) SetRegistryFromInput ¶ added in v0.8.3
func (s *DefaultConfigurator) SetRegistryFromInput(input string, allowPrivateIP bool) (string, error)
SetRegistryFromInput auto-detects the registry type and configures it.
func (*DefaultConfigurator) UnsetRegistry ¶ added in v0.8.3
func (s *DefaultConfigurator) UnsetRegistry() error
UnsetRegistry resets the registry configuration to defaults.
type LocalRegistryProvider ¶ added in v0.2.2
type LocalRegistryProvider struct {
*BaseProvider
// contains filtered or unexported fields
}
LocalRegistryProvider provides registry data from embedded JSON files or local files
func NewLocalRegistryProvider ¶ added in v0.2.2
func NewLocalRegistryProvider(filePath ...string) *LocalRegistryProvider
NewLocalRegistryProvider creates a new local registry provider If filePath is provided, it will read from that file; otherwise uses embedded data
func (*LocalRegistryProvider) GetRegistry ¶ added in v0.2.2
func (p *LocalRegistryProvider) GetRegistry() (*types.Registry, error)
GetRegistry returns the registry data from file path or embedded data
type Provider ¶ added in v0.0.43
type Provider interface {
// GetRegistry returns the complete registry data
GetRegistry() (*types.Registry, error)
// GetServer returns a specific server by name (container or remote)
GetServer(name string) (types.ServerMetadata, error)
// SearchServers searches for servers matching the query (both container and remote)
SearchServers(query string) ([]types.ServerMetadata, error)
// ListServers returns all available servers (both container and remote)
ListServers() ([]types.ServerMetadata, error)
// Legacy methods for backward compatibility
// GetImageServer returns a specific container server by name
GetImageServer(name string) (*types.ImageMetadata, error)
// SearchImageServers searches for container servers matching the query
SearchImageServers(query string) ([]*types.ImageMetadata, error)
// ListImageServers returns all available container servers
ListImageServers() ([]*types.ImageMetadata, error)
}
Provider defines the interface for registry storage implementations
func GetDefaultProvider ¶ added in v0.0.43
GetDefaultProvider returns the default registry provider instance This maintains backward compatibility with the existing singleton pattern
func GetDefaultProviderWithConfig ¶ added in v0.2.16
GetDefaultProviderWithConfig returns a registry provider using the given config provider This allows tests to inject their own config provider
type RemoteRegistryProvider ¶ added in v0.0.43
type RemoteRegistryProvider struct {
*BaseProvider
// contains filtered or unexported fields
}
RemoteRegistryProvider provides registry data from a remote HTTP endpoint
func NewRemoteRegistryProvider ¶ added in v0.0.43
func NewRemoteRegistryProvider(registryURL string, allowPrivateIp bool) (*RemoteRegistryProvider, error)
NewRemoteRegistryProvider creates a new remote registry provider. Validates the registry is reachable before returning with a 5-second timeout.
func (*RemoteRegistryProvider) GetRegistry ¶ added in v0.0.43
func (p *RemoteRegistryProvider) GetRegistry() (*types.Registry, error)
GetRegistry returns the remote registry data
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package api provides client functionality for interacting with MCP Registry API endpoints
|
Package api provides client functionality for interacting with MCP Registry API endpoints |
|
Package converters provides bidirectional conversion between toolhive registry formats and the upstream MCP (Model Context Protocol) ServerJSON format.
|
Package converters provides bidirectional conversion between toolhive registry formats and the upstream MCP (Model Context Protocol) ServerJSON format. |
|
Package mocks is a generated GoMock package.
|
Package mocks is a generated GoMock package. |
|
Package registry contains the core type definitions for the MCP registry system.
|
Package registry contains the core type definitions for the MCP registry system. |