{"id":25812261,"url":"https://github.com/ravitemer/mcp-hub","last_synced_at":"2025-04-09T23:17:44.040Z","repository":{"id":278558931,"uuid":"936036852","full_name":"ravitemer/mcp-hub","owner":"ravitemer","description":"A centralized manager for Model Context Protocol (MCP) servers with dynamic server management and monitoring","archived":false,"fork":false,"pushed_at":"2025-04-07T16:57:01.000Z","size":514,"stargazers_count":56,"open_issues_count":0,"forks_count":4,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-09T23:17:34.676Z","etag":null,"topics":["ai","chatgpt","claude-ai","llms","local-development","mcp","mcp-hub","mcp-servers","model-context-protocol","nodejs","process-management-server","server","smithery"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/mcp-hub","language":"JavaScript","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/ravitemer.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["ravitemer"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":"ravitemer","thanks_dev":null,"custom":null}},"created_at":"2025-02-20T12:31:20.000Z","updated_at":"2025-04-09T10:47:19.000Z","dependencies_parsed_at":"2025-03-21T15:32:52.358Z","dependency_job_id":null,"html_url":"https://github.com/ravitemer/mcp-hub","commit_stats":null,"previous_names":["ravitemer/mcp-hub"],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravitemer%2Fmcp-hub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravitemer%2Fmcp-hub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravitemer%2Fmcp-hub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ravitemer%2Fmcp-hub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ravitemer","download_url":"https://codeload.github.com/ravitemer/mcp-hub/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248125593,"owners_count":21051771,"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":["ai","chatgpt","claude-ai","llms","local-development","mcp","mcp-hub","mcp-servers","model-context-protocol","nodejs","process-management-server","server","smithery"],"created_at":"2025-02-28T01:53:21.979Z","updated_at":"2025-04-09T23:17:44.028Z","avatar_url":"https://github.com/ravitemer.png","language":"JavaScript","funding_links":["https://github.com/sponsors/ravitemer","https://buymeacoffee.com/ravitemer"],"categories":["📚 Projects (1974 total)","🤖 AI/ML","NLP","MCP Servers","Developer Tools"],"sub_categories":["MCP Servers","Cloud \u0026 DevOps"],"readme":"# MCP Hub\n\n[![npm version](https://badge.fury.io/js/mcp-hub.svg)](https://www.npmjs.com/package/mcp-hub)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](./CONTRIBUTING.md)\n\nA centralized manager for Model Context Protocol (MCP) servers that provides:\n\n- Dynamic MCP server management and monitoring\n- REST API for tool execution and resource access\n- MCP Server marketplace (using Cline [marketplace](https://github.com/cline/mcp-marketplace))\n- Real-time server status tracking\n- Client connection management\n- Process lifecycle handling\n\n## Overview\n\n### Hub Server vs MCP Servers\n\n- **Hub Server (MCP Hub)**\n\n  - Central management server that connects to and manages multiple MCP servers\n  - Provides unified API endpoints for clients to access MCP server capabilities\n  - Handles server lifecycle, health monitoring, and client connections\n  - Routes requests between clients and appropriate MCP servers\n\n- **MCP Servers**\n  - Individual servers that provide specific tools and resources\n  - Each server has its own capabilities (tools, resources, templates)\n  - Connected to and managed by the Hub server\n  - Process requests from clients through the Hub\n\n## Installation\n\n```bash\nnpm install -g mcp-hub\n```\n\n## Basic Usage\n\nStart the hub server:\n\n```bash\nmcp-hub --port 3000 --config path/to/config.json\n```\n\n### CLI Options\n\n```bash\nOptions:\n  --port            Port to run the server on (default: 3000)\n  --config          Path to config file (required)\n  --watch           Watch config file for changes (default: false)\n  --shutdown-delay  Delay in milliseconds before shutting down when no clients are connected (default: 0)\n  -h, --help       Show help information\n```\n\nThe server outputs JSON-formatted status messages on startup and state changes:\n\n```json\n{\n  \"status\": \"ready\",\n  \"server_id\": \"mcp-hub\",\n  \"version\": \"1.0.0\",\n  \"port\": 3000,\n  \"pid\": 12345,\n  \"servers\": [],\n  \"timestamp\": \"2024-02-20T05:55:00.000Z\"\n}\n```\n\n## Nix\n\n### Nixpkgs install\n\n\u003e coming...\n\n### Flake install\n\nJust add it to your NixOS flake.nix or home-manager:\n\n```nix\ninputs = {\n  mcp-hub.url = \"github:ravitemer/mcp-hub\";\n  ...\n}\n```\n\nTo integrate mcp-hub to your NixOS/Home Manager configuration, add the following to your environment.systemPackages or home.packages respectively:\n\n```nix\ninputs.mcp-hub.packages.\"${system}\".default\n```\n\n### Usage without install\n\nIf you want to use mcphub.nvim without having mcp-hub server in your PATH you can link the server under the hood adding\nthe mcp-hub nix store path to the `cmd` command in the plugin config like\n\n[Nixvim](https://github.com/nix-community/nixvim) example:\n```nix\n{ mcphub-nvim, mcp-hub, ... }:\n{\n  extraPlugins = [mcphub-nvim];\n  extraConfigLua = ''\n    require(\"mcphub\").setup({\n        port = 3000,\n        config = vim.fn.expand(\"~/mcp-hub/mcp-servers.json\"),\n        cmd = \"${mcp-hub}/bin/mcp-hub\"\n    })\n  '';\n}\n\n# where\n{\n  # For nixpkgs (not available yet)\n  mcp-hub = pkgs.mcp-hub;\n\n  # For flakes\n  mcp-hub = inputs.mcp-hub.packages.\"${system}\".default;\n}\n```\n\n## Configuration\n\nMCP Hub uses a JSON configuration file to define managed servers:\n\n```json\n{\n  \"mcpServers\": {\n    \"stdio-server\": {\n      \"command\": \"npx\",\n      \"args\": [\"example-server\"],\n      \"env\": {\n        \"API_KEY\": \"\", // Will use process.env.API_KEY\n        \"DEBUG\": \"true\", // Will use this value\n        \"SECRET_TOKEN\": null // Will use process.env.SECRET_TOKEN\n      },\n      \"disabled\": false\n    },\n    \"sse-server\": {\n      \"url\": \"https://api.example.com/mcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer token\",\n        \"Content-Type\": \"application/json\"\n      },\n      \"disabled\": false\n    }\n  }\n}\n```\n\n### Configuration Options\n\nMCP Hub supports two types of servers: STDIO (local) and SSE (remote). The server type is automatically determined based on the configuration fields provided.\n\n#### STDIO Server Options\n\n- **command**: Command to start the local MCP server\n- **args**: Array of command line arguments\n- **env**: Environment variables for the server. If a variable is specified with a falsy value (empty string, null, undefined), it will fall back to using the corresponding system environment variable if available.\n- **disabled**: Whether the server is disabled (default: false)\n\n#### SSE Server Options\n\n- **url**: The URL of the remote SSE server endpoint\n- **headers**: Optional HTTP headers for the SSE connection (e.g., for authentication)\n- **disabled**: Whether the server is disabled (default: false)\n\n##### Server Type Detection\n\nThe server type (STDIO or SSE) is automatically determined based on the presence of specific fields:\n- If `command` is present → STDIO server\n- If `url` is present → SSE server\n\nNote: A server configuration cannot mix STDIO and SSE fields - it must be one type or the other.\n\n## Example Integrations\n\n### Neovim Integration\n\nThe [ravitemer/mcphub.nvim](https://github.com/ravitemer/mcphub.nvim) plugin provides seamless integration with Neovim, allowing direct interaction with MCP Hub from your editor:\n\n- Execute MCP tools directly from Neovim\n- Access MCP resources within your editing workflow\n- Real-time status updates in Neovim\n- Auto install mcp servers with marketplace addition\n\n## Logging\n\nMCP Hub uses structured JSON logging for all events:\n\n```json\n{\n  \"type\": \"error\",\n  \"code\": \"TOOL_ERROR\",\n  \"message\": \"Failed to execute tool\",\n  \"data\": {\n    \"server\": \"example-server\",\n    \"tool\": \"example-tool\",\n    \"error\": \"Invalid parameters\"\n  },\n  \"timestamp\": \"2024-02-20T05:55:00.000Z\"\n}\n```\n\nLog levels include:\n\n- `info`: Normal operational messages\n- `warn`: Warning conditions\n- `debug`: Detailed debug information\n- `error`: Error conditions (includes error code and details)\n\n## REST API\n\n### Health and Status\n\n#### Health Check\n\n```bash\nGET /api/health\n```\n\nResponse:\n\n```json\n{\n  \"status\": \"ok\",\n  \"server_id\": \"mcp-hub\",\n  \"version\": \"1.0.0\",\n  \"activeClients\": 2,\n  \"timestamp\": \"2024-02-20T05:55:00.000Z\",\n  \"servers\": []\n}\n```\n\n#### List MCP Servers\n\n```bash\nGET /api/servers\n```\n\n#### Get Server Info\n\n```bash\nPOST /api/servers/info\nContent-Type: application/json\n\n{\n  \"server_name\": \"example-server\"\n}\n```\n\n#### Refresh Server Capabilities\n\n```bash\nPOST /api/servers/refresh\nContent-Type: application/json\n\n{\n  \"server_name\": \"example-server\"\n}\n```\n\nResponse:\n\n```json\n{\n  \"status\": \"ok\",\n  \"server\": {\n    \"name\": \"example-server\",\n    \"capabilities\": {\n      \"tools\": [\"tool1\", \"tool2\"],\n      \"resources\": [\"resource1\", \"resource2\"],\n      \"resourceTemplates\": []\n    }\n  },\n  \"timestamp\": \"2024-02-20T05:55:00.000Z\"\n}\n```\n\n#### Refresh All Servers\n\n```bash\nPOST /api/refresh\n```\n\nResponse:\n\n```json\n{\n  \"status\": \"ok\",\n  \"servers\": [\n    {\n      \"name\": \"example-server\",\n      \"capabilities\": {\n        \"tools\": [\"tool1\", \"tool2\"],\n        \"resources\": [\"resource1\", \"resource2\"],\n        \"resourceTemplates\": []\n      }\n    }\n  ],\n  \"timestamp\": \"2024-02-20T05:55:00.000Z\"\n}\n```\n\n#### Start Server\n\n```bash\nPOST /api/servers/start\nContent-Type: application/json\n\n{\n  \"server_name\": \"example-server\"\n}\n```\n\nResponse:\n\n```json\n{\n  \"status\": \"ok\",\n  \"server\": {\n    \"name\": \"example-server\",\n    \"status\": \"connected\",\n    \"uptime\": 123\n  },\n  \"timestamp\": \"2024-02-20T05:55:00.000Z\"\n}\n```\n\n#### Stop Server\n\n```bash\nPOST /api/servers/stop?disable=true|false\nContent-Type: application/json\n\n{\n  \"server_name\": \"example-server\"\n}\n```\n\nThe optional `disable` query parameter can be set to `true` to disable the server in the configuration.\n\nResponse:\n\n```json\n{\n  \"status\": \"ok\",\n  \"server\": {\n    \"name\": \"example-server\",\n    \"status\": \"disconnected\",\n    \"uptime\": 0\n  },\n  \"timestamp\": \"2024-02-20T05:55:00.000Z\"\n}\n```\n\n### Client Management\n\n#### Register Client\n\n```bash\nPOST /api/client/register\n{\n  \"clientId\": \"unique_client_id\"\n}\n```\n\n#### Unregister Client\n\n```bash\nPOST /api/client/unregister\n{\n  \"clientId\": \"unique_client_id\"\n}\n```\n\n### Marketplace Integration\n\n#### List Available Servers\n\n```bash\nGET /api/marketplace\n```\n\nQuery Parameters:\n\n- `search`: Filter by name, description, or tags\n- `category`: Filter by category\n- `tags`: Filter by comma-separated tags\n- `sort`: Sort by \"newest\", \"stars\", or \"name\"\n\nResponse:\n\n```json\n{\n  \"items\": [\n    {\n      \"mcpId\": \"github.com/user/repo/server\",\n      \"name\": \"Example Server\",\n      \"description\": \"Description here\",\n      \"category\": \"search\",\n      \"tags\": [\"search\", \"ai\"],\n      \"githubStars\": 100,\n      \"isRecommended\": true,\n      \"createdAt\": \"2024-02-20T05:55:00.000Z\"\n    }\n  ],\n  \"timestamp\": \"2024-02-20T05:55:00.000Z\"\n}\n```\n\n#### Get Server Details\n\n```bash\nPOST /api/marketplace/details\nContent-Type: application/json\n\n{\n  \"mcpId\": \"github.com/user/repo/server\"\n}\n```\n\nResponse:\n\n```json\n{\n  \"server\": {\n    \"mcpId\": \"github.com/user/repo/server\",\n    \"name\": \"Example Server\",\n    \"description\": \"Description here\",\n    \"githubUrl\": \"https://github.com/user/repo\",\n    \"readmeContent\": \"# Server Documentation...\",\n    \"llmsInstallationContent\": \"Installation guide...\"\n  },\n  \"timestamp\": \"2024-02-20T05:55:00.000Z\"\n}\n```\n\n### MCP Server Operations\n\n#### Execute Tool\n\n```bash\nPOST /api/servers/tools\nContent-Type: application/json\n\n{\n  \"server_name\": \"example-server\",\n  \"tool\": \"tool_name\",\n  \"arguments\": {}\n}\n```\n\n#### Access Resource\n\n```bash\nPOST /api/servers/resources\nContent-Type: application/json\n\n{\n  \"server_name\": \"example-server\",\n  \"uri\": \"resource://uri\"\n}\n```\n\n#### Get Prompt\n\n```bash\nPOST /api/servers/prompts\nContent-Type: application/json\n\n{\n  \"server_name\": \"example-server\",\n  \"prompt\": \"prompt_name\",\n  \"arguments\": {}\n}\n```\n\nResponse:\n\n```json\n{\n  \"result\": {\n    \"messages\": [\n      {\n        \"role\": \"assistant\",\n        \"content\": {\n          \"type\": \"text\",\n          \"text\": \"Text response example\"\n        }\n      },\n      {\n        \"role\": \"assistant\",\n        \"content\": {\n          \"type\": \"image\",\n          \"data\": \"base64_encoded_image_data\",\n          \"mimeType\": \"image/png\"\n        }\n      }\n    ]\n  },\n  \"timestamp\": \"2024-02-20T05:55:00.000Z\"\n}\n```\n\n#### Restart Hub\n\n```bash\nPOST /api/restart\n```\n\nReloads the configuration file and restarts all MCP servers.\n\nResponse:\n\n```json\n{\n  \"status\": \"ok\",\n  \"timestamp\": \"2024-02-20T05:55:00.000Z\"\n}\n```\n\n## Real-time Updates\n\nThe Hub Server provides real-time updates via Server-Sent Events (SSE) at `/api/events`. Connect to this endpoint to receive real-time updates about server status, client connections, and capability changes.\n\n### Event Types\n\n1. **server_info** - Initial connection information\n\n```json\n{\n  \"server_id\": \"mcp-hub\",\n  \"version\": \"1.0.0\",\n  \"status\": \"connected\",\n  \"pid\": 12345,\n  \"port\": 3000,\n  \"activeClients\": 1,\n  \"timestamp\": \"2024-02-20T05:55:00.000Z\"\n}\n```\n\n2. **server_ready** - Server started and ready\n\n```json\n{\n  \"status\": \"ready\",\n  \"server_id\": \"mcp-hub\",\n  \"version\": \"1.0.0\",\n  \"port\": 3000,\n  \"pid\": 12345,\n  \"servers\": [],\n  \"timestamp\": \"2024-02-20T05:55:00.000Z\"\n}\n```\n\n3. **client_registered/unregistered** - Client connection events\n\n```json\n{\n  \"activeClients\": 2,\n  \"clientId\": \"client_123\",\n  \"timestamp\": \"2024-02-20T05:55:00.000Z\"\n}\n```\n\n4. **tool_list_changed** - Server's tools list has changed\n\n```json\n{\n  \"type\": \"TOOL\",\n  \"server\": \"example-server\",\n  \"tools\": [\"tool1\", \"tool2\"],\n  \"timestamp\": \"2024-02-20T05:55:00.000Z\"\n}\n```\n\n5. **resource_list_changed** - Server's resources list has changed\n\n```json\n{\n  \"type\": \"RESOURCE\",\n  \"server\": \"example-server\",\n  \"resources\": [\"resource1\", \"resource2\"],\n  \"resourceTemplates\": [],\n  \"timestamp\": \"2024-02-20T05:55:00.000Z\"\n}\n```\n\n6. **prompt_list_changed** - Server's prompts list has changed\n\n```json\n{\n  \"type\": \"PROMPT\",\n  \"server\": \"example-server\",\n  \"prompts\": [\"prompt1\", \"prompt2\"],\n  \"timestamp\": \"2024-02-20T05:55:00.000Z\"\n}\n```\n\n## Error Handling\n\nMCP Hub implements a comprehensive error handling system with custom error classes for different types of errors:\n\n### Error Classes\n\n- **ConfigError**: Configuration-related errors (invalid config, missing fields)\n- **ConnectionError**: Server connection issues (failed connections, transport errors)\n- **ServerError**: Server startup/initialization problems\n- **ToolError**: Tool execution failures\n- **ResourceError**: Resource access issues\n- **ValidationError**: Request validation errors\n\nEach error includes:\n\n- Error code for easy identification\n- Detailed error message\n- Additional context in the details object\n- Stack trace for debugging\n\nExample error structure:\n\n```json\n{\n  \"code\": \"CONNECTION_ERROR\",\n  \"message\": \"Failed to communicate with server\",\n  \"details\": {\n    \"server\": \"example-server\",\n    \"error\": \"connection timeout\"\n  },\n  \"timestamp\": \"2024-02-20T05:55:00.000Z\"\n}\n```\n\n### Error Categories\n\n1. **Configuration Errors**\n\n   - Invalid config format\n   - Missing required fields\n   - Environment variable issues\n\n2. **Server Management Errors**\n\n   - Connection failures\n   - Lost connections\n   - Capability fetch issues\n   - Server startup problems\n\n3. **Request Processing Errors**\n\n   - Invalid parameters\n   - Server availability\n   - Tool execution failures\n   - Resource access issues\n\n4. **Client Management Errors**\n   - Registration failures\n   - Duplicate registrations\n   - Invalid client IDs\n\n## Architecture\n\n### Hub Server Lifecycle\n\n```mermaid\nsequenceDiagram\n    participant H as Hub Server\n    participant M1 as MCP Server 1\n    participant M2 as MCP Server 2\n    participant C as Client\n\n    Note over H: Server Start\n    activate H\n    H-\u003e\u003e+M1: Connect\n    M1--\u003e\u003e-H: Connected + Capabilities\n    H-\u003e\u003e+M2: Connect\n    M2--\u003e\u003e-H: Connected + Capabilities\n\n    Note over C,H: Client Interactions\n    C-\u003e\u003eH: Register Client\n    H--\u003e\u003eC: Servers List \u0026 Capabilities\n    \n    C-\u003e\u003eH: Call Tool (M1)\n    H-\u003e\u003eM1: Execute Tool\n    M1--\u003e\u003eH: Tool Result\n    H--\u003e\u003eC: Response\n\n    C-\u003e\u003eH: Access Resource (M2)\n    H-\u003e\u003eM2: Get Resource\n    M2--\u003e\u003eH: Resource Data\n    H--\u003e\u003eC: Response\n\n    Note over H: Server Management\n    H-\u003e\u003eH: Monitor Server Health\n    H-\u003e\u003eH: Track Server Status\n    H-\u003e\u003eH: Update Capabilities\n\n    Note over H: Shutdown Process\n    C-\u003e\u003eH: Unregister\n    H-\u003e\u003eM1: Disconnect\n    H-\u003e\u003eM2: Disconnect\n    deactivate H\n```\n\nThe Hub Server coordinates communication between clients and MCP servers:\n\n1. Starts and connects to configured MCP servers\n2. Manages client registrations\n3. Routes tool execution and resource requests\n4. Handles server monitoring and health checks\n5. Performs clean shutdown of all connections\n\n### MCP Server Management\n\n```mermaid\nflowchart TB\n    A[Hub Server Start] --\u003e B{Config Available?}\n    B --\u003e|Yes| C[Load Server Configs]\n    B --\u003e|No| D[Use Default Settings]\n    \n    C --\u003e E[Initialize Connections]\n    D --\u003e E\n    \n    E --\u003e F{For Each MCP Server}\n    F --\u003e|Enabled| G[Attempt Connection]\n    F --\u003e|Disabled| H[Skip Server]\n    \n    G --\u003e I{Connection Status}\n    I --\u003e|Success| J[Fetch Capabilities]\n    I --\u003e|Failure| K[Log Error]\n    \n    J --\u003e L[Store Server Info]\n    K --\u003e M[Mark Server Unavailable]\n    \n    L --\u003e N[Monitor Health]\n    M --\u003e N\n    \n    N --\u003e O{Health Check}\n    O --\u003e|Healthy| P[Update Capabilities]\n    O --\u003e|Unhealthy| Q[Attempt Reconnect]\n    \n    Q --\u003e|Success| P\n    Q --\u003e|Failure| R[Update Status]\n    \n    P --\u003e N\n    R --\u003e N\n```\n\nThe Hub Server actively manages MCP servers through:\n\n1. Configuration-based server initialization\n2. Connection and capability discovery\n3. Health monitoring and status tracking\n4. Automatic reconnection attempts\n5. Server state management\n\n### Request Handling\n\n```mermaid\nsequenceDiagram\n    participant C as Client\n    participant H as Hub Server\n    participant M as MCP Server\n    \n    Note over C,H: Tool Execution Flow\n    C-\u003e\u003eH: POST /api/servers/{name}/tools\n    H-\u003e\u003eH: Validate Request\n    H-\u003e\u003eH: Check Server Status\n    \n    alt Server Not Connected\n        H--\u003e\u003eC: Error: Server Unavailable\n    else Server Connected\n        H-\u003e\u003eM: Execute Tool\n        \n        alt Tool Success\n            M--\u003e\u003eH: Tool Result\n            H--\u003e\u003eC: Success Response\n        else Tool Error\n            M--\u003e\u003eH: Error Details\n            H--\u003e\u003eC: Error Response\n        end\n    end\n    \n    Note over C,H: Resource Access Flow\n    C-\u003e\u003eH: POST /api/servers/{name}/resources\n    H-\u003e\u003eH: Validate URI\n    H-\u003e\u003eH: Check Server Status\n    \n    alt Valid Resource\n        H-\u003e\u003eM: Request Resource\n        M--\u003e\u003eH: Resource Data\n        H--\u003e\u003eC: Resource Content\n    else Invalid Resource\n        H--\u003e\u003eC: 404 Not Found\n    end\n```\n\nAll client requests follow a standardized flow:\n\n1. Request validation\n2. Server status verification\n3. Request routing to appropriate MCP server\n4. Response handling and error management\n\n## Requirements\n\n- Node.js \u003e= 18.0.0\n\n## Todo\n\n- [ ] Implement custom marketplace rather than depending on mcp-marketplace\n\n## Acknowledgements\n\n- [Cline mcp-marketplace](https://github.com/cline/mcp-marketplace) - For providing the MCP server marketplace endpoints that power MCP Hub's marketplace integration\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fravitemer%2Fmcp-hub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fravitemer%2Fmcp-hub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fravitemer%2Fmcp-hub/lists"}