UNPKG

@mcp-apps/api-tools-mcp-server

Version:

MCP server for interacting with APIs and web services

76 lines (74 loc) 4.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.fetchOpenApiSchemaTool = void 0; const zod_1 = require("zod"); const openapi_service_1 = require("../services/openapi-service"); const json_utils_1 = require("../utils/json-utils"); exports.fetchOpenApiSchemaTool = { name: 'fetch_openapi_schema', description: `Fetches and parses an OpenAPI schema from a URL. This tool downloads and parses an OpenAPI schema from the provided URL, extracting key information such as API title, version, and available endpoints. If the exact URL doesn't contain a valid OpenAPI schema, the tool will automatically try common schema endpoints (like "/swagger.json", "/openapi.json", "/api-docs.json") to locate the schema. ## Parameters: - schemaUrl: [Required] URL where the OpenAPI schema is published or the API base URL - authType: [Optional] Authentication method if the schema requires auth: 'bearer', 'basic', 'interactive', or 'none' - authConfig: [Optional] Authentication configuration object (required if authType is not 'none') - token: Bearer token (required for authType='bearer') - username: Username (required for authType='basic') - password: Password (optional for authType='basic') - clientId: Client ID (required for authType='interactive') - tenantId: Tenant ID (optional for authType='interactive', defaults to 'common') ## Example usage: - Public Schema with direct path: fetch_openapi_schema({schemaUrl: "https://petstore.swagger.io/v2/swagger.json"}) - Public Schema with base URL (auto-discovery): fetch_openapi_schema({schemaUrl: "https://petstore.swagger.io"}) - Protected Schema: fetch_openapi_schema({ schemaUrl: "https://api.example.com/swagger.json", authType: "bearer", authConfig: {token: "your-token-here"} }) - Protected API with auto-discovery: fetch_openapi_schema({ schemaUrl: "https://api.example.com", authType: "bearer", authConfig: {token: "your-token-here"} }) `, parameters: { schemaUrl: zod_1.z.string().describe('URL where the OpenAPI schema is published'), authType: zod_1.z.enum(['bearer', 'basic', 'interactive', 'none']).default('none').describe('Authentication method if the schema requires auth'), authConfig: zod_1.z.object({ token: zod_1.z.string().optional().describe('Bearer token for token-based authentication'), username: zod_1.z.string().optional().describe('Username for basic authentication'), password: zod_1.z.string().optional().describe('Password for basic authentication'), // For interactive auth clientId: zod_1.z.string().optional().describe('Client ID for interactive authentication'), tenantId: zod_1.z.string().optional().describe('Tenant ID for interactive authentication (defaults to "common")'), authority: zod_1.z.string().optional().describe('Authority URL for authentication'), scopes: zod_1.z.array(zod_1.z.string()).optional().describe('Scopes required for API access'), redirectUri: zod_1.z.string().optional().describe('Redirect URI for authentication callback') }).optional().describe('Authentication configuration') }, handler: async ({ schemaUrl, authType, authConfig }) => { try { const schema = await openapi_service_1.OpenApiService.fetchSchema(schemaUrl, authType, authConfig); return { content: [{ type: 'text', text: (0, json_utils_1.safeStringify)(schema) }] }; } catch (error) { console.error('Error fetching OpenAPI schema:', error); return { content: [{ type: 'text', text: `Error fetching OpenAPI schema: ${error.message || 'Unknown error'}` }], isError: true }; } } }; //# sourceMappingURL=fetch-openapi-schema.js.map