@@ -21,16 +21,19 @@ import { getToolsFromOpenApi } from 'openapi-mcp-generator';
2121This function extracts an array of tools from an OpenAPI specification.
2222
2323** Parameters:**
24+
2425- ` specPathOrUrl ` : Path to a local OpenAPI spec file or URL to a remote spec
2526- ` options ` : (Optional) Configuration options
2627
2728** Options:**
29+
2830- ` baseUrl ` : Override the base URL in the OpenAPI spec
2931- ` dereference ` : Whether to resolve $refs (default: false)
3032- ` excludeOperationIds ` : Array of operation IDs to exclude from the results
3133- ` filterFn ` : Custom function to filter tools (receives tool, returns boolean)
3234
3335** Returns:**
36+
3437- Promise that resolves to an array of McpToolDefinition objects
3538
3639** Example:**
@@ -42,12 +45,15 @@ import { getToolsFromOpenApi } from 'openapi-mcp-generator';
4245const tools = await getToolsFromOpenApi (' ./petstore.json' );
4346
4447// With options
45- const filteredTools = await getToolsFromOpenApi (' https://petstore3.swagger.io/api/v3/openapi.json' , {
46- baseUrl: ' https://petstore3.swagger.io/api/v3' ,
47- dereference: true ,
48- excludeOperationIds: [' addPet' , ' updatePet' ],
49- filterFn : (tool ) => tool .method .toLowerCase () === ' get'
50- });
48+ const filteredTools = await getToolsFromOpenApi (
49+ ' https://petstore3.swagger.io/api/v3/openapi.json' ,
50+ {
51+ baseUrl: ' https://petstore3.swagger.io/api/v3' ,
52+ dereference: true ,
53+ excludeOperationIds: [' addPet' , ' updatePet' ],
54+ filterFn : (tool ) => tool .method .toLowerCase () === ' get' ,
55+ }
56+ );
5157
5258// Process the results
5359for (const tool of filteredTools ) {
@@ -66,34 +72,34 @@ Each tool definition (`McpToolDefinition`) has the following properties:
6672interface McpToolDefinition {
6773 /** Name of the tool, must be unique */
6874 name: string ;
69-
75+
7076 /** Human-readable description of the tool */
7177 description: string ;
72-
78+
7379 /** JSON Schema that defines the input parameters */
7480 inputSchema: JSONSchema7 | boolean ;
75-
81+
7682 /** HTTP method for the operation (get, post, etc.) */
7783 method: string ;
78-
84+
7985 /** URL path template with parameter placeholders */
8086 pathTemplate: string ;
81-
87+
8288 /** OpenAPI parameter objects for this operation */
8389 parameters: OpenAPIV3 .ParameterObject [];
84-
90+
8591 /** Parameter names and locations for execution */
8692 executionParameters: { name: string ; in: string }[];
87-
93+
8894 /** Content type for request body, if applicable */
8995 requestBodyContentType? : string ;
90-
96+
9197 /** Security requirements for this operation */
9298 securityRequirements: OpenAPIV3 .SecurityRequirementObject [];
93-
99+
94100 /** Original operation ID from the OpenAPI spec */
95101 operationId: string ;
96-
102+
97103 /** Base URL for the API (if available) */
98104 baseUrl? : string ;
99105}
@@ -105,23 +111,23 @@ interface McpToolDefinition {
105111
106112``` typescript
107113const getTools = await getToolsFromOpenApi (specUrl , {
108- filterFn : (tool ) => tool .method .toLowerCase () === ' get'
114+ filterFn : (tool ) => tool .method .toLowerCase () === ' get' ,
109115});
110116```
111117
112118### Filter by Security Requirements
113119
114120``` typescript
115121const secureTools = await getToolsFromOpenApi (specUrl , {
116- filterFn : (tool ) => tool .securityRequirements .length > 0
122+ filterFn : (tool ) => tool .securityRequirements .length > 0 ,
117123});
118124```
119125
120126### Filter by Path Pattern
121127
122128``` typescript
123129const userTools = await getToolsFromOpenApi (specUrl , {
124- filterFn : (tool ) => tool .pathTemplate .includes (' /user' )
130+ filterFn : (tool ) => tool .pathTemplate .includes (' /user' ),
125131});
126132```
127133
@@ -130,8 +136,6 @@ const userTools = await getToolsFromOpenApi(specUrl, {
130136``` typescript
131137const safeUserTools = await getToolsFromOpenApi (specUrl , {
132138 excludeOperationIds: [' deleteUser' , ' updateUser' ],
133- filterFn : (tool ) =>
134- tool .pathTemplate .includes (' /user' ) &&
135- tool .method .toLowerCase () === ' get'
139+ filterFn : (tool ) => tool .pathTemplate .includes (' /user' ) && tool .method .toLowerCase () === ' get' ,
136140});
137- ```
141+ ```
0 commit comments