{"id":36957974,"url":"https://github.com/pawneetdev/rest-to-mcp-adapter","last_synced_at":"2026-01-13T16:00:30.272Z","repository":{"id":326405498,"uuid":"1099961538","full_name":"pawneetdev/rest-to-mcp-adapter","owner":"pawneetdev","description":"A Python library for converting REST API specifications into MCP (Model Context Protocol) tools for AI agents.","archived":false,"fork":false,"pushed_at":"2025-11-27T15:36:10.000Z","size":313,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-11-30T08:11:19.828Z","etag":null,"topics":["ai","chatgpt","claude","mcp","mcp-server","mcp-servers","python","python3","rest-api","rest-to-mcp"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/rest-to-mcp-adapter","language":"Python","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/pawneetdev.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-19T16:55:07.000Z","updated_at":"2025-11-27T15:31:29.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pawneetdev/rest-to-mcp-adapter","commit_stats":null,"previous_names":["pawneetdev/rest-to-mcp-adapter"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/pawneetdev/rest-to-mcp-adapter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pawneetdev%2Frest-to-mcp-adapter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pawneetdev%2Frest-to-mcp-adapter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pawneetdev%2Frest-to-mcp-adapter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pawneetdev%2Frest-to-mcp-adapter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pawneetdev","download_url":"https://codeload.github.com/pawneetdev/rest-to-mcp-adapter/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pawneetdev%2Frest-to-mcp-adapter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28391141,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T14:36:09.778Z","status":"ssl_error","status_checked_at":"2026-01-13T14:35:19.697Z","response_time":56,"last_error":"SSL_read: 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":["ai","chatgpt","claude","mcp","mcp-server","mcp-servers","python","python3","rest-api","rest-to-mcp"],"created_at":"2026-01-13T16:00:20.727Z","updated_at":"2026-01-13T16:00:30.234Z","avatar_url":"https://github.com/pawneetdev.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# REST-to-MCP Adapter\n\n**A Python library for converting REST API specifications into MCP (Model Context Protocol) tools for AI agents.**\n\nTransform any REST API specification into tools that Claude, GPT, and other LLM-powered agents can use.\n\n**Supported Formats:**\n- OpenAPI 3.x (JSON, YAML)\n- Swagger 2.x (JSON, YAML)\n- OpenAPI Actions format (JSON)\n\n[![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![PyPI version](https://badge.fury.io/py/rest-to-mcp-adapter.svg)](https://pypi.org/project/rest-to-mcp-adapter/)\n\n\u003e **⚠️ Beta Status**: This library is currently in beta (v0.1.0). The core functionality is stable and production-ready, but the API may evolve based on community feedback. We welcome early adopters and contributors!\n\n---\n\n## 🚀 Quick Start\n\n### Simple Approach (Recommended for Most Users)\n\n```python\nfrom adapter import ToolRegistry, MCPServer, APIExecutor, BearerAuth\n\n# Create registry from OpenAPI spec (includes endpoints)\nregistry = ToolRegistry.create_from_openapi(\n    \"https://api.example.com/openapi.json\"\n)\n\n# Set up executor\nexecutor = APIExecutor(\n    base_url=\"https://api.example.com\",\n    auth=BearerAuth(token=\"your-token\")\n)\n\n# Create server - endpoints are in the registry!\nserver = MCPServer(\n    name=\"My API Server\",\n    version=\"1.0.0\",\n    tool_registry=registry,\n    executor=executor\n    # No endpoints parameter needed!\n)\nserver.run()\n```\n\nFor advanced usage and individual step control, see [Detailed Usage](#-detailed-usage) below.\n\n---\n\n## 📦 Installation\n\n### Stable Release\n\n```bash\npip install rest-to-mcp-adapter\n```\n\n### Beta Release (Latest Features)\n\nTo install the latest beta version with cutting-edge features:\n\n```bash\npip install --pre rest-to-mcp-adapter\n```\n\nOr install a specific beta version:\n\n```bash\npip install rest-to-mcp-adapter==0.2.0b1\n```\n\n### From Source (For Development)\n\n```bash\ngit clone https://github.com/pawneetdev/rest-to-mcp-adapter.git\ncd rest-to-mcp-adapter\npip install -e .\n```\n\n### Dependencies\n\nCore dependencies (automatically installed):\n- `pydantic\u003e=2.0.0` - Data validation and modeling\n- `pyyaml\u003e=6.0` - YAML parsing\n- `requests\u003e=2.31.0` - HTTP client\n\nOptional dependencies:\n- `langchain-community\u003e=0.0.20` - Enhanced OpenAPI validation (install with: `pip install rest-to-mcp-adapter[langchain]`)\n\n---\n\n## ✨ Key Features\n\n### 🔄 Specification Ingestion\n- **Multiple formats**: OpenAPI 3.x, Swagger 2.x, OpenAPI Actions\n- **JSON \u0026 YAML**: Full support for both formats\n- **Load from anywhere**: URL, file path, or raw content\n- **Auto-detection**: Automatically determines input type and format\n- **$ref dereferencing**: Resolves all JSON pointer references\n\n### 🛠️ MCP Tool Generation\n- **Automatic conversion**: OpenAPI endpoints → MCP tools\n- **Smart naming**: 64-character limit with intelligent truncation\n- **Auth filtering**: Automatically hides auth parameters from users\n- **Hybrid approach**: Defaults + auto-detection + custom overrides\n\n### 🔐 Authentication Support\n- **Built-in handlers**: API Key, Bearer, Basic, OAuth2\n- **Custom handlers**: Easy to implement your own\n- **Automatic parameter filtering**: Auth params hidden from tool schemas\n- **Conditional auth**: Only applies to endpoints that require it\n\n### ⚡ Runtime Execution\n- **Direct API calls**: Execute REST requests from canonical endpoints\n- **Retry logic**: Exponential backoff for failed requests\n- **Error handling**: Comprehensive error types and messages\n- **Response processing**: JSON, text, and binary support\n\n### 🤖 MCP Server\n- **Full MCP protocol**: JSON-RPC 2.0 over stdio\n- **Claude integration**: Ready for Claude Desktop\n- **Tool discovery**: `tools/list` endpoint\n- **Tool execution**: `tools/call` endpoint\n\n---\n\n## 📖 Detailed Usage\n\n\u003e **💡 Looking for advanced features?** See [LIBRARY_USAGE.md](LIBRARY_USAGE.md) for:\n\u003e - Advanced tool generation patterns\n\u003e - Registry operations (search, filter, export/import)\n\u003e - Batch API calls\n\u003e - Integration patterns and best practices\n\u003e - Troubleshooting guide\n\u003e - Important limitations (64-char tool name limit, etc.)\n\n### 1. Loading API Specifications\n\nThe library supports multiple specification formats with automatic detection:\n\n```python\nfrom adapter import OpenAPILoader\n\nloader = OpenAPILoader()\n\n# OpenAPI 3.x (JSON)\nspec = loader.load(\"https://api.example.com/openapi.json\")\n\n# OpenAPI 3.x (YAML)\nspec = loader.load(\"./specs/openapi.yaml\")\n\n# Swagger 2.x (JSON)\nspec = loader.load(\"./specs/swagger.json\")\n\n# Swagger 2.x (YAML)\nspec = loader.load(\"https://api.example.com/swagger.yaml\")\n\n# OpenAPI Actions format\nspec = loader.load(\"./specs/actions.json\")\n\n# From raw YAML content\nyaml_content = \"\"\"\nopenapi: 3.0.0\ninfo:\n  title: My API\n  version: 1.0.0\npaths:\n  /users:\n    get:\n      summary: List users\n\"\"\"\nspec = loader.load(yaml_content)\n\n# From raw JSON content\njson_content = '{\"openapi\": \"3.0.0\", \"info\": {\"title\": \"My API\"}}'\nspec = loader.load(json_content)\n\n# Auto-detection works for all methods\n# Automatically detects: URL vs file vs content, JSON vs YAML, OpenAPI vs Swagger\nspec = loader.load(source)\n```\n\n### 2. Normalizing to Canonical Format\n\n```python\nfrom adapter import Normalizer\n\nnormalizer = Normalizer()\nendpoints = normalizer.normalize_openapi(spec)\n\n# Inspect normalized endpoints\nfor endpoint in endpoints:\n    print(f\"{endpoint.method} {endpoint.path}\")\n    print(f\"  Name: {endpoint.name}\")\n    print(f\"  Parameters: {len(endpoint.parameters)}\")\n    print(f\"  Requires auth: {bool(endpoint.security)}\")\n```\n\n### 3. Generating MCP Tools\n\n#### Basic Usage\n\n```python\nfrom adapter import ToolGenerator\n\ngenerator = ToolGenerator(api_name=\"myapi\")\ntools = generator.generate_tools(endpoints)\n\n# Tools are ready to use!\nfor tool in tools:\n    print(f\"Tool: {tool.name}\")\n    print(f\"Description: {tool.description}\")\n    print(f\"Parameters: {tool.inputSchema}\")\n```\n\n#### With Auto-Detected Auth Filtering\n\n```python\nfrom adapter import OpenAPILoader, ToolGenerator\n\n# Load spec\nloader = OpenAPILoader()\nspec = loader.load(\"api.yaml\")\n\n# Auto-detect auth parameters from security schemes\nauto_detected = loader.extract_auth_parameters(spec)\nprint(f\"Auto-detected: {auto_detected}\")\n# Output: {'x-api-key', 'signature', ...}\n\n# Generate tools with hybrid filtering (defaults + auto-detected)\ngenerator = ToolGenerator(\n    api_name=\"myapi\",\n    auto_detected_auth_params=auto_detected\n)\ntools = generator.generate_tools(endpoints)\n\n# Auth parameters are automatically hidden!\n# Users only see business parameters\n```\n\n#### With Custom Auth Parameters\n\n```python\n# Override defaults completely\ngenerator = ToolGenerator(\n    api_name=\"myapi\",\n    auth_params={'my_signature', 'my_timestamp', 'my_nonce'}\n)\ntools = generator.generate_tools(endpoints)\n```\n\n### 4. Working with Tool Registry\n\n```python\nfrom adapter import ToolRegistry\n\n# Create registry\nregistry = ToolRegistry(name=\"My API\")\nregistry.add_tools(tools)\n\n# Query tools\nprint(f\"Total tools: {registry.count()}\")\nprint(f\"Tool names: {registry.get_tool_names()}\")\n\n# Filter tools\nproduct_tools = registry.get_tools_by_tag(\"products\")\nget_tools = registry.get_tools_by_method(\"GET\")\nsearch_results = registry.search_tools(\"user\")\n\n# Get specific tool\nuser_tool = registry.get_tool(\"myapi_get_users\")\n\n# Export/Import\nregistry.export_json(\"tools.json\")\nregistry2 = ToolRegistry.import_json(\"tools.json\")\n```\n\n### 5. Authentication Handlers\n\n#### Built-in Handlers\n\n```python\nfrom adapter import APIExecutor, BearerAuth, APIKeyAuth, BasicAuth\n\n# Bearer Token\nexecutor = APIExecutor(\n    base_url=\"https://api.example.com\",\n    auth=BearerAuth(token=\"your-bearer-token\")\n)\n\n# API Key (in header)\nexecutor = APIExecutor(\n    base_url=\"https://api.example.com\",\n    auth=APIKeyAuth(api_key=\"your-api-key\", header_name=\"X-API-Key\")\n)\n\n# API Key (in query)\nexecutor = APIExecutor(\n    base_url=\"https://api.example.com\",\n    auth=APIKeyAuth(api_key=\"your-api-key\", location=\"query\", param_name=\"apikey\")\n)\n\n# Basic Auth\nexecutor = APIExecutor(\n    base_url=\"https://api.example.com\",\n    auth=BasicAuth(username=\"user\", password=\"pass\")\n)\n```\n\n#### Custom Auth Handler\n\n```python\nfrom adapter.runtime import AuthHandler\n\nclass CustomAuth(AuthHandler):\n    def __init__(self, api_key: str, api_secret: str):\n        self.api_key = api_key\n        self.api_secret = api_secret\n\n    def apply(self, headers: dict, params: dict) -\u003e None:\n        # Add custom authentication logic\n        import time\n        import hmac\n        import hashlib\n\n        timestamp = int(time.time() * 1000)\n        params[\"timestamp\"] = str(timestamp)\n\n        # Create signature\n        query_string = \"\u0026\".join(f\"{k}={v}\" for k, v in sorted(params.items()))\n        signature = hmac.new(\n            self.api_secret.encode(),\n            query_string.encode(),\n            hashlib.sha256\n        ).hexdigest()\n\n        params[\"signature\"] = signature\n        headers[\"X-API-KEY\"] = self.api_key\n\n# Use custom auth\nexecutor = APIExecutor(\n    base_url=\"https://api.example.com\",\n    auth=CustomAuth(api_key=\"key\", api_secret=\"secret\")\n)\n```\n\n**Real-World Example**: The [Binance MCP](https://github.com/pawneetdev/binance-mcp) implements a production-grade version of this pattern with additional features:\n- Server time synchronization for timestamp accuracy\n- Query string canonicalization (sorted parameter ordering)\n- Optional `recvWindow` parameter for clock skew tolerance\n- Comprehensive error messages for auth failures\n\nRefer to its `auth.py` module for a complete implementation you can adapt for similar signature-based APIs.\n\n### 6. Executing API Calls Directly\n\n```python\nfrom adapter import APIExecutor, NoAuth\n\n# Create executor\nexecutor = APIExecutor(\n    base_url=\"https://api.example.com\",\n    auth=NoAuth(),  # Public endpoints\n    timeout=30,\n    max_retries=3\n)\n\n# Find an endpoint\nendpoint = next(ep for ep in endpoints if ep.name == \"get_users\")\n\n# Execute call\nresult = executor.execute(endpoint, arguments={\"limit\": 10})\n\nif result.success:\n    print(f\"Status: {result.status_code}\")\n    print(f\"Data: {result.response.data}\")\nelse:\n    print(f\"Error: {result.error}\")\n```\n\n### 7. Running an MCP Server\n\n```python\nfrom adapter import MCPServer\n\n# Option 1: With create_from_openapi (recommended)\nregistry = ToolRegistry.create_from_openapi(\"https://api.example.com/openapi.json\")\nexecutor = APIExecutor(base_url=\"https://api.example.com\", auth=BearerAuth(token=\"token\"))\n\nserver = MCPServer(\n    name=\"My API Server\",\n    version=\"1.0.0\",\n    tool_registry=registry,  # Endpoints included automatically\n    executor=executor\n)\n\n# Option 2: Manual with explicit endpoints (backward compatible)\nserver = MCPServer(\n    name=\"My API Server\",\n    version=\"1.0.0\",\n    tool_registry=registry,\n    executor=executor,\n    endpoints=endpoints  # Optional if registry has endpoints\n)\n\n# Run server (stdio transport for Claude Desktop)\nserver.run()\n```\n\n#### Configure in Claude Desktop\n\nAdd to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"myapi\": {\n      \"command\": \"python\",\n      \"args\": [\"/path/to/your/server.py\"]\n    }\n  }\n}\n```\n\n---\n\n## 🔐 Authentication Parameter Filtering\n\nOne of the most powerful features is **automatic authentication parameter filtering**. This ensures users never see or need to provide auth-related parameters.\n\n### How It Works\n\nThe library uses a **hybrid approach** combining:\n\n1. **Default common parameters**: `signature`, `timestamp`, `api_key`, `authorization`, etc.\n2. **Auto-detected from OpenAPI**: Extracts from `securitySchemes`\n3. **Custom overrides**: You can specify your own\n\n### Default Auth Parameters\n\n```python\nDEFAULT_AUTH_PARAMS = {\n    'signature', 'timestamp', 'recvwindow', 'recv_window',\n    'api_key', 'apikey', 'api_secret', 'apisecret',\n    'access_token', 'accesstoken', 'token',\n    'authorization', 'auth',\n    'nonce', 'sign',\n}\n```\n\n### Auto-Detection Example\n\n```python\nloader = OpenAPILoader()\nspec = loader.load(\"api.yaml\")\n\n# Extract auth params from securitySchemes\nauth_params = loader.extract_auth_parameters(spec)\n# Returns: {'x-api-key', 'signature', ...}\n\n# Use in tool generation\ngenerator = ToolGenerator(\n    api_name=\"myapi\",\n    auto_detected_auth_params=auth_params\n)\n```\n\n### Supported Security Schemes\n\n| Type | Auto-Detected Parameters |\n|------|--------------------------|\n| `apiKey` | Parameter name from spec |\n| `http` (bearer/basic) | `authorization` |\n| `oauth2` | `authorization`, `access_token`, `token` |\n| `openIdConnect` | `authorization` |\n\n### Example: Before vs After\n\n**Without filtering** (❌ Bad):\n```python\n# User sees auth parameters\ntool.inputSchema = {\n    \"properties\": {\n        \"symbol\": {\"type\": \"string\"},\n        \"timestamp\": {\"type\": \"integer\"},  # ❌ Exposed\n        \"signature\": {\"type\": \"string\"}     # ❌ Exposed\n    }\n}\n\n# User has to provide them (confusing!)\nclient.call_tool(\"get_price\", {\n    \"symbol\": \"BTCUSDT\",\n    \"timestamp\": 1234567890,      # ❌ User shouldn't know this\n    \"signature\": \"abc123...\"       # ❌ User shouldn't know this\n})\n```\n\n**With filtering** (✅ Good):\n```python\n# User only sees business parameters\ntool.inputSchema = {\n    \"properties\": {\n        \"symbol\": {\"type\": \"string\"}  # ✅ Only what matters\n    }\n}\n\n# Clean API!\nclient.call_tool(\"get_price\", {\n    \"symbol\": \"BTCUSDT\"  # ✅ Simple and clear\n})\n# Auth handler adds timestamp and signature automatically\n```\n\n---\n\n## 🏗️ Architecture Overview\n\n```\nOpenAPI Spec (URL/file/content)\n    ↓\nOpenAPILoader → Parses and dereferences $refs\n    ↓\nNormalizer → Converts to CanonicalEndpoint models\n    ↓\nToolGenerator → Creates MCP tool definitions\n    ↓\nToolRegistry → Stores tools and endpoints\n    ↓\nMCPServer → Exposes tools via JSON-RPC (stdio)\n    ↓\nClaude/GPT → Calls tools\n    ↓\nAPIExecutor → Executes actual REST API calls\n    ↓\nResponse → Returns to agent\n```\n\nFor detailed architecture documentation, see [ARCHITECTURE.md](ARCHITECTURE.md).\n\n---\n\n## 🌍 Real-World Integrations\n\nThe REST-to-MCP Adapter powers production MCP servers for real APIs. These example repositories demonstrate complete implementations with different authentication patterns and specification formats.\n\n### DataForSEO MCP\n\n**Repository**: https://github.com/pawneetdev/dataforseo-mcp/\n\nProduction MCP server for the DataForSEO API demonstrating:\n\n- **Authentication**: HTTP Basic Authentication\n- **Spec Format**: OpenAPI Actions/JSON format\n- **Use Case**: SEO data retrieval and analysis\n- **What You'll Learn**:\n  - Loading OpenAPI JSON specifications\n  - Implementing standard HTTP Basic auth\n  - Organizing tools by API categories\n  - Handling paginated responses\n\n**Quick Start**:\n```bash\ngit clone https://github.com/pawneetdev/dataforseo-mcp.git\ncd dataforseo-mcp\npip install -e .\n```\n\nSee the repository README for complete setup instructions and Claude Desktop integration.\n\n---\n\n### Binance MCP\n\n**Repository**: https://github.com/pawneetdev/binance-mcp\n\nProduction MCP server for the Binance Spot Trading API demonstrating:\n\n- **Authentication**: Custom HMAC-SHA256 signature-based authentication\n- **Spec Format**: Swagger/OpenAPI YAML format\n- **Use Case**: Cryptocurrency trading and market data\n- **What You'll Learn**:\n  - Loading Swagger YAML specifications\n  - Implementing custom `AuthHandler` with cryptographic signatures\n  - Query string signing with HMAC-SHA256\n  - Automatic timestamp and nonce injection\n  - Advanced parameter filtering for signature-based endpoints\n  - Handling large APIs (100+ endpoints)\n\n**Authentication Pattern**:\nThe Binance MCP extends the `AuthHandler` base class to implement Binance's specific requirements:\n- API key in headers (`X-MBX-APIKEY`)\n- Timestamp query parameter (synchronized with server time)\n- HMAC-SHA256 signature of query string\n- Optional `recvWindow` for timing flexibility\n\nThis pattern can be adapted for other APIs with signature-based authentication (AWS, Kraken, etc.).\n\n**Quick Start**:\n```bash\ngit clone https://github.com/pawneetdev/binance-mcp.git\ncd binance-mcp\npip install -e .\n```\n\nSee the repository README for API key setup, credential management, and Claude Desktop integration.\n\n---\n\n### Learning Path\n\n1. **Start with DataForSEO**: Straightforward authentication, standard OpenAPI patterns\n2. **Progress to Binance**: Advanced custom authentication, complex parameter handling\n3. **Build Your Own**: Apply these patterns to your target API\n\nBoth repositories include:\n- Complete source code and project structure\n- Production-grade error handling\n- Retry logic and timeout management\n- Claude Desktop configuration examples\n- Deployment documentation\n\n---\n\n## 🧪 Testing\n\n```bash\n# Run all tests\npytest\n\n# With coverage\npytest --cov=adapter\n\n# Run specific test\npytest tests/test_tool_generator.py\n```\n\n---\n\n## 🛣️ Roadmap\n\n- ✅ OpenAPI ingestion and normalization\n- ✅ MCP tool generation\n- ✅ Runtime execution engine\n- ✅ MCP server implementation\n- 🔄 Additional loaders (Postman, GraphQL)\n- 📋 WebSocket transport, enhanced caching\n\n---\n\n## 🤝 Contributing\n\nWe welcome contributions from the community! Whether you're fixing bugs, adding features, or improving documentation, your help is appreciated.\n\n### How to Contribute\n\n1. **Fork the repository** on GitHub\n2. **Clone your fork** locally:\n   ```bash\n   git clone https://github.com/your-username/rest-to-mcp-adapter.git\n   cd rest-to-mcp-adapter\n   ```\n3. **Create a branch** for your changes:\n   ```bash\n   git checkout -b feature/your-feature-name\n   ```\n4. **Install development dependencies**:\n   ```bash\n   pip install -e .\n   pip install pytest pytest-cov black ruff\n   ```\n5. **Make your changes** and ensure tests pass:\n   ```bash\n   pytest\n   ```\n6. **Format your code**:\n   ```bash\n   black .\n   ruff check .\n   ```\n7. **Commit and push** your changes:\n   ```bash\n   git add .\n   git commit -m \"Description of your changes\"\n   git push origin feature/your-feature-name\n   ```\n8. **Open a Pull Request** on GitHub\n\n### Areas We're Looking For Help\n\n- **Additional authentication methods** (OAuth2 flows, custom schemes)\n- **Performance optimizations** (caching, parallel processing)\n- **More loaders** (Postman collections, GraphQL schemas, API Blueprint)\n- **Documentation improvements** (tutorials, examples, API docs)\n- **Real-world usage examples** (new MCP server implementations)\n- **Testing** (edge cases, integration tests, CI/CD improvements)\n\n### Development Guidelines\n\n- Follow existing code style and patterns\n- Add tests for new features\n- Update documentation as needed\n- Keep changes focused and atomic\n- Write clear commit messages\n\n### Reporting Issues\n\nFound a bug or have a feature request? Please [open an issue](https://github.com/pawneetdev/rest-to-mcp-adapter/issues) with:\n- Clear description of the problem/feature\n- Steps to reproduce (for bugs)\n- Expected vs actual behavior\n- Relevant code snippets or examples\n\n---\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\nCopyright (c) 2025 Pawneet Singh\n\n---\n\n## 🙋 Support\n\n- **Issues**: [GitHub Issues](https://github.com/pawneetdev/rest-to-mcp-adapter/issues)\n- **PyPI Package**: [rest-to-mcp-adapter](https://pypi.org/project/rest-to-mcp-adapter/)\n\n---\n\n## 🙏 Acknowledgments\n\nThis library was developed with significant assistance from **Claude** (Anthropic), an AI assistant that helped with:\n- Architecture design and implementation\n- Code review and optimization\n- Documentation and examples\n- Testing and debugging\n\nSpecial thanks to the AI agent and MCP communities for inspiration and feedback.\n\n---\n\n**Built with ❤️ for the AI agent ecosystem**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpawneetdev%2Frest-to-mcp-adapter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpawneetdev%2Frest-to-mcp-adapter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpawneetdev%2Frest-to-mcp-adapter/lists"}