Skip to main content
Glama
keithrawlingsbrown

refinex-mcp

refinex-mcp

MCP server for RefineX — AWS spot price arbitrage signals with deterministic confidence scoring, delivered as MCP tools for Claude Code and Cursor.

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.

Related MCP server: claude-aws-mcp

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:

{
  "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

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

Example responses

get_live_signal (no auth)

{
  "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)

{
  "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)

{
  "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

Available Tools

6 tools
get_healthA

Get RefineX API health and last AWS data ingestion timestamp. No API key required.

Returns:

  • status: "healthy" | "degraded"

  • version: API version string

  • timestamp: current server time (UTC ISO-8601)

  • clouds.aws.status: "active" | "degraded"

  • clouds.aws.last_ingestion: ISO-8601 timestamp of last AWS price poll

  • clouds.aws.realtime: true (live AWS data as of 2026-03-26)

Use this to verify real-time data is flowing before making infrastructure decisions. If aws.status is "degraded", last_ingestion is >10 minutes old.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the return structure and adds behavioral context: 'If aws.status is degraded, last_ingestion is >10 minutes old.' It does not discuss rate limits or security beyond lacking an API key, but the tool is read-only and simple.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise: two sentences plus a bullet list. It front-loads the purpose, then provides usage context and return fields with no fluff. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and no output schema, the description is fully complete. It covers what the tool returns, how to interpret it, and when to use it. Sibling tools are clearly different.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so baseline is 4 per calibration. Description does not need to add parameter information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves RefineX API health and last AWS data ingestion timestamp. It lists specific return fields, making the purpose unambiguous. It is distinct from sibling tools which focus on signals.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance: 'No API key required' and 'Use this to verify real-time data is flowing before making infrastructure decisions.' It also explains the meaning of degraded status. It does not mention alternatives, but siblings are unrelated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_live_signalA

Get the single best active AWS spot arbitrage signal right now. No API key required.

Returns the highest-confidence active signal including:

  • action: "buy_spot" | "migrate_spot" | "wait" | "use_on_demand"

  • cloud, region, availability_zone, instance_type

  • spot_price_usd, on_demand_price_usd, discount_pct

  • confidence (0.0–1.0, deterministic — no LLM scoring)

  • ttl_minutes: how long this signal is valid

  • suppressed_last_6h: signals detected but held back in last 6 hours

  • signal_id: use this to reference a specific signal

If no signal clears the confidence threshold, returns action="use_on_demand" with a rationale. suppressed_last_6h will still be populated.

This is the fastest way to get real AWS spot data — zero credentials needed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Disclosures include: confidence is deterministic (no LLM scoring), TTL, suppression history, fallback behavior. No annotations provided, so description carries full burden; it is thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured: purpose first, key features, detailed return fields, fallback. No fluff, every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but description comprehensively explains return fields and behavior. No missing context given zero parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist; schema coverage is 100%. Baseline is 4 as description adds no parameter info (unnecessary).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get', the resource 'active AWS spot arbitrage signal', and the scope 'single best active'. It distinguishes from siblings like get_signal_for_instance and list_signals.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly notes 'No API key required' and 'fastest way', indicating when to use. However, it does not explicitly state when not to use or contrast with alternatives beyond speed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_signal_for_instanceA

Get the single best spot action for a specific cloud/region/instance type. Optimized for autoscalers that need one clear, deterministic action. Requires REFINEX_API_KEY env var.

Args: cloud: Cloud provider — "aws", "gcp", or "azure" region: AWS region, e.g. "us-east-1", "us-west-2", "eu-west-1" instance_type: EC2 instance type, e.g. "m6i.large", "c7g.xlarge", "t3.medium" fallback: What to return when no signal exists — "on_demand" (default), "wait", or "none"

Returns:

  • action: "buy_spot" | "migrate_spot" | "wait" | "use_on_demand"

  • signal{}: full signal detail for the chosen action

  • alternatives[]: other AZs for the same instance type, with their prices/confidence

Use fallback="on_demand" in CI/CD pipelines so you always get a safe default. Use fallback="wait" in cost-sensitive batch jobs.

ParametersJSON Schema
NameRequiredDescriptionDefault
cloudYes
regionYes
instance_typeYes
fallbackNoon_demand

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent, so description handles transparency fully. It discloses the required environment variable (REFINEX_API_KEY) and outlines the return structure (action, signal, alternatives). It does not mention rate limits or error conditions, but the core behavioral traits are well-covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (Args, Returns, usage guidance) and every sentence earns its place without redundancy. It is concise yet comprehensive, covering all necessary details in a compact format.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and 0% schema coverage, the description is fully self-contained. It explains purpose, all parameters, return format, environment variable requirement, and usage guidance. No additional information is needed for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema provides no parameter descriptions (0% coverage), but the description compensates excellently. It explains each parameter: cloud provider options, region format with examples, instance type examples, and fallback options with defaults. It also clarifies the return values, adding essential meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool retrieves 'the single best spot action' for a specific cloud/region/instance type, using specific verbs and resource identifiers. It distinguishes itself from siblings like 'get_live_signal' or 'get_signals_summary' by targeting autoscalers needing a single deterministic action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states it is optimized for autoscalers and provides detailed guidance on when to use each fallback option: 'on_demand' for CI/CD pipelines, 'wait' for cost-sensitive batch jobs. This gives clear context for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_signals_summaryA

Get aggregate summary of current AWS spot opportunities. Requires REFINEX_API_KEY env var.

Args: cloud: Filter by cloud provider (optional) region: Filter by region (optional) min_savings: Minimum savings % to include in summary (default: 50.0) confidence_min: Minimum confidence score (default: 0.80)

Returns:

  • summary{total_signals, spot_arbitrage, interruption_risk, avg_savings_percent, avg_confidence}

  • by_cloud{aws: {signals, avg_savings_percent, top_instance_types[]}}

  • ttl: cache validity in seconds

  • next_update: ISO-8601 timestamp when summary refreshes

Use this for dashboards or periodic CI checks: "How many high-confidence deals exist right now, and in which regions?"

ParametersJSON Schema
NameRequiredDescriptionDefault
cloudNo
regionNo
min_savingsNo
confidence_minNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the required REFINEX_API_KEY, describes the return structure (summary, by_cloud, ttl, next_update), and mentions cache validity. It does not cover error handling or rate limits, but overall provides solid behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with sections: overall purpose, env var requirement, parameter list, return details, and an example query. Every sentence adds value, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 4 optional parameters, no output schema, and moderate complexity, the description covers purpose, parameters, return structure, and usage context. It lacks details on error handling or rate limits, but is mostly complete for an aggregation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, meaning no parameter descriptions in the JSON schema. The description fully compensates by listing all parameters (cloud, region, min_savings, confidence_min) with clear descriptions and defaults, adding significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Get aggregate summary of current AWS spot opportunities,' which clearly identifies the action (get aggregate summary) and resource (AWS spot opportunities). Sibling tools like list_signals, get_live_signal, and get_signal_for_instance focus on individual signals or listings, making this tool distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a clear use case: 'Use this for dashboards or periodic CI checks: How many high-confidence deals exist right now, and in which regions?' It also mentions the required environment variable. However, it does not explicitly state when NOT to use it or name alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_suppression_logA

Get the RefineX suppression log — a mix of delivered and suppressed signals. Shows what RefineX fired vs. what it held back and why. No API key required.

Args: limit: Number of signals to return (1–20, default 20)

Returns:

  • signals[]: each has region, instance_type, confidence, savings_pct, action, suppressed (bool), suppression_reason

  • count: total signals returned

  • delivered: signals that cleared the confidence threshold

  • suppressed: signals that were detected but held back

  • suppression_rate: percentage suppressed (e.g. 65.0 means 65% held back)

Suppression reasons: "confidence_below_threshold", "stale_data", "ttl_expired". A high suppression rate is intentional — discipline is the product.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that no API key is needed, describes the output structure in detail, and explains the meaning of suppression reasons and rate. It does not mention any potential side effects or rate limits, but the read-only nature is implied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections for Args and Returns, and uses bullet points. Some phrasing, like 'discipline is the product', adds personality but does not harm conciseness. Slightly longer than strictly necessary but still efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and no output schema, the description covers the output fields, suppression reasons, and the significance of the suppression rate. It does not explicitly relate to sibling tools, but the context signals are informative enough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explicitly defines the 'limit' parameter with its range (1–20) and default value (20), adding semantics beyond the schema which only specifies type and default. The schema description coverage is 0%, so this added value is essential.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get the RefineX suppression log — a mix of delivered and suppressed signals' and explains what it shows, distinguishing it from sibling tools like get_live_signal and get_signals_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as get_live_signal or list_signals. The only usage note is 'No API key required', but no comparative context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_signalsA

List active spot arbitrage signals with optional filters. Requires REFINEX_API_KEY env var.

Args: cloud: Cloud provider — "aws", "gcp", or "azure" (default: "aws") region: Filter by region, e.g. "us-east-1", "us-west-2" (optional) instance_type: Filter by EC2 type, e.g. "m6i.large", "c7g.xlarge" (optional) confidence_min: Minimum confidence score 0.0–1.0 (default: 0.0) page: Page number (default: 1) limit: Results per page, max 500 (default: 50)

Returns:

  • signals[]: each has signal_id, type, source{cloud, region, az}, asset{instance_type, spot_price, on_demand_price}, action, expected_value{savings_percent}, confidence, ttl, expires_at

  • count: signals on this page

  • page, total_pages, next: pagination info

ParametersJSON Schema
NameRequiredDescriptionDefault
cloudNoaws
regionNo
instance_typeNo
confidence_minNo
pageNo
limitNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that the tool lists 'active' signals, requires an env var, and supports filtering and pagination. It does not explicitly state read-only or non-destructive behavior, nor rate limits, but the read nature is inferred. Adequate but not explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with Args and Returns sections, front-loading purpose and requirement. It is somewhat verbose with examples, but clear and organized. Minor conciseness improvements possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For 6 parameters and no output schema, the description covers all parameters and explicitly lists return fields (signals array, count, pagination). It does not mention error handling or edge cases, but is otherwise complete for a list endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must compensate. It provides detailed parameter descriptions including defaults, examples, constraints (e.g., limit max 500), and context (e.g., confidence_min range). This adds significant value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List active spot arbitrage signals with optional filters', specifying a specific verb and resource. It distinguishes itself from sibling tools like get_live_signal and get_signal_for_instance by focusing on listing multiple signals with filters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions the required REFINEX_API_KEY env var and explains optional filters and pagination. However, it does not explicitly state when to use this tool versus alternatives (e.g., get_live_signal for real-time signals), leaving the usage context somewhat implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.4/5.0
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
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables querying, inserting, and managing unstructured data in RawTree via SQL, JSON ingestion, and log inspection through MCP clients like Claude Code, Cursor, and Claude Desktop.
    12
    15
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Exposes analytics from Claude Code transcripts as MCP tools, enabling cost, audit, safety, and efficiency queries through natural language.
    4
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Hosted Amazon market-intelligence MCP for Claude and ChatGPT: query brands, sellers, ASINs, under-competed niches, the cross-seller operator network, observed buy-box history, and Amazon/Walmart cross-marketplace overlap. 65 read-only research tools over a pre-collected research dataset.
    1
    72
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/keithrawlingsbrown/refinex-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server