Skip to main content
Glama
keithrawlingsbrown

refinex-mcp

README.md
# refinex-mcp

MCP server for [RefineX](https://www.refinex.io) — AWS spot price arbitrage signals with deterministic confidence scoring, delivered as MCP tools for Claude Code and Cursor.

```bash
pip install refinex-mcp
```

## What it does

RefineX monitors AWS spot prices across 5 regions and surfaces arbitrage opportunities as structured signals. This MCP server wraps the RefineX REST API so you can query live spot data directly inside Claude Code or any MCP-compatible AI tool.

```
get_live_signal → buy_spot c6i.xlarge us-west-2b $0.0626 spot vs $0.17 on-demand (63% discount, confidence 0.72)
```

119 signals detected, 118 suppressed. Only the best one fires.

## Tools

### No API key required

| Tool | Description |
|------|-------------|
| `get_live_signal` | Single best active spot arbitrage signal right now |
| `get_suppression_log` | Mix of delivered + suppressed signals — shows what was held back and why |
| `get_health` | API health + last AWS data ingestion timestamp |

### Requires `REFINEX_API_KEY`

| Tool | Description |
|------|-------------|
| `list_signals` | Paginated list of active signals with filters (cloud, region, instance type, confidence) |
| `get_signal_for_instance` | Best action for a specific cloud/region/instance — built for autoscalers |
| `get_signals_summary` | Aggregate: total opportunities, avg savings %, top instance types by cloud |

## Setup

### Claude Code

Add to `~/.claude/settings.json`:

```json
{
  "mcpServers": {
    "refinex": {
      "command": "refinex-mcp",
      "env": {
        "REFINEX_API_KEY": "your-key-here"
      }
    }
  }
}
```

No API key? `get_live_signal` and `get_suppression_log` work without one.

### Cursor / other MCP clients

```json
{
  "mcp": {
    "servers": {
      "refinex": {
        "command": "refinex-mcp",
        "env": {
          "REFINEX_API_KEY": "your-key-here"
        }
      }
    }
  }
}
```

## Example responses

### `get_live_signal` (no auth)

```json
{
  "action": "buy_spot",
  "cloud": "aws",
  "region": "us-west-2",
  "availability_zone": "us-west-2b",
  "instance_type": "c6i.xlarge",
  "spot_price_usd": 0.0626,
  "on_demand_price_usd": 0.17,
  "discount_pct": 63.18,
  "confidence": 0.72,
  "ttl_minutes": 28,
  "suppressed_last_6h": 119,
  "signal_id": "e12d4faf-750c-4f4c-933b-260364e47f2f"
}
```

### `get_suppression_log` (no auth)

```json
{
  "signals": [...],
  "count": 20,
  "delivered": 3,
  "suppressed": 17,
  "suppression_rate": 85.0
}
```

High suppression rate is intentional. RefineX fires fewer, better signals.

### `get_signal_for_instance` (API key required)

```json
{
  "action": "buy_spot",
  "signal": {
    "source": { "cloud": "aws", "region": "us-east-1", "availability_zone": "us-east-1a" },
    "asset": { "instance_type": "m6i.large", "current_spot_price": 0.034, "on_demand_price": 0.096 },
    "confidence": 0.85,
    "ttl": 600
  },
  "alternatives": [
    { "availability_zone": "us-east-1b", "current_spot_price": 0.038, "confidence": 0.79 }
  ]
}
```

## Environment variables

| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `REFINEX_API_KEY` | For authenticated tools | — | Your RefineX API key |
| `REFINEX_API_BASE_URL` | No | `https://refinex-api.onrender.com` | Override for self-hosted |

## Signal anatomy

- **confidence**: 0.0–1.0, deterministic — computed from price history, volatility, and AZ spread. No LLM scoring.
- **action**: `buy_spot` / `migrate_spot` / `wait` / `use_on_demand`
- **ttl_minutes**: how long the signal is valid. Treat it as stale after expiry.
- **suppressed_last_6h**: signals detected but not delivered. Suppression is a feature, not a gap.

## Get an API key

Early Access is free for 90 days: [refinex.io](https://www.refinex.io)

## Links

- Website: [refinex.io](https://www.refinex.io)
- Live signal: [refinex-api.onrender.com/v1/signals/now](https://refinex-api.onrender.com/v1/signals/now)
- Suppression log: [refinex.io/transparency](https://www.refinex.io/transparency)
- API docs: [refinex-api.onrender.com/docs](https://refinex-api.onrender.com/docs)

TDQS

A4.4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: health check, best signal, per-instance signal, aggregate summary, suppression log, and paginated list. No overlap in functionality.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case, e.g., get_health, get_live_signal, list_signals. No deviations.

Tool Count5/5

With 6 tools, the set is well-scoped for a focused API providing spot arbitrage signals. Each tool earns its place without being excessive or insufficient.

Completeness4/5

The tool surface covers health, best signal, per-instance queries, summaries, suppression logs, and listing. A minor gap is the lack of a direct 'get_signal_by_id' endpoint, but list_signals with filtering can serve that purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues