@@ -24,6 +24,7 @@ type APIRegistryProvider struct {
2424 allowPrivateIp bool
2525 client api.Client
2626 tokenSource auth.TokenSource
27+ skillsClient api.SkillsClient
2728}
2829
2930// NewAPIRegistryProvider creates a new API registry provider.
@@ -35,11 +36,15 @@ func NewAPIRegistryProvider(apiURL string, allowPrivateIp bool, tokenSource auth
3536 return nil , fmt .Errorf ("failed to create API client: %w" , err )
3637 }
3738
39+ // Create skills client (best-effort — skills API may not be available)
40+ skillsClient , _ := api .NewSkillsClient (apiURL , allowPrivateIp , tokenSource )
41+
3842 p := & APIRegistryProvider {
3943 apiURL : apiURL ,
4044 allowPrivateIp : allowPrivateIp ,
4145 client : client ,
4246 tokenSource : tokenSource ,
47+ skillsClient : skillsClient ,
4348 }
4449
4550 // Initialize the base provider with the GetRegistry function
@@ -173,6 +178,36 @@ func (p *APIRegistryProvider) ListServers() ([]types.ServerMetadata, error) {
173178 return ConvertServersToMetadata (servers )
174179}
175180
181+ // GetSkill returns a specific skill by namespace and name from the API.
182+ func (p * APIRegistryProvider ) GetSkill (namespace , name string ) (* types.Skill , error ) {
183+ if p .skillsClient == nil {
184+ return nil , nil
185+ }
186+ ctx , cancel := context .WithTimeout (context .Background (), 10 * time .Second )
187+ defer cancel ()
188+ return p .skillsClient .GetSkill (ctx , namespace , name )
189+ }
190+
191+ // SearchSkills searches for skills matching the query via the API.
192+ func (p * APIRegistryProvider ) SearchSkills (query string ) ([]types.Skill , error ) {
193+ if p .skillsClient == nil {
194+ return nil , nil
195+ }
196+ ctx , cancel := context .WithTimeout (context .Background (), 10 * time .Second )
197+ defer cancel ()
198+ result , err := p .skillsClient .SearchSkills (ctx , query )
199+ if err != nil {
200+ return nil , err
201+ }
202+ skills := make ([]types.Skill , 0 , len (result .Skills ))
203+ for _ , s := range result .Skills {
204+ if s != nil {
205+ skills = append (skills , * s )
206+ }
207+ }
208+ return skills , nil
209+ }
210+
176211// ConvertServerJSON converts an MCP Registry API ServerJSON to ToolHive ServerMetadata
177212// Uses converters from converters.go (same package)
178213// Note: Only handles OCI packages and remote servers, skips npm/pypi by design
0 commit comments