{"id":27163931,"url":"https://github.com/zxypro1/openapi-to-mcp-converter","last_synced_at":"2025-06-13T08:07:41.870Z","repository":{"id":284916137,"uuid":"956473188","full_name":"zxypro1/openapi-to-mcp-converter","owner":"zxypro1","description":"A tool for automatically converting OpenAPI into Model Context Protocol (MCP) Server instance","archived":false,"fork":false,"pushed_at":"2025-05-09T03:32:47.000Z","size":84,"stargazers_count":2,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-10T17:07:55.493Z","etag":null,"topics":["javascript","llm","llm-tools","mcp","mcp-server","model-context-protocol","node","nodejs","openapi","openapi-spec","openapi-specification","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zxypro1.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-28T10:08:44.000Z","updated_at":"2025-05-12T08:19:27.000Z","dependencies_parsed_at":"2025-04-26T11:19:52.779Z","dependency_job_id":"565a29bc-7bd6-4fcf-8551-0a7436be72dc","html_url":"https://github.com/zxypro1/openapi-to-mcp-converter","commit_stats":null,"previous_names":["zxypro1/react-openapi-mcp-converter","zxypro1/openapi-mcp-converter","zxypro1/openapi-to-mcp-converter"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zxypro1/openapi-to-mcp-converter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zxypro1%2Fopenapi-to-mcp-converter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zxypro1%2Fopenapi-to-mcp-converter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zxypro1%2Fopenapi-to-mcp-converter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zxypro1%2Fopenapi-to-mcp-converter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zxypro1","download_url":"https://codeload.github.com/zxypro1/openapi-to-mcp-converter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zxypro1%2Fopenapi-to-mcp-converter/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259606974,"owners_count":22883559,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["javascript","llm","llm-tools","mcp","mcp-server","model-context-protocol","node","nodejs","openapi","openapi-spec","openapi-specification","typescript"],"created_at":"2025-04-09T01:52:55.780Z","updated_at":"2025-06-13T08:07:41.852Z","avatar_url":"https://github.com/zxypro1.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenAPI to MCP Server Converter\n\n[![Node.js Version](https://img.shields.io/badge/node-%3E%3D18.x-brightgreen)](https://nodejs.org/)\n[![TypeScript Version](https://img.shields.io/badge/typescript-5.x-blue)](https://www.typescriptlang.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA tool for automatically converting OpenAPI specifications into Model Context Protocol (MCP) server instance\n\n## Features\n\n- 🚀 **Automated Conversion**: Auto-parses OpenAPI 3.0 specifications\n- 🛠 **Type Safety**: TypeScript-based strong type validation\n- 🔄 **Request Proxy**: Automatically handles tool call parameter mapping\n\n## Quick Start\n\n### Prerequisites\n\n- Node.js 18+\n- TypeScript 5.x\n\n### Basic Usage\n\nInstall the package:\n\n```bash\nnpm install openapi-mcp-converter\n```\n\nCreate a server instance:\n\n```typescript\nimport fs from 'fs';\nimport { OpenApiMCPSeverConverter } from '../index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst openApiDoc = JSON.parse(fs.readFileSync(path.join(path.dirname(fileURLToPath(import.meta.url)), 'openapi.json'), 'utf8'));\n\nconst converter = new OpenApiMCPSeverConverter(openApiDoc, { timeout: 100000, security: { apiKey: 'my-api-key' } });\nconst server = converter.getServer();\n```\n\nRun a local stdio MCP server:\n\n```typescript\nasync function runServer() {\n  const transport = new StdioServerTransport();\n  await server.connect(transport);\n  console.log(\"GitHub MCP Server running on stdio\");\n}\n\nrunServer().catch((error) =\u003e {\n  console.error(\"Fatal error in main():\", error);\n  process.exit(1);\n});\n```\n\nRun a local SSE Server:\n\n```typescript\nconst app = express();\nlet transport = null;\n\napp.get(\"/sse\", async (req, res) =\u003e {\n  console.log(\"SSE connection opened\");\n  console.log(\"Request Headers:\", req?.headers);\n  console.log(\"Request Query:\", req?.query);\n  server.onclose = async () =\u003e {\n    await server.close();\n  };\n  transport = new SSEServerTransport(\"/messages\", res);\n  await server.connect(transport);\n  return;\n});\n\napp.post(\"/messages\", async (req, res) =\u003e {\n  const sessionId = req.query.sessionId as string;\n  if (!sessionId) {\n      throw new Error(\"sessionId query parameter is required\");\n  }\n  await transport.handlePostMessage(req, res);\n  return;\n});\n\napp.listen(8080, () =\u003e {\n  console.log('MCP Server running on port 8080');\n});\n```\n\nRun a local Streamable HTTP Server:\n\n```typescript\nconst app = express();\napp.use(express.json());\n\nconst transports: { [sessionId: string]: StreamableHTTPServerTransport } = {};\n\napp.post('/mcp', async (req, res) =\u003e {\n  const sessionId = req.headers['mcp-session-id'] as string | undefined;\n  let transport: StreamableHTTPServerTransport;\n\n  if (sessionId \u0026\u0026 transports[sessionId]) {\n    transport = transports[sessionId];\n  } else if (!sessionId \u0026\u0026 isInitializeRequest(req.body)) {\n    transport = new StreamableHTTPServerTransport({\n      sessionIdGenerator: () =\u003e randomUUID(),\n      onsessioninitialized: (sessionId) =\u003e {\n        transports[sessionId] = transport;\n      }\n    });\n    transport.onclose = () =\u003e {\n      if (transport.sessionId) {\n        delete transports[transport.sessionId];\n      }\n    };\n    await server.connect(transport);\n  } else {\n    res.status(400).json({\n      jsonrpc: '2.0',\n      error: {\n        code: -32000,\n        message: 'Bad Request: No valid session ID provided',\n      },\n      id: null,\n    });\n    return;\n  }\n\n  await transport.handleRequest(req, res, req.body);\n});\n\nconst handleSessionRequest = async (req: express.Request, res: express.Response) =\u003e {\n  const sessionId = req.headers['mcp-session-id'] as string | undefined;\n  if (!sessionId || !transports[sessionId]) {\n    res.status(400).send('Invalid or missing session ID');\n    return;\n  }\n  \n  const transport = transports[sessionId];\n  await transport.handleRequest(req, res);\n};\n\napp.get('/mcp', handleSessionRequest);\n\napp.delete('/mcp', handleSessionRequest);\n\napp.listen(3000);\n```\n\n### Run Examples\n\n```bash\nnpm run test  # Execute sample test cases\n```\n\n## Development Guide\n\n### Project Structure\n\n```\n/openapi-to-mcp\n├── dist/            # Compiled output\n├── src/             # Source code\n│   ├── example/     # Example configurations\n│   └── index.ts     # Core implementation\n├── package.json\n└── tsconfig.json\n```\n\n### Build Commands\n\n```bash\nnpm run build    # Production build\nnpm run watch    # Development mode watch\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzxypro1%2Fopenapi-to-mcp-converter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzxypro1%2Fopenapi-to-mcp-converter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzxypro1%2Fopenapi-to-mcp-converter/lists"}