ironscout

Read-only ammo pricing: offer search, caliber market snapshots, retailer directory. Descriptive.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
66%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,039Tokens (tool definitions)
~1.1 KBTypical response size
Moderate attention impact (0.81% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "ironscout": {
      "url": "https://mcp.ironscout.ai/mcp"
    }
  }
}

Remote endpoints

https://mcp.ironscout.ai/mcpstreamable-http

What it can do

Tool inventory

Tools (5)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_offers(q, caliber, brand, grain, case, ...)

Search canonical ammunition products and their current per-retailer offers. Results are descriptive only — prices, availability, $/round, observation time, and provenance, with no verdicts, scores, or recommendations. Use each offer's `outUrl` for outbound links (do not rewrite it). `sort` is a mechanical ordering, never a judgement.

Input Schema

{
  "type": "object",
  "properties": {
    "q": {
      "description": "Free-text query over product name/brand/description.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "caliber": {
      "description": "Canonical caliber, e.g. \"9mm\" or \".223/5.56\".",
      "type": "string",
      "minLength": 1,
      "maxLength": 60
    },
    "brand": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "grain": {
      "description": "Bullet weight in grains.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 2000
    },
    "case": {
      "description": "Case material, e.g. \"Brass\", \"Steel\".",
      "type": "string",
      "minLength": 1,
      "maxLength": 40
    },
    "roundCountMin": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "roundCountMax": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "inStock": {
      "description": "When true, only products with in-stock offers are returned.",
      "type": "boolean"
    },
    "sort": {
      "description": "Mechanical ordering only. Defaults to pricePerRoundAsc.",
      "type": "string",
      "enum": [
        "pricePerRoundAsc",
        "pricePerRoundDesc",
        "observedAtDesc"
      ]
    },
    "page": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 1000
    },
    "pageSize": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 50
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_product(canonicalProductId)

Fetch a single canonical product by its `canonicalProductId`, with current per-retailer offers. Descriptive only. Returns an `error_v1` body with `NOT_FOUND` if the id is unknown.

Input Schema

{
  "type": "object",
  "properties": {
    "canonicalProductId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "description": "Canonical product id (CUID) from search results."
    }
  },
  "required": [
    "canonicalProductId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_market_snapshot(caliber, windowDays)

Caliber-level price distribution (median, p25, p75, min, max) over a rolling window. Purely descriptive statistics with methodology and sample counts; never a forecast or recommendation. Returns `error_v1` `NOT_FOUND` when no snapshot exists for the caliber/window. When `extremaSuppressedByPolicy` is `true`, `min`, `max` and both `segments.*.min` / `segments.*.max` are `null` BY POLICY rather than for lack of data: that caliber's published extremes are withheld pending revalidation. The median, quartiles, `p95`, segment medians and counts remain valid and complete — `p95` is a percentile over the whole window rather than a single observation, so it is not withheld. Do not infer or substitute a floor for those calibers, and do not treat `p95` as a stand-in for the withheld `max`. This is distinct from `dataStatus: "INSUFFICIENT_DATA"`, which means the sample was too thin to compute anything.

Input Schema

{
  "type": "object",
  "properties": {
    "caliber": {
      "type": "string",
      "minLength": 1,
      "maxLength": 60,
      "description": "Canonical caliber, e.g. \"9mm\"."
    },
    "windowDays": {
      "description": "Rolling window in days. 7 or 30; defaults to 30.",
      "anyOf": [
        {
          "type": "number",
          "const": 7
        },
        {
          "type": "number",
          "const": 30
        }
      ]
    }
  },
  "required": [
    "caliber"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_calibers

Enumerate every canonical caliber IronScout recognizes, each flagged with whether a current market snapshot exists and its sample count. Calibers without a snapshot are still listed (with `hasSnapshot: false`).

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_retailers

List currently eligible/visible retailers. Ineligible retailers are omitted entirely (fail-closed, ADR-005). Descriptive directory only.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Recommended Prompts

search_research
Search for information about [topic] using ironscout
Expected tools: search_offers
find_specific
Find [specific item] using ironscout
Expected tools: search_offers
retrieve_data
Get details about [item] from ironscout
Expected tools: get_product
fetch_info
Fetch [information type] using ironscout
Expected tools: get_product
list_items
List all [items] available in ironscout
Expected tools: list_calibers

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded5 tools
verifiedversion not recorded5 tools
verifiedversion not recorded5 tools
verifiedversion not recorded5 tools
verifiedversion not recorded5 tools
verifiedversion not recorded5 tools