{"id":30820039,"url":"https://github.com/miguell-j/mcp-one","last_synced_at":"2026-04-08T18:02:25.023Z","repository":{"id":307685398,"uuid":"1022321014","full_name":"Miguell-J/mcp-one","owner":"Miguell-J","description":"MCP-one is a central server that connects multiple independent MCP servers and exposes a unified interface to clients (LLMs or applications).","archived":false,"fork":false,"pushed_at":"2025-08-05T14:59:15.000Z","size":3306,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-09-06T10:11:21.730Z","etag":null,"topics":["agents","ai","ai-agents","docker","mcp","mcp-client","mcp-server","mcp-servers","pydantic","python","server","yaml","yaml-configuration"],"latest_commit_sha":null,"homepage":"","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/Miguell-J.png","metadata":{"files":{"readme":"README.md","changelog":"HISTORY.rst","contributing":"CONTRIBUTING.rst","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.rst","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.rst","dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-18T20:57:11.000Z","updated_at":"2025-08-26T07:32:10.000Z","dependencies_parsed_at":"2025-08-01T16:31:11.567Z","dependency_job_id":"92bc8cb1-ab8b-4795-b198-ae172c5ed5de","html_url":"https://github.com/Miguell-J/mcp-one","commit_stats":null,"previous_names":["miguell-j/mcp-one"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Miguell-J/mcp-one","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Miguell-J%2Fmcp-one","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Miguell-J%2Fmcp-one/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Miguell-J%2Fmcp-one/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Miguell-J%2Fmcp-one/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Miguell-J","download_url":"https://codeload.github.com/Miguell-J/mcp-one/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Miguell-J%2Fmcp-one/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31567227,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"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":["agents","ai","ai-agents","docker","mcp","mcp-client","mcp-server","mcp-servers","pydantic","python","server","yaml","yaml-configuration"],"created_at":"2025-09-06T10:02:07.003Z","updated_at":"2026-04-08T18:02:24.992Z","avatar_url":"https://github.com/Miguell-J.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003ch1\u003e ✨ MCP one – A Unified Hub for MCP Servers \u003c/h1\u003e\n\u003c/div\u003e  \n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Status-MVP%20Ready-brightgreen?style=for-the-badge\" alt=\"status\"/\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Python-3.10%2B-blue?style=for-the-badge\u0026logo=python\u0026logoColor=white\" alt=\"python\"/\u003e\n  \u003cimg src=\"https://img.shields.io/badge/FastAPI-0.110+-009688?style=for-the-badge\u0026logo=fastapi\u0026logoColor=white\" alt=\"fastapi\"/\u003e\n  \u003cimg src=\"https://img.shields.io/badge/MCP-Protocol-orange?style=for-the-badge\" alt=\"mcp\"/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cb\u003eMCP one\u003c/b\u003e is a lightweight, extensible, and blazing-fast hub to manage multiple MCPs (Model Context Protocol) servers in a single place.  \n\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"mcp-one-img.png\" alt=\"Logo MCP One\" width=\"400\"\u003e\n\u003c/div\u003e\n\n---\n\n## 🚀 Key Features\n\n✅ **Dynamic Integration:** Add or remove MCP servers simply by editing `config.yaml`.\n✅ **M × N → M + N:** Connect clients to a single hub instead of integrating each MCP directly.\n✅ **Unified API:** Standardized `/tools`, `/call`, and `/servers` endpoints, regardless of underlying MCP differences.\n✅ **Dynamic Endpoint Mapping:** Each MCP can expose custom routes or payloads. Map them with `endpoints`, `response_map`, and `payload_map`.\n✅ **Health Monitoring:** Built-in `/health` and `/status` to monitor all connected servers.\n✅ **Async \u0026 Scalable:** Built with FastAPI, `httpx`, and asyncio for top performance.\n✅ **Plug \u0026 Play:** Works with any MCP server (GitHub MCP, SQL MCP, Jupyter MCP, or your own).\n\n---\n\n## 🏗️ Architecture\n\n```text\n           ┌───────────────────┐\n           │    MCP one API    │◄──── Clients (LLMs, Apps, Services)\n           └─────────┬─────────┘\n                     │\n      ┌──────────────┼───────────────┐\n      │              │               │\n┌────────────┐ ┌────────────┐ ┌────────────┐\n│ MCP Server │ │ MCP Server │ │ MCP Server │\n│   (GitHub) │ │   (SQL)    │ │   (Jupyter)│\n└────────────┘ └────────────┘ └────────────┘\n```\n\n💡 Each MCP server can define its own routes and payloads.\n**MCP Hub normalizes everything.**\n\n---\n\n## ⚡ Getting Started\n\n### 🔧 Prerequisites\n\n* **Python 3.10+**\n* A running MCP server (or use the included `dummy_mcp` example)\n\n### 📦 Installation\n\n```bash\ngit clone https://github.com/\u003cyour-user\u003e/mcp-one.git\ncd mcp-one\npip install -r requirements.txt\n```\n\n---\n\n## ⚙️ Configuration\n\nAll server integrations are defined in `src/config.yaml`:\n\n```yaml\nservers:\n  - name: dummy\n    url: http://localhost:7000\n    description: Dummy MCP for testing\n    enabled: true\n    timeout: 30\n    retry_attempts: 3\n    endpoints:\n      health: /health\n      tools: /tools\n      call: /call\n    response_map:\n      tools_key: \"\"                 # empty means the response is a plain list\n      tool_name_field: \"name\"\n      tool_desc_field: \"description\"\n    payload_map:\n      tool_field: \"tool\"\n      args_field: \"arguments\"\n\nhub:\n  host: \"0.0.0.0\"\n  port: 8000\n  debug: true\n  log_level: \"INFO\"\n```\n\n---\n\n## 🚦 Running MCP Hub\n\nStart the hub:\n\n```bash\ncd src\nuvicorn app.main:app --reload\n```\n\n**MCP Hub will be available at:**\n\n```\nhttp://localhost:8000\n```\n\n---\n\n## 📡 API Reference\n\n| Endpoint           | Method | Description                                   |\n| ------------------ | ------ | --------------------------------------------- |\n| `/`                | GET    | Root information about the hub                |\n| `/health`          | GET    | Health status of the hub                      |\n| `/status`          | GET    | Detailed status (servers, uptime, tools)      |\n| `/servers`         | GET    | List registered MCP servers                   |\n| `/servers/refresh` | POST   | Force refresh of all servers and tools        |\n| `/tools`           | GET    | List all available tools (across all servers) |\n| `/call`            | POST   | Execute a tool on a specific server           |\n\n### 🛠 Example: Call a tool\n\n```bash\ncurl -X POST http://localhost:8000/call \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"tool\": \"dummy.add_numbers\",\n    \"arguments\": {\"a\": \"5\", \"b\": \"7\"}\n  }'\n```\n\n✅ **Response:**\n\n```json\n{\n  \"success\": true,\n  \"result\": {\"sum\": 12},\n  \"server_name\": \"dummy\",\n  \"execution_time_ms\": 8.37\n}\n```\n\n---\n\n## 🧩 Extending MCP Hub\n\nMCP Hub supports **dynamic endpoint mappings**.\nTo add a new MCP server:\n\n1. Add a new block in `config.yaml` with `endpoints`, `response_map`, and `payload_map`.\n2. Restart the hub and refresh:\n\n   ```bash\n   curl -X POST http://localhost:8000/servers/refresh\n   ```\n\n3. 🎉 Your new tools are now available through `/tools` and `/call`.\n\n---\n\n## 🌟 Why MCP one?\n\n✔️ **Saves Integration Effort:** Forget wiring M×N connections for each client.\n✔️ **Centralized Control:** One place to monitor, configure, and call tools.\n✔️ **Future-Proof:** Add new MCP servers without changing code.\n✔️ **Ready for Scale:** Designed with extensibility and high throughput in mind.\n\n---\n\n## 🤝 Contributing\n\nWe welcome contributions!\nCheck out [CONTRIBUTING.rst](CONTRIBUTING.rst) for guidelines.\n\n---\n\n## 📜 License\n\nThis project is licensed under the [MIT License](LICENSE).\n\n---\n\n\u003cp align=\"center\"\u003e\nMade by Miguel to the Open Source community.\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiguell-j%2Fmcp-one","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiguell-j%2Fmcp-one","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiguell-j%2Fmcp-one/lists"}