{"id":30680472,"url":"https://github.com/beshkenadze/openapi-mcp-generator","last_synced_at":"2026-04-07T22:31:17.309Z","repository":{"id":309717429,"uuid":"1037292074","full_name":"beshkenadze/openapi-mcp-generator","owner":"beshkenadze","description":"Transform OpenAPI specifications into Model Context Protocol (MCP) servers. Generate MCP servers with multiple transport options (HTTP/SSE/Stdio) for Claude Desktop and web integration.","archived":false,"fork":false,"pushed_at":"2025-08-13T15:14:36.000Z","size":359,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-24T19:28:29.966Z","etag":null,"topics":["api-generator","bun","claude-desktop","hono","mcp","model-context-protocol","nodejs","openapi","typescript"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/beshkenadze.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-08-13T10:57:58.000Z","updated_at":"2025-08-13T15:14:39.000Z","dependencies_parsed_at":"2025-08-13T13:14:09.220Z","dependency_job_id":"f9ad21c8-bd39-4c79-85da-86bbd1b46534","html_url":"https://github.com/beshkenadze/openapi-mcp-generator","commit_stats":null,"previous_names":["beshkenadze/openapi-mcp-generator"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/beshkenadze/openapi-mcp-generator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beshkenadze%2Fopenapi-mcp-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beshkenadze%2Fopenapi-mcp-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beshkenadze%2Fopenapi-mcp-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beshkenadze%2Fopenapi-mcp-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/beshkenadze","download_url":"https://codeload.github.com/beshkenadze/openapi-mcp-generator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beshkenadze%2Fopenapi-mcp-generator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31532165,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"ssl_error","status_checked_at":"2026-04-07T16:28:06.951Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["api-generator","bun","claude-desktop","hono","mcp","model-context-protocol","nodejs","openapi","typescript"],"created_at":"2025-09-01T16:04:26.019Z","updated_at":"2026-04-07T22:31:17.292Z","avatar_url":"https://github.com/beshkenadze.png","language":"TypeScript","readme":"# OpenAPI → MCP Generator (Monorepo)\n\n[![Tests](https://github.com/beshkenadze/openapi-mcp-generator/workflows/Tests/badge.svg)](https://github.com/beshkenadze/openapi-mcp-generator/actions)\n[![CI](https://github.com/beshkenadze/openapi-mcp-generator/workflows/CI/badge.svg)](https://github.com/beshkenadze/openapi-mcp-generator/actions)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n\nTransform your OpenAPI specifications into powerful Model Context Protocol (MCP) servers that can be used with Claude Desktop, IDEs, and other MCP-compatible clients. This monorepo provides both a user-friendly CLI and a programmatic library for seamless integration.\n\n## Requirements\n\n- Bun 1.2+ installed locally: https://bun.sh\n- Node.js 18+ (runtime compatibility for generated projects)\n\n## Monorepo Structure\n\n- `packages/core`: Core generator library (`@aigentools/mcpgen-core`)\n- `packages/cli`: CLI (`@aigentools/mcpgen`, bin: `mcpgen`)\n- `packages/tsconfig`: Shared TS config\n- `turbo.json`: Turborepo pipeline\n- `biome.json`: Biome config\n- `tsconfig.json`: Root TS config\n\n## Installation\n\n```bash\n# Clone and setup\ngit clone https://github.com/beshkenadze/openapi-mcp-generator.git\ncd openapi-mcp-generator\nbun install\nbun run build\n```\n\n### Alternative: Using Task (Optional)\nIf you have [Task](https://taskfile.dev/) installed, you can use the provided shortcuts:\n\n```bash\ntask install    # Same as: bun install\ntask build      # Same as: bun run build  \ntask typecheck  # Same as: bun run typecheck\ntask test       # Same as: bun run test\ntask lint       # Same as: bun run lint\n```\n\n## Quick Start\n\nChoose your preferred method to generate MCP servers from OpenAPI specifications:\n\n### 🚀 Method 1: Using the CLI (Recommended for most users)\n\n#### Interactive Mode (Easiest)\n```bash\n# After installation, run in interactive mode\ncd packages/cli\nbun run dev\n\n# Or using Task shortcut:\ntask gen:interactive\n\n# The CLI will prompt you for:\n# - Path to your OpenAPI spec file\n# - Server name (auto-suggested from spec)  \n# - Output directory\n# - Runtime preference (Bun/Node)\n```\n\n#### Command Line Mode (For automation)\n```bash\n# Generate from a local OpenAPI spec\ncd packages/cli\nbun run dev --input ./examples/petstore.yaml --out ./servers/petstore --name petstore-mcp --runtime bun --force\n\n# Using Taskfile shortcuts for Petstore example:\ntask gen:petstore           # Generate Petstore MCP server\ntask install:petstore       # Install dependencies in generated server\ntask prism:inspect:cli      # Generate + test with Prism mock server + MCP Inspector\n\n# Generate from URL\nbun run dev --input https://petstore.swagger.io/v2/swagger.json --out ./servers/petstore --name petstore-mcp\n\n# Using configuration file\necho \"openapi: ./api-spec.yaml\nname: my-awesome-api-mcp\" \u003e config.yaml\n\nbun run dev --config config.yaml --out ./my-server\n```\n\n### 🔧 Method 2: Using the Library (For programmatic integration)\n\nInstall in your project:\n```bash\nbun add @aigentools/mcpgen-core  # or npm install\n```\n\nGenerate servers programmatically:\n```typescript\nimport { generateServerFromOpenAPI } from \"@aigentools/mcpgen-core\";\n\n// Simple usage\nawait generateServerFromOpenAPI(\n  \"./petstore.yaml\",                    // OpenAPI spec path\n  \"./servers/petstore\",                 // Output directory  \n  \"petstore-mcp\"                       // Server name\n);\n\n// Advanced usage with options\nconst result = await generateServerFromOpenAPI(\n  \"./api-spec.yaml\",\n  \"./custom-server\",\n  \"my-api-mcp\",\n  {\n    runtime: \"bun\",          // or \"node\"\n    force: true,             // Overwrite existing files\n    debug: true,             // Enable debug logging\n    skipFormatting: false    // Format with Biome\n  }\n);\n\nconsole.log(`Generated server: ${result.name}`);\nconsole.log(`Location: ${result.outDir}`);\nconsole.log(`Operations: ${result.operations.length}`);\n```\n\n### 📁 Generated Server Structure\n\nThe structure depends on the chosen runtime:\n\n#### Standard Runtime (Bun/Node)\n```\nmy-server/\n├── mcp-server/\n│   └── index.ts           # Complete MCP server (single file)\n├── package.json           # Dependencies and scripts  \n├── .env.example          # Environment variables template\n└── README.md             # Usage instructions\n```\n\n#### Hono Runtime (Web Server)\n```\nmy-server/\n├── src/\n│   └── server.ts          # Hono web server with multiple transports\n├── package.json           # Dependencies and scripts\n├── Dockerfile            # Docker deployment support\n├── biome.json           # Code formatting configuration\n└── README.md            # Usage and transport endpoint documentation\n```\n\n### ▶️ Running Your Generated MCP Server\n\n#### Standard Runtime (Bun/Node)\n```bash\n# Navigate to generated server\ncd ./servers/petstore\n\n# Install dependencies (if needed)\nbun install\n\n# Start the server\nbun run start\n# or directly:\nbun --bun mcp-server/index.ts\n\n# The server runs via stdio and is ready for MCP clients!\n```\n\n#### Hono Runtime (Web Server with Multiple Transports)\n```bash\n# Navigate to generated server\ncd ./servers/petstore\n\n# Install dependencies\nbun install\n\n# Development server with hot reload\nbun run dev\n\n# Production server\nbun run build \u0026\u0026 bun run start\n\n# The server provides multiple transport options:\n# 🌐 HTTP transport: http://localhost:3000/mcp\n# 📡 SSE transport: http://localhost:3000/mcp/sse  \n# 🔗 Stdio transport: ws://localhost:3000/mcp/stdio\n# 🏥 Health check: http://localhost:3000/health\n```\n\n### 🔌 Connecting to Claude Desktop\n\nThe connection method depends on the runtime used:\n\n#### Standard Runtime (Stdio Transport)\nAdd to your Claude Desktop MCP configuration (`claude_desktop_config.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"petstore\": {\n      \"command\": \"bun\",\n      \"args\": [\"--bun\", \"/path/to/your/server/mcp-server/index.ts\"],\n      \"env\": {\n        \"API_BASE_URL\": \"https://petstore.swagger.io/v2\"\n      }\n    }\n  }\n}\n```\n\n#### Hono Runtime (HTTP Transport)\nFirst, start your Hono server, then configure Claude Desktop to use HTTP transport:\n\n```json\n{\n  \"mcpServers\": {\n    \"petstore\": {\n      \"transport\": {\n        \"type\": \"http\",\n        \"url\": \"http://localhost:3000/mcp\"\n      },\n      \"env\": {\n        \"API_BASE_URL\": \"https://petstore.swagger.io/v2\"\n      }\n    }\n  }\n}\n```\n\n#### Alternative: SSE Transport (Hono)\nFor streaming capabilities, use Server-Sent Events transport:\n\n```json\n{\n  \"mcpServers\": {\n    \"petstore\": {\n      \"transport\": {\n        \"type\": \"sse\",\n        \"url\": \"http://localhost:3000/mcp/sse\"\n      },\n      \"env\": {\n        \"API_BASE_URL\": \"https://petstore.swagger.io/v2\"\n      }\n    }\n  }\n}\n```\n\n## 📚 Complete Examples\n\n### Example 1: Petstore API (Standard Runtime)\n\n```bash\n# Method 1: Using Taskfile (easiest for Petstore)\ntask gen:petstore           # Generates the Petstore MCP server\ntask install:petstore       # Installs dependencies\ntask prism:inspect:cli      # Tests with Prism mock server + MCP Inspector\n\n# Method 2: Using CLI interactively  \ncd packages/cli\nbun run dev\n# When prompted:\n# Input file: https://petstore.swagger.io/v2/swagger.json  \n# Server name: petstore-api (auto-suggested)\n# Output dir: ./servers/petstore-api (auto-suggested)\n# Runtime: bun (default)\n```\n\nThis creates an MCP server with tools like:\n- `getPetById` - Find pet by ID\n- `addPet` - Add a new pet to the store  \n- `updatePet` - Update an existing pet\n- `deletePet` - Deletes a pet\n\n**Testing the generated server:**\n```bash\n# Start Prism mock server (in one terminal)\ntask prism:mock\n\n# Test your server with MCP Inspector (in another terminal)\ncd servers/petstore-mcp  \nAPI_BASE_URL=http://127.0.0.1:4010 bun --bun mcp-server/index.ts\n```\n\n### Example 2: Petstore API with Hono Runtime (Web Server)\n\n```bash\n# Generate Hono-based MCP server with multiple transports\ncd packages/cli\nbun run dev --input https://petstore.swagger.io/v2/swagger.json --out ./servers/petstore-hono --name petstore-hono --runtime hono\n\n# Navigate and install dependencies\ncd ./servers/petstore-hono\nbun install\n\n# Start development server with hot reload\nbun run dev\n```\n\nThe Hono server provides multiple connection endpoints:\n\n**HTTP Transport (POST requests):**\n```bash\ncurl -X POST http://localhost:3000/mcp \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\",\"params\":{}}'\n```\n\n**SSE Transport (Server-Sent Events):**\n```bash\ncurl -N http://localhost:3000/mcp/sse\n# Returns streaming MCP responses\n```\n\n**Health Checks:**\n```bash\ncurl http://localhost:3000/health\n# {\"status\":\"ok\",\"server\":\"petstore-hono\"}\n```\n\n**Docker Deployment:**\n```bash\n# Build and run with Docker\ndocker build -t petstore-hono .\ndocker run -p 3000:3000 -e API_BASE_URL=https://petstore.swagger.io/v2 petstore-hono\n```\n\n### Example 3: GitHub API (Advanced)\n\n```bash\n# Download GitHub API spec\ncurl -o github.json https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json\n\n# Generate with CLI\ncd packages/cli\nbun run dev --input github.json --out ./servers/github --name github-mcp --runtime bun\n\n# Configure environment\ncd ./servers/github\ncp .env.example .env\n# Edit .env to add:\n# API_BASE_URL=https://api.github.com\n# GITHUB_TOKEN=your_token_here\n```\n\n### Example 4: Custom API (Programmatic)\n\n```typescript\n// generate-mcp.ts\nimport { generateServerFromOpenAPI } from \"@aigentools/mcpgen-core\";\n\nasync function generateMyAPI() {\n  try {\n    const result = await generateServerFromOpenAPI(\n      \"./my-api-spec.yaml\",\n      \"./generated-servers/my-api\",\n      \"my-company-api\",\n      {\n        runtime: \"hono\",         // Generate Hono web server with multiple transports\n        force: true,\n        debug: true\n      }\n    );\n    \n    console.log(`✅ Generated MCP server: ${result.name}`);\n    console.log(`📁 Location: ${result.outDir}`);\n    console.log(`🔧 Tools created: ${result.operations.length}`);\n    \n    // List all generated tools\n    result.operations.forEach(op =\u003e {\n      console.log(`   - ${op.operationId || op.method}: ${op.summary}`);\n    });\n    \n  } catch (error) {\n    console.error(\"❌ Generation failed:\", error);\n  }\n}\n\n// Run it\ngenerateMyAPI();\n```\n\n### Example 5: Real-world Integration\n\n```bash\n# Step 1: Generate server\ncd packages/cli  \nbun run dev --input ./specs/company-api.yaml --out ~/mcp-servers/company --name company-api\n\n# Step 2: Test the server\ncd ~/mcp-servers/company\nbun --bun mcp-server/index.ts\n\n# Step 3: Add to Claude Desktop\n# Edit: ~/.claude_desktop_config.json\n{\n  \"mcpServers\": {\n    \"company-api\": {\n      \"command\": \"bun\",\n      \"args\": [\"--bun\", \"/Users/username/mcp-servers/company/mcp-server/index.ts\"],\n      \"env\": {\n        \"API_BASE_URL\": \"https://api.company.com/v1\",\n        \"API_KEY\": \"your-api-key\"\n      }\n    }\n  }\n}\n\n# Step 4: Restart Claude Desktop and start using your API tools!\n```\n\n## 🔧 CLI Usage\n\nNon-interactive flags:\n- `--input, -i` OpenAPI spec path (`.yaml/.yml/.json`)\n- `--output, --out, -o` Output directory\n- `--name, -n` Server name (defaults to spec title or filename)\n- `--runtime, -r` Runtime: `bun` (default), `node`, or `hono` (HTTP + SSE + Stdio transports)\n- `--force, -f` Overwrite when output directory is not empty\n- `--config, -c` YAML config file (see below)\n- `--help, -h` Show usage\n- `--version, -v` Show version\n\nInteractive mode:\n- Missing flags are collected via prompts.\n- Name suggestion uses spec `info.title` when available.\n- Output suggestion: `./servers/\u003cslugified-name\u003e`.\n- Overwrite confirmation for non-empty output directories (skip with `--force`).\n\nMinimal configuration file (`--config mcpgen.config.yaml`):\n```yaml\nopenapi: ./path/to/spec.yaml\nname: my-mcp\n# out dir can still be passed as --out; if omitted, defaults to \"output\"\n```\n\n## Development\n\nThis monorepo uses **Turborepo** for build orchestration and caching. All commands automatically handle package dependencies and run tasks in the correct order.\n\n### 📦 Releases and Versioning\n\nFor information about releasing packages, version management, and publishing workflow, see **[docs/releasing.md](docs/releasing.md)**.\n\n### Standard Development Commands\n\n```bash\n# Build all packages (with dependency management via Turborepo)\nbun run build\n\n# Type check all packages\nbun run typecheck  \n\n# Lint and format all packages (Biome v2)\nbun run lint\nbun run format\n\n# Run tests across all packages\nbun run test\n\n# Target specific packages using Turborepo filters\nbunx turbo run build --filter=@aigentools/mcpgen-core     # Build core package only\nbunx turbo run test --filter=@aigentools/mcpgen       # Test CLI package only\nbunx turbo run typecheck --filter=@workspace/*    # Type check all workspace packages\n```\n\n### Taskfile Shortcuts\n\nIf you have [Task](https://taskfile.dev/) installed, use these convenient shortcuts:\n\n```bash\n# Basic development commands\ntask install          # Install all dependencies\ntask build            # Build all packages\ntask typecheck        # Type check all packages\ntask test             # Run all tests\n\n# Package-specific builds (via Turborepo)\ntask build:core       # Build core package only\ntask build:cli        # Build CLI package only\ntask typecheck:core   # Type check core only\ntask typecheck:cli    # Type check CLI only\n\n# Example workflows with Petstore\ntask gen:petstore           # Generate Petstore MCP server\ntask install:petstore       # Install dependencies in generated server\ntask test:gen:petstore      # Generate and verify files exist\n\n# Testing with Prism mock server + MCP Inspector\ntask prism:mock            # Start Prism mock server\ntask prism:inspect:cli     # Full workflow: generate → test with Inspector CLI\ntask prism:inspect:ui      # Full workflow: generate → test with Inspector UI\ntask prism:smoke          # Complete smoke test chain\n```\n\n### Turborepo Benefits\n\n- **Smart caching**: Build outputs are cached and reused across runs\n- **Parallel execution**: Tasks run in parallel when possible\n- **Dependency awareness**: Automatically builds dependencies first\n- **Incremental builds**: Only rebuilds what changed\n\n```bash\n# See what Turborepo will run\nbunx turbo run build --dry-run\n\n# Run with verbose logging\nbunx turbo run test --verbose\n\n# Clear Turborepo cache\nbunx turbo prune\n```\n\n## Testing\n\n- Unit tests are colocated as `*.test.ts` near sources.\n- Test runner: Bun Test.\n- Run all tests: `bun run test`.\n- Examples:\n  - Core: YAML/JSON parsing, name suggestion, server generation\n  - CLI: arg parsing, interactive prompt flow (mocked), integration test spawning the bundled CLI\n\n## 🚀 Generated MCP Server Features\n\nYour generated MCP servers include:\n\n- **🔧 Individual MCP Tools**: Each OpenAPI operation becomes a callable tool\n- **✅ Zod Validation**: Automatic input parameter validation with detailed error messages\n- **🛡️ Type Safety**: Full TypeScript support with proper interfaces\n- **🔗 Smart URL Building**: Automatic path parameter substitution and query string handling\n- **📝 Request Bodies**: JSON request body support for POST/PUT/PATCH operations\n- **⚠️ Error Handling**: Comprehensive HTTP error handling with meaningful responses\n- **🌐 Environment Configuration**: Configurable base URL via `API_BASE_URL` environment variable\n- **🔐 Authentication**: Built-in API key support via headers\n\n## 🌐 Transport Options (Runtime Comparison)\n\nChoose the right runtime for your needs:\n\n### Standard Runtime (Bun/Node) - **Recommended for Claude Desktop**\n- ✅ **Stdio Transport**: Direct process communication via stdin/stdout\n- ✅ **Single File**: One `index.ts` file with complete MCP server\n- ✅ **Zero Setup**: Works immediately with Claude Desktop\n- ✅ **Lightweight**: Minimal dependencies\n- ❌ **Limited to Claude**: Cannot be accessed via HTTP/web\n\n### Hono Runtime - **Recommended for Web Integration**\n- ✅ **HTTP Transport**: RESTful API endpoint at `/mcp`\n- ✅ **SSE Transport**: Server-Sent Events at `/mcp/sse` for streaming\n- ✅ **Stdio Transport**: WebSocket simulation at `/mcp/stdio` (experimental)\n- ✅ **Web Compatible**: Access from browsers, web apps, and HTTP clients\n- ✅ **Docker Ready**: Includes Dockerfile for easy deployment  \n- ✅ **Health Checks**: Built-in `/health` endpoint for monitoring\n- ✅ **Hot Reload**: Development server with watch mode\n- ❌ **More Complex**: Requires running web server\n- ❌ **Network Dependent**: Requires network connectivity\n\n#### When to Use Each Runtime:\n\n**Choose Standard (Bun/Node) when:**\n- Using Claude Desktop exclusively\n- Want simplest setup and deployment\n- Need minimal resource usage\n- Working with sensitive data (no network exposure)\n\n**Choose Hono when:**\n- Building web applications with MCP integration\n- Need multiple client access (browser + Claude)\n- Want to expose MCP tools as HTTP API\n- Deploying to cloud/container environments\n- Need monitoring and health checks\n\n## 🔍 Troubleshooting\n\n### Common Issues\n\n**Q: CLI shows \"command not found\"**\n```bash\n# Make sure you've built the CLI first\ncd packages/cli\nbun run build\n# Then use: bun run dev (from source) or node dist/index.js\n```\n\n**Q: Generated server can't connect to API**\n```bash\n# Check your .env file in the generated server\ncd your-generated-server\ncat .env\n# Make sure API_BASE_URL is correctly set\n```\n\n**Q: OpenAPI spec validation fails**\n```bash\n# The generator validates specs strictly. Common issues:\n# - Missing required fields in OpenAPI spec\n# - Invalid JSON/YAML syntax\n# - Unsupported OpenAPI version (use 3.0+)\n\n# Test your spec independently:\ncurl -o spec.json \"your-api-spec-url\"\n# Or validate online: https://editor.swagger.io/\n```\n\n**Q: MCP tools not showing in Claude Desktop**\n```bash\n# 1. Check Claude Desktop logs (Help \u003e Developer Tools \u003e Console)\n# 2. Verify your claude_desktop_config.json syntax\n# 3. Make sure paths are absolute, not relative\n# 4. Test server independently:\necho '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\"}' | bun --bun your-server/mcp-server/index.ts\n```\n\n**Q: TypeScript errors in generated code**\n```bash\n# If you see TS errors, try:\ncd your-generated-server\nbun install  # Install missing dependencies\n# Or regenerate with --force flag\n```\n\n### Debug Mode\n\nEnable debug logging for troubleshooting:\n\n```typescript\n// Programmatic usage\nawait generateServerFromOpenAPI(spec, output, name, { debug: true });\n```\n\n```bash\n# CLI usage - check console output for detailed logs\ncd packages/cli\nDEBUG=1 bun run dev --input spec.yaml --out ./output --name debug-server\n```\n\n## 📖 API Reference\n\n### Core Library Functions\n\n```typescript\n// Main generation function\nfunction generateServerFromOpenAPI(\n  specPath: string,\n  outputDir: string, \n  serverName: string,\n  options?: {\n    runtime?: 'bun' | 'node';\n    force?: boolean;\n    debug?: boolean;\n    skipFormatting?: boolean;\n  }\n): Promise\u003c{\n  name: string;\n  outDir: string;\n  operations: Array\u003c{\n    method: string;\n    path: string;\n    operationId?: string;\n    summary?: string;\n  }\u003e;\n}\u003e;\n\n// Utility functions\nfunction slugify(text: string): string;\nfunction suggestNameFromSpec(specPath: string): Promise\u003cstring\u003e;\nfunction readTitleFromSpec(specPath: string): Promise\u003cstring\u003e;\n```\n\n## 🤝 Contributing\n\nWe welcome contributions! Please:\n\n1. **Fork the repository** and create a feature branch\n2. **Follow the coding standards**: \n   ```bash\n   bun run lint      # Check code style\n   bun run typecheck # Validate TypeScript\n   bun run test      # Run all tests\n   ```\n3. **Add tests** for new functionality\n4. **Update documentation** as needed\n5. **Submit a pull request** with a clear description\n\n### Development Setup\n\n```bash\ngit clone https://github.com/beshkenadze/openapi-mcp-generator.git\ncd openapi-mcp-generator\nbun install\nbun run build\nbun run test  # Make sure everything works\n```\n\n## 📄 License\n\nMIT License - see [LICENSE](LICENSE) for details.\n\n## 🙏 Acknowledgments\n\n- Built with [Bun](https://bun.sh/) for fast JavaScript runtime\n- Uses [@scalar/openapi-parser](https://github.com/scalar/openapi-parser) for robust OpenAPI parsing  \n- Powered by [Model Context Protocol](https://modelcontextprotocol.io/) for AI tool integration\n- Code generation via [ts-morph](https://ts-morph.com/) for precise TypeScript AST manipulation\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbeshkenadze%2Fopenapi-mcp-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbeshkenadze%2Fopenapi-mcp-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbeshkenadze%2Fopenapi-mcp-generator/lists"}