registry

package
v0.9.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 11, 2026 License: MIT Imports: 22 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultRegistryURL  = "https://registry.mcp.io/index.ndjson"
	DefaultSyncInterval = 1 * time.Hour
	CacheStaleThreshold = 24 * time.Hour
)
View Source
const (
	TransportStdio = migrate.TransportStdio
	TransportHTTP  = migrate.TransportHTTP
	TransportSSE   = migrate.TransportSSE
)
View Source
const (
	TrustLow    = "low"
	TrustMedium = "medium"
	TrustHigh   = "high"
)

Variables

This section is empty.

Functions

func CalculateTrustScore added in v0.8.0

func CalculateTrustScore(entry RegistryFeedEntry) int

func FormatInt added in v0.8.0

func FormatInt(v int) string

FormatInt renders v as a decimal string, substituting "-" only when v is negative. Zero is a legitimate signal (e.g. zero open issues) and is preserved.

func FormatInt64 added in v0.8.0

func FormatInt64(v int64) string

FormatInt64 mirrors FormatInt for int64.

func FormatLastRelease added in v0.8.0

func FormatLastRelease(v string) string

FormatLastRelease renders a registry last-release string. Empty strings and unparseable dates are both rendered as "-" so the search column does not conflate "missing" with "garbage". Parseable dates are returned verbatim so consumers can apply their own locale formatting later.

func FormatString added in v0.8.0

func FormatString(v string) string

FormatString renders v as-is when non-empty, otherwise "-" to signal unavailable data. Used for columns where empty is the natural absence.

func FormatTrustLabel added in v0.8.0

func FormatTrustLabel(score int) string

func FormatWarning added in v0.8.0

func FormatWarning(sid string, score int) string

func IsLowTrust added in v0.8.0

func IsLowTrust(score int) bool

func LeanProxyDir added in v0.8.0

func LeanProxyDir() (string, error)

func TrustLevel added in v0.8.0

func TrustLevel(score int) string

Types

type DiscoverySignature added in v0.2.0

type DiscoverySignature struct {
	Name        string `json:"name"`
	Description string `json:"description"`
}

func NewDiscoverySignature added in v0.2.0

func NewDiscoverySignature(name, description string, fullSchema json.RawMessage) (*DiscoverySignature, error)

type EventType

type EventType int
const (
	EventRegistered EventType = iota
	EventUnregistered
	EventHealthChanged
)

type FeedFetcher added in v0.8.0

type FeedFetcher struct {
	// contains filtered or unexported fields
}

func NewFeedFetcher added in v0.8.0

func NewFeedFetcher(logger *slog.Logger, cacheDir string) *FeedFetcher

func (*FeedFetcher) CacheAge added in v0.8.0

func (f *FeedFetcher) CacheAge() (time.Duration, error)

func (*FeedFetcher) CacheStaleInfo added in v0.8.0

func (f *FeedFetcher) CacheStaleInfo() string

func (*FeedFetcher) IndexPath added in v0.8.0

func (f *FeedFetcher) IndexPath() string

func (*FeedFetcher) LoadCache added in v0.8.0

func (f *FeedFetcher) LoadCache() (*FeedIndex, error)

func (*FeedFetcher) OnSync added in v0.8.0

func (f *FeedFetcher) OnSync(fn func(entries []RegistryFeedEntry))

func (*FeedFetcher) RegistryDir added in v0.8.0

func (f *FeedFetcher) RegistryDir() string

func (*FeedFetcher) StartPeriodicRefresh added in v0.8.0

func (f *FeedFetcher) StartPeriodicRefresh(ctx context.Context)

func (*FeedFetcher) Sync added in v0.8.0

func (f *FeedFetcher) Sync(ctx context.Context) error

func (*FeedFetcher) WaitRefreshDone added in v0.8.0

func (f *FeedFetcher) WaitRefreshDone()

func (*FeedFetcher) WithHTTPClient added in v0.8.0

func (f *FeedFetcher) WithHTTPClient(c *http.Client) *FeedFetcher

func (*FeedFetcher) WithInterval added in v0.8.0

func (f *FeedFetcher) WithInterval(d time.Duration) *FeedFetcher

func (*FeedFetcher) WithURL added in v0.8.0

func (f *FeedFetcher) WithURL(url string) *FeedFetcher

type FeedIndex added in v0.8.0

type FeedIndex struct {
	SyncedAt time.Time           `json:"synced_at"`
	Entries  []RegistryFeedEntry `json:"entries"`
}

type HealthStatus

type HealthStatus string
const (
	HealthUnknown   HealthStatus = "unknown"
	HealthHealthy   HealthStatus = "healthy"
	HealthUnhealthy HealthStatus = "unhealthy"
)

type LazySchemaCache added in v0.7.0

type LazySchemaCache struct {
	// contains filtered or unexported fields
}

func NewLazySchemaCache added in v0.7.0

func NewLazySchemaCache(ttl time.Duration) *LazySchemaCache

func (*LazySchemaCache) CacheWithTTL added in v0.7.0

func (c *LazySchemaCache) CacheWithTTL(toolName string, schema ToolSchema, ttl time.Duration)

func (*LazySchemaCache) Clear added in v0.7.0

func (c *LazySchemaCache) Clear()

func (*LazySchemaCache) GetFullSchema added in v0.7.0

func (c *LazySchemaCache) GetFullSchema(toolName string) (ToolSchema, bool)

func (*LazySchemaCache) GetStub added in v0.7.0

func (c *LazySchemaCache) GetStub(toolName string) (ToolStub, bool)

func (*LazySchemaCache) Invalidate added in v0.7.0

func (c *LazySchemaCache) Invalidate(toolName string)

func (*LazySchemaCache) SetFullSchema added in v0.7.0

func (c *LazySchemaCache) SetFullSchema(toolName string, schema ToolSchema)

func (*LazySchemaCache) Stats added in v0.7.0

func (c *LazySchemaCache) Stats() (cached int, expired int)

type LifecycleManager

type LifecycleManager interface {
	Start(ctx context.Context, config ServerConfig) (ServerHandle, error)
	Stop(ctx context.Context, id string) error
	Kill(ctx context.Context, id string) error
	Restart(ctx context.Context, id string) error
	Status(ctx context.Context, id string) (ServerStatus, error)
	List(ctx context.Context) ([]ServerStatus, error)
	Close()
}

func NewLifecycleManager

func NewLifecycleManager(logger *slog.Logger) LifecycleManager

type MatchCriteria

type MatchCriteria struct {
	Capabilities []string
	Transport    TransportType
	MinHealth    HealthStatus
	MaxLoad      float64
}

type Namespace added in v0.7.0

type Namespace struct {
	Name           string                `yaml:"name"`
	Description    string                `yaml:"description,omitempty"`
	Servers        []string              `yaml:"servers"`
	Children       map[string]*Namespace `yaml:"children,omitempty"`
	AllowedClients []string              `yaml:"allowed_clients,omitempty"`
}

type NamespaceConfig added in v0.7.0

type NamespaceConfig struct {
	Namespaces map[string]*Namespace `yaml:"namespaces,omitempty"`
}

type NamespaceManager added in v0.7.0

type NamespaceManager interface {
	Load(ctx context.Context, r io.Reader) error
	GetNamespace(ctx context.Context, name string) (*Namespace, error)
	GetToolsForNamespace(ctx context.Context, ns string) ([]string, error)
	CheckAccess(ctx context.Context, ns, clientID string) error
	GetAllNamespaces(ctx context.Context) []*Namespace
	GetServerNamespace(ctx context.Context, serverID string) (string, error)
	GetChildNamespaces(ctx context.Context, parentName string) ([]string, error)
	ListToolsInNamespace(ctx context.Context, nsName string) ([]ToolEntry, error)
}

func NewNamespaceManager added in v0.7.0

func NewNamespaceManager(logger *slog.Logger) NamespaceManager

type Registry

type Registry interface {
	Register(ctx context.Context, entry ServerEntry) error
	Unregister(ctx context.Context, id string) error
	Update(ctx context.Context, entry ServerEntry) error

	Get(ctx context.Context, id string) (*ServerEntry, error)
	List(ctx context.Context) ([]*ServerEntry, error)
	FindByCapability(ctx context.Context, capability string) ([]*ServerEntry, error)
	FindByTransport(ctx context.Context, transport TransportType) ([]*ServerEntry, error)
	FindBest(ctx context.Context, criteria MatchCriteria) (*ServerEntry, error)

	UpdateHealth(ctx context.Context, id string, health HealthStatus) error
	ListUnhealthy(ctx context.Context) ([]*ServerEntry, error)

	Save(ctx context.Context) error
	Load(ctx context.Context) error

	Subscribe(ch chan<- RegistryEvent) func()
}

func NewRegistry

func NewRegistry(logger *slog.Logger, persistPath string) Registry

type RegistryConfig added in v0.2.0

type RegistryConfig struct {
	CompactByDefault  bool `yaml:"compact_by_default"`
	MaxSignatureBytes int  `yaml:"max_signature_bytes"`
}

func LoadRegistryConfig added in v0.2.0

func LoadRegistryConfig(r io.Reader) (*RegistryConfig, error)

func (*RegistryConfig) Validate added in v0.2.0

func (c *RegistryConfig) Validate() error

type RegistryEvent

type RegistryEvent struct {
	Type    EventType
	Server  *ServerEntry
	Details string
}

type RegistryFeedEntry added in v0.8.0

type RegistryFeedEntry struct {
	Name          string            `json:"name"`
	Description   string            `json:"description,omitempty"`
	URL           string            `json:"url,omitempty"`
	Command       string            `json:"command,omitempty"`
	Args          []string          `json:"args,omitempty"`
	Env           map[string]string `json:"env,omitempty"`
	Transport     string            `json:"transport,omitempty"`
	TrustScore    int               `json:"trust_score,omitempty"`
	LastRelease   string            `json:"last_release,omitempty"`
	OpenIssues    int               `json:"open_issues,omitempty"`
	Downloads     int               `json:"downloads,omitempty"`
	TokensPerTurn int64             `json:"tokens_per_turn,omitempty"`
	Categories    []string          `json:"categories,omitempty"`
}

type SchemaCache added in v0.2.0

type SchemaCache interface {
	Get(key string) (json.RawMessage, bool)
	Set(key string, schema json.RawMessage)
	Delete(key string)
	Clear()
}

func NewLRUSchemaCache added in v0.2.0

func NewLRUSchemaCache(maxSize int, maxAge time.Duration, onEvict func(key string, schema json.RawMessage)) SchemaCache

type SchemaCacheManager added in v0.2.0

type SchemaCacheManager struct {
	// contains filtered or unexported fields
}

func NewSchemaCacheManager added in v0.2.0

func NewSchemaCacheManager(serverName string, maxSize int, maxAge time.Duration, logger interface{ Debug(msg string, args ...any) }) *SchemaCacheManager

func (*SchemaCacheManager) GetFullSchema added in v0.2.0

func (m *SchemaCacheManager) GetFullSchema(ctx context.Context, toolName string) (json.RawMessage, error)

func (*SchemaCacheManager) Invalidate added in v0.2.0

func (m *SchemaCacheManager) Invalidate(toolName string)

func (*SchemaCacheManager) InvalidateAll added in v0.2.0

func (m *SchemaCacheManager) InvalidateAll()

func (*SchemaCacheManager) SetFullSchema added in v0.2.0

func (m *SchemaCacheManager) SetFullSchema(ctx context.Context, toolName string, schema json.RawMessage)

type ServerConfig

type ServerConfig struct {
	ID      string
	Name    string
	Command []string
	Env     []string
	Dir     string
	Port    int
}

type ServerEntry

type ServerEntry struct {
	ID             string
	Config         *ServerConfig
	Address        string
	Transport      TransportType
	Capabilities   []string
	Health         HealthStatus
	Stats          ServerStats
	ComplexityTier string
	RegisteredAt   time.Time
	LastSeenAt     time.Time
}

type ServerHandle

type ServerHandle struct {
	ID     string
	Config ServerConfig
	PID    int
}

type ServerState

type ServerState string
const (
	StateRunning  ServerState = "running"
	StateStopped  ServerState = "stopped"
	StateError    ServerState = "error"
	StateStarting ServerState = "starting"
)

type ServerStats

type ServerStats struct {
	RequestCount int64
	ErrorCount   int64
	AvgLatencyMs float64
	Load         float64
}

type ServerStatus

type ServerStatus struct {
	ID         string
	State      ServerState
	Uptime     time.Duration
	MemoryMB   float64
	CPUPercent float64
	ExitCode   int
	Error      string
}

type Tool added in v0.2.0

type Tool struct {
	Signature  DiscoverySignature `json:"signature"`
	FullSchema json.RawMessage    `json:"full_schema,omitempty"`
	ServerID   string             `json:"server_id"`
}

type ToolEntry

type ToolEntry struct {
	Name      string
	Namespace string
	ServerID  string
}

type ToolEvent

type ToolEvent struct {
	Type     ToolEventType
	ServerID string
	ToolName string
	Tool     ToolEntry
}

type ToolEventType

type ToolEventType int
const (
	ToolEventRegistered ToolEventType = iota
	ToolEventUnregistered
)

type ToolMatch

type ToolMatch struct {
	Tool    ToolEntry
	Score   float64
	MatchOn string
}

type ToolRegistry

type ToolRegistry interface {
	RegisterTool(ctx context.Context, serverID, toolName string) error
	UnregisterTool(ctx context.Context, serverID, toolName string) error
	GetToolServer(ctx context.Context, toolName string) (string, error)
	SearchTools(ctx context.Context, query string) []ToolMatch
	ListAllTools(ctx context.Context) []ToolEntry
	SubscribeTools(ch chan<- ToolEvent) func()
}

func NewToolRegistry

func NewToolRegistry(logger interface{ Debug(msg string, args ...any) }) ToolRegistry

type ToolSchema added in v0.7.0

type ToolSchema struct {
	Name        string          `json:"name"`
	Description string          `json:"description"`
	InputSchema json.RawMessage `json:"inputSchema"`
	ServerID    string          `json:"serverId"`
}

type ToolSchemaRegistry added in v0.2.0

type ToolSchemaRegistry interface {
	RegisterTool(ctx context.Context, tool Tool) error
	UnregisterTool(ctx context.Context, serverID, toolName string) error
	GetDiscoverySignatures() []DiscoverySignature
	GetFullSchema(ctx context.Context, toolName string) (json.RawMessage, error)
	RefreshManifest(ctx context.Context) error
}

func NewToolSchemaRegistry added in v0.2.0

func NewToolSchemaRegistry() ToolSchemaRegistry

type ToolStub added in v0.7.0

type ToolStub struct {
	Name        string `json:"name"`
	Description string `json:"description"`
	Category    string `json:"category,omitempty"`
}

type TransportType

type TransportType = migrate.TransportType

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL