mcp: add syntax and scheme validation to AddResourceTemplate (#253)
Add template validation and scheme check in `AddResourceTemplate`.
This commit is contained in:
parent
46ba813860
commit
732b97fdaf
1 changed files with 50 additions and 1 deletions
|
|
@ -22,6 +22,7 @@ import (
|
|||
"github.com/modelcontextprotocol/go-sdk/internal/jsonrpc2"
|
||||
"github.com/modelcontextprotocol/go-sdk/internal/util"
|
||||
"github.com/modelcontextprotocol/go-sdk/jsonrpc"
|
||||
"github.com/yosida95/uritemplate/v3"
|
||||
)
|
||||
|
||||
const DefaultPageSize = 1000
|
||||
|
|
@ -229,7 +230,19 @@ func (s *Server) RemoveResources(uris ...string) {
|
|||
func (s *Server) AddResourceTemplate(t *ResourceTemplate, h ResourceHandler) {
|
||||
s.changeAndNotify(notificationResourceListChanged, &ResourceListChangedParams{},
|
||||
func() bool {
|
||||
// TODO: check template validity.
|
||||
// Validate the URI template syntax
|
||||
_, err := uritemplate.New(t.URITemplate)
|
||||
if err != nil {
|
||||
panic(fmt.Errorf("URI template %q is invalid: %w", t.URITemplate, err))
|
||||
}
|
||||
// Ensure the URI template has a valid scheme
|
||||
u, err := url.Parse(t.URITemplate)
|
||||
if err != nil {
|
||||
panic(err) // url.Parse includes the URI in the error
|
||||
}
|
||||
if !u.IsAbs() {
|
||||
panic(fmt.Errorf("URI template %q needs a scheme", t.URITemplate))
|
||||
}
|
||||
s.resourceTemplates.add(&serverResourceTemplate{t, h})
|
||||
return true
|
||||
})
|
||||
|
|
|
|||
Loading…
Reference in a new issue