Skip to main content
Glama
gulbaki

Swagger/OpenAPI MCP Server

by gulbaki

load_api

Loads OpenAPI/Swagger specifications into the MCP server by providing an API identifier and source URL or file path, enabling exploration and interaction with API endpoints.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
apiIdYesUnique identifier for this API
sourceYesURL or file path to the OpenAPI/Swagger specification

Implementation Reference

  • The handler function that loads and parses the OpenAPI/Swagger specification from the provided source URL or path, caches it using SwaggerParser, calculates paths and endpoints count, and returns a success or error message.
    async ({ apiId, source }) => { try { console.error(`Loading API from: ${source}`); const parser = new SwaggerParser(); const spec = await parser.dereference(source) as OpenAPIV3.Document; this.apis.set(apiId, { spec, parser }); const pathCount = Object.keys(spec.paths || {}).length; const endpointCount = Object.values(spec.paths || {}).reduce((count, pathItem) => { if (!pathItem) return count; return count + ['get', 'post', 'put', 'delete', 'patch', 'head', 'options', 'trace'] .filter(method => (pathItem as any)[method]).length; }, 0); return { content: [{ type: "text", text: `Successfully loaded API '${spec.info?.title || apiId}' (v${spec.info?.version || 'unknown'}) with ${pathCount} paths and ${endpointCount} endpoints.` }] }; } catch (error) { return { content: [{ type: "text", text: `Failed to load API: ${error instanceof Error ? error.message : String(error)}` }], isError: true }; } }
  • Zod input schema defining the required parameters: apiId (string) and source (string).
    { apiId: z.string().describe("Unique identifier for this API"), source: z.string().describe("URL or file path to the OpenAPI/Swagger specification") },
  • src/index.ts:193-231 (registration)
    Registration of the load_api tool on the MCP server, specifying the name, input schema, and handler function.
    this.server.tool( "load_api", { apiId: z.string().describe("Unique identifier for this API"), source: z.string().describe("URL or file path to the OpenAPI/Swagger specification") }, async ({ apiId, source }) => { try { console.error(`Loading API from: ${source}`); const parser = new SwaggerParser(); const spec = await parser.dereference(source) as OpenAPIV3.Document; this.apis.set(apiId, { spec, parser }); const pathCount = Object.keys(spec.paths || {}).length; const endpointCount = Object.values(spec.paths || {}).reduce((count, pathItem) => { if (!pathItem) return count; return count + ['get', 'post', 'put', 'delete', 'patch', 'head', 'options', 'trace'] .filter(method => (pathItem as any)[method]).length; }, 0); return { content: [{ type: "text", text: `Successfully loaded API '${spec.info?.title || apiId}' (v${spec.info?.version || 'unknown'}) with ${pathCount} paths and ${endpointCount} endpoints.` }] }; } catch (error) { return { content: [{ type: "text", text: `Failed to load API: ${error instanceof Error ? error.message : String(error)}` }], isError: true }; } } );

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/gulbaki/swagger-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server