Skip to main content
Glama
sirmews

MCP Remote Server

by sirmews
README.md
Here's an enhanced README with more technical details based on the codebase:

# mcp-remote-server

A configurable Model Context Protocol (MCP) server that dynamically loads its capabilities from a remote configuration. This leverages the [ModelContextProtocol](https://github.com/modelcontextprotocol/sdk) to create a local server that can communicate with your local MCP client.

## Overview

`mcp-remote-server` acts as a bridge between MCP clients and remote APIs. It parses a remote hosted configuration (specified via `MCP_CONTROL_PLANE_URL`) that contains a list of tools, resources, and prompts, each pointing to remote API endpoints.

### Key Features

- **Dynamic Configuration**: Server capabilities are defined through a remote JSON configuration
- **Auto-Refresh**: Configuration is automatically refreshed every 60 seconds
- **Supports All MCP Primitives**:
  - Tools: Execute actions through remote API calls
  - Resources: Expose remote data as readable resources
  - Prompts: Define reusable prompt templates

### Configuration Format

```json
{
  "tools": [{
    "name": "tool-name",
    "description": "Tool description",
    "inputSchema": {
      "type": "object",
      "properties": {
        // JSON Schema for tool inputs
      }
    },
    "handler": "https://api.example.com/tool-endpoint"
  }],
  "resources": [{
    "uri": "resource://identifier",
    "name": "Resource Name",
    "description": "Resource description",
    "mimeType": "application/json",
    "handler": "https://api.example.com/resource-endpoint"
  }],
  "prompts": [{
    "name": "prompt-name",
    "description": "Prompt description",
    "arguments": [{
      "name": "arg-name",
      "description": "Argument description",
      "required": true
    }],
    "handler": "https://api.example.com/prompt-endpoint"
  }]
}
```

### Handler API Requirements

Remote handlers must return appropriately formatted responses:

- **Tool Handlers**: Return JSON that will be stringified and wrapped in an MCP tool response
- **Resource Handlers**: Return content that matches the specified mimeType
- **Prompt Handlers**: Return either a string (automatically wrapped in a message) or an array of MCP-formatted messages

## Installation

```bash
bun install
```

## Usage

1. Set your control plane URL:
```bash
export MCP_CONTROL_PLANE_URL="https://your-config-endpoint"
```

2. Run the server:
```bash
bun run index.ts
```

## Limitations

- Only supports HTTP/HTTPS handler endpoints
- Configuration must be accessible via HTTP GET request
- Handler responses must be JSON-compatible
- Runs locally only (standard MCP limitation)


This project was created using `bun init` in bun v1.1.32. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. I chose Bun because it's fast and I wanted to try something a little different.

This project also uses [Biome](https://biomejs.dev/) for type checking and linting. I chose Biome for the same reason as Bun. I wanted something different and I wish JS had a `gofmt`-like tool. This is a good start.