55 "fmt"
66 "net/url"
77 "slices"
8+ "sort"
89 "strings"
910
1011 "github.com/getkin/kin-openapi/openapi3"
@@ -56,7 +57,18 @@ func getOpenAPITools(t *openapi3.T, defaultHost string) ([]types.Tool, error) {
5657 tools []types.Tool
5758 operationNum = 1 // Each tool gets an operation number, beginning with 1
5859 )
59- for pathString , pathObj := range t .Paths .Map () {
60+
61+ pathMap := t .Paths .Map ()
62+
63+ keys := make ([]string , 0 , len (pathMap ))
64+ for k := range pathMap {
65+ keys = append (keys , k )
66+ }
67+
68+ sort .Strings (keys )
69+
70+ for _ , pathString := range keys {
71+ pathObj := pathMap [pathString ]
6072 // Handle path-level server override, if one exists
6173 pathServer := defaultServer
6274 if pathObj .Servers != nil && len (pathObj .Servers ) > 0 {
@@ -66,8 +78,16 @@ func getOpenAPITools(t *openapi3.T, defaultHost string) ([]types.Tool, error) {
6678 }
6779 }
6880
81+ // Generate a tool for each operation in this path.
82+ operations := pathObj .Operations ()
83+ methods := make ([]string , 0 , len (operations ))
84+ for method := range operations {
85+ methods = append (methods , method )
86+ }
87+ sort .Strings (methods )
6988 operations:
70- for method , operation := range pathObj .Operations () {
89+ for _ , method := range methods {
90+ operation := operations [method ]
7191 // Handle operation-level server override, if one exists
7292 operationServer := pathServer
7393 if operation .Servers != nil && len (* operation .Servers ) > 0 {
0 commit comments