5
5
"fmt"
6
6
"net/url"
7
7
"slices"
8
+ "sort"
8
9
"strings"
9
10
10
11
"github.com/getkin/kin-openapi/openapi3"
@@ -56,7 +57,18 @@ func getOpenAPITools(t *openapi3.T, defaultHost string) ([]types.Tool, error) {
56
57
tools []types.Tool
57
58
operationNum = 1 // Each tool gets an operation number, beginning with 1
58
59
)
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 ]
60
72
// Handle path-level server override, if one exists
61
73
pathServer := defaultServer
62
74
if pathObj .Servers != nil && len (pathObj .Servers ) > 0 {
@@ -66,8 +78,16 @@ func getOpenAPITools(t *openapi3.T, defaultHost string) ([]types.Tool, error) {
66
78
}
67
79
}
68
80
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 )
69
88
operations:
70
- for method , operation := range pathObj .Operations () {
89
+ for _ , method := range methods {
90
+ operation := operations [method ]
71
91
// Handle operation-level server override, if one exists
72
92
operationServer := pathServer
73
93
if operation .Servers != nil && len (* operation .Servers ) > 0 {
0 commit comments