@@ -16,11 +16,11 @@ import (
1616 "github.com/modelcontextprotocol/registry/internal/model"
1717)
1818
19- // ReadSeedFile reads and parses seed data from either :
19+ // ReadSeedFile reads seed data from various sources :
2020// 1. Local file paths (*.json files)
2121// 2. Direct HTTP URLs to seed.json files
2222// 3. Registry root URLs (automatically appends /v0/servers and paginates)
23- func ReadSeedFile (path string ) ([]model.ServerDetail , error ) {
23+ func ReadSeedFile (ctx context. Context , path string ) ([]model.ServerDetail , error ) {
2424 log .Printf ("Reading seed data from %s" , path )
2525
2626 // Set default seed file path if not provided
@@ -37,14 +37,14 @@ func ReadSeedFile(path string) ([]model.ServerDetail, error) {
3737 // Determine if this is a direct seed file URL or a registry root URL
3838 if strings .HasSuffix (path , ".json" ) || strings .Contains (path , "seed.json" ) {
3939 // Direct seed file URL - read directly
40- fileContent , err := readFromHTTP (path )
40+ fileContent , err := readFromHTTP (ctx , path )
4141 if err != nil {
4242 return nil , fmt .Errorf ("failed to read from HTTP URL: %w" , err )
4343 }
4444 return parseSeedJSON (fileContent )
4545 }
4646 // Registry root URL - paginate through /v0/servers endpoint
47- return readFromRegistry ( path )
47+ return readFromRegistryWithContext ( ctx , path )
4848 }
4949 // Read from local file
5050 fileContent , err := os .ReadFile (path )
@@ -55,12 +55,12 @@ func ReadSeedFile(path string) ([]model.ServerDetail, error) {
5555}
5656
5757// readFromHTTP reads content from an HTTP URL with timeout
58- func readFromHTTP (url string ) ([]byte , error ) {
58+ func readFromHTTP (ctx context. Context , url string ) ([]byte , error ) {
5959 client := & http.Client {
6060 Timeout : 30 * time .Second ,
6161 }
6262
63- req , err := http .NewRequestWithContext (context . Background () , http .MethodGet , url , nil )
63+ req , err := http .NewRequestWithContext (ctx , http .MethodGet , url , nil )
6464 if err != nil {
6565 return nil , fmt .Errorf ("failed to create request: %w" , err )
6666 }
@@ -113,8 +113,8 @@ type Metadata struct {
113113 Total int `json:"total,omitempty"`
114114}
115115
116- // readFromRegistry reads all servers from a registry by paginating through /v0/servers endpoint
117- func readFromRegistry ( registryURL string ) ([]model.ServerDetail , error ) {
116+ // readFromRegistryWithContext reads all servers from a registry by paginating through /v0/servers endpoint
117+ func readFromRegistryWithContext ( ctx context. Context , registryURL string ) ([]model.ServerDetail , error ) {
118118 log .Printf ("Reading from registry: %s" , registryURL )
119119
120120 // Ensure the URL doesn't have a trailing slash
@@ -167,7 +167,11 @@ func readFromRegistry(registryURL string) ([]model.ServerDetail, error) {
167167 }
168168
169169 // Fetch the page
170- resp , err := client .Get (serverURL )
170+ req , err := http .NewRequestWithContext (ctx , http .MethodGet , serverURL , nil )
171+ if err != nil {
172+ return nil , fmt .Errorf ("failed to create request for %s: %w" , serverURL , err )
173+ }
174+ resp , err := client .Do (req )
171175 if err != nil {
172176 return nil , fmt .Errorf ("failed to fetch servers from %s: %w" , serverURL , err )
173177 }
@@ -196,7 +200,7 @@ func readFromRegistry(registryURL string) ([]model.ServerDetail, error) {
196200 // Build URL for server detail
197201 detailURL := registryURL + "/v0/servers/" + server .ID
198202
199- detailReq , err := http .NewRequestWithContext (context . Background () , http .MethodGet , detailURL , nil )
203+ detailReq , err := http .NewRequestWithContext (ctx , http .MethodGet , detailURL , nil )
200204 if err != nil {
201205 log .Printf ("Warning: failed to create request for server %s: %v" , server .ID , err )
202206 // Fall back to basic server information
0 commit comments