Skip to main content
Glama
IamMichael23

rangeview-mcp

by IamMichael23

rangeview-mcp

MCP server for read-only access to the Rangeview Sports product catalog — ~5,600 products across firearms, ammunition, optics, reloading and accessories.

Backed by the store's public WooCommerce Store API. No credentials required. Read-only by design: nothing in this server can add to a cart, place an order, or write anything.

Install

git clone https://github.com/IamMichael23/rangeview-mcp.git
cd rangeview-mcp
npm install && npm run build

Related MCP server: ikea-mcp

Use it with Codex

Add to ~/.codex/config.toml:

[mcp_servers.rangeview]
command = "node"
args = ["/absolute/path/to/rangeview-mcp/dist/index.js"]

Use it with Claude Code

claude mcp add rangeview -- node /absolute/path/to/rangeview-mcp/dist/index.js

Or commit a .mcp.json in your project to share it with collaborators:

{
  "mcpServers": {
    "rangeview": {
      "command": "node",
      "args": ["/absolute/path/to/rangeview-mcp/dist/index.js"]
    }
  }
}

Tools

Tool

Purpose

search_products

Free-text + category, caliber, brand, price, stock and sale filters

get_product

Full detail for one product by id, slug, or SKU

list_categories

Walk the 376-category tree

list_filter_values

Discover the 83 filterable attributes and their valid values

check_availability

Bulk price/stock lookup for up to 20 items

"What bolt-action rifles in 6.5 Creedmoor do they have in stock under $2000?"
"Is SKU 20260728001 still available?"
"What calibers do they carry the most of?"

Two problems this server exists to solve

Anything that just proxies the Store API straight through will get both of these wrong.

1. A raw product is ~1,300 tokens, and 81% of it is dead weight

Measured against a live product:

Field

Share of payload

Needed in a search result?

description

44.1%

No — detail view only

images (5 sizes each)

15.8%

No — one URL at most

_links

7.4%

Never

add_to_cart

6.3%

Never — this server is read-only

price_html

2.6%

No — raw cents is enough

extensions, tags

5.1%

Never

So results come back in two shapes: a compact projection for search (~340 bytes / ~85 tokens) and a full shape only from get_product, with the description HTML-stripped and truncated. That is a ~15x reduction, and it is the difference between 50 results fitting in context and blowing it out. Every response also carries total_matches, page and total_pages so a model paginates deliberately instead of asking for everything.

2. Attribute filters take term IDs, and this catalog's terms are dirty

The Store API filters on term_id, never on names. And one cartridge is spelled many ways:

.223  |  .223 Rem  |  223 Rem  |  223 Remington  |  .223 Rem/5.56 NATO  |  5.56×45mm NATO

Inch marks arrive as two different entities for the same value6.5 Creedmoor/20” and 6.5 Creedmoor/20″.

Picking the single best-matching term returns 126 products for .223. ORing the whole family returns 138. So resolution deliberately fans out — you pass caliber: "223" and the server expands it to every term in the family and joins the IDs, which the Store API treats as OR. The response reports the expansion in notes.

The matching rule that makes this safe is a domain distinction: in cartridge naming a slash means "chambers both" (.223 Rem/5.56 NATO) while a hyphen means "wildcat built on that parent case" — a different cartridge that will not chamber. So 6mm-223, .17-223 and 7mm-223 Ingram are correctly excluded from a .223 search even though all three contain the string "223".

Catalog hygiene

Two quirks of the live store are handled by default, because both produce confidently wrong answers otherwise:

  • 15 internal Shipping test product #N rows are live at $0.01. Without filtering, "what's the cheapest item?" returns a QA artifact. They are hidden by default; pass include_test_products: true to see them. (The cheapest genuine item is a $0.49 pack of earplugs.)

  • $0.00 means "call for price", not free. Special orders such as a Beretta 693 shotgun list at zero. These are reported as price_on_request: true with a null price, so a model never announces a $2,775 shotgun is free.

Also worth knowing: only ~34% of the catalog (1,923 of 5,602) is in stock. Pass in_stock_only: true for buyable items.

Configuration

All optional:

Variable

Default

Purpose

RANGEVIEW_BASE_URL

https://www.rangeviewsports.ca

Point at another WooCommerce store

RANGEVIEW_TIMEOUT_MS

20000

Per-request timeout

RANGEVIEW_MAX_RETRIES

3

Retries on 429/5xx with backoff

RANGEVIEW_TAXONOMY_TTL_MS

3600000

Category/attribute cache lifetime

RANGEVIEW_DESC_MAX_CHARS

1500

Description truncation in get_product

Tests

npm test              # all 35
npm run test:unit     # 22, offline
npm run test:integration  # 13, hits the live API

Set RANGEVIEW_SKIP_INTEGRATION=1 to skip the network tests.

Notes

This reads a public, unauthenticated endpoint that the store already serves to every browser, and it is rate-limit-friendly (single-page queries, cached taxonomy, backoff on 429). It is not affiliated with or endorsed by Rangeview Sports. Product data, availability and pricing belong to them and change without notice — confirm anything that matters on the site itself.

MIT licensed.

Available Tools

5 tools
check_availabilityCheck price and stockA

Bulk price/stock lookup for up to 20 products by id, SKU, or name. Use when tracking specific items rather than browsing.

ParametersJSON Schema
NameRequiredDescriptionDefault
identifiersYesProduct ids, SKUs, or names (max 20)

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It states a read operation (lookup) and limits to 20 items, but does not disclose error handling, response format, or authentication requirements. This is adequate for a simple lookup but lacks depth.

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 two sentences with no extraneous words. It efficiently conveys the function and usage guidance, earning its place without redundancy.

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?

No output schema exists, so the description omits return value details. For a bulk lookup, mentioning what the response contains (e.g., mapping of identifiers to price/stock) would improve completeness. Still, the description is largely sufficient for simple usage.

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

Parameters3/5

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

Schema coverage is 100%, and the parameter description is clear. The tool description adds no additional semantic information beyond what is already in the schema, so a baseline score of 3 is appropriate.

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 specifies a clear verb ('lookup') and resource ('price/stock for up to 20 products'), with explicit identifiers (id, SKU, or name). It distinguishes from siblings like search_products and get_product by focusing on bulk lookup of specific items.

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 guidance 'Use when tracking specific items rather than browsing', providing clear context on when to use this tool. It indirectly contrasts with browsing tools, but does not explicitly mention alternatives or exclusions.

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

get_productGet product detailA

Full detail for one product by id, slug, or SKU: description, attributes (caliber, barrel length, action…), brand, stock, rating and image.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoNumeric product id
skuNoStore SKU
slugNoURL slug

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It describes the return fields but does not mention behavior on missing products, authorization, or side effects. For a read-only tool, this is adequate but could be improved.

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?

Single sentence that is front-loaded with the main purpose, followed by a list of return fields. No unnecessary words.

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 no output schema, the description lists the returned information (description, attributes, brand, stock, rating, image). It lacks mention of error handling or that only one identifier should be provided, but covers the essentials.

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 100%, but the description adds value by explaining that id, slug, or SKU are alternative identifiers for the product, which is not explicit in 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 clearly states it provides full detail for a product by id, slug, or SKU, listing specific fields. It distinguishes from sibling tools like search_products which return lists.

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 specifies how to identify the product (by id, slug, or SKU), implying the agent should use exactly one. While it doesn't explicitly state when not to use this tool, the context of sibling tools makes it clear this is for single product detail.

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

list_categoriesBrowse categoriesA

Browse the 376-category tree. No arguments lists top-level categories (Firearms, Ammo, Optics…); pass parent to descend or search to find one anywhere.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax categories to return (default 40)
parentNoParent category name, slug, or id
searchNoFind categories by name fragment

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses the number of categories (376), tree structure, and argument effects. Missing details like read-only nature, auth needs, or pagination, but covers core behavior adequately.

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?

Two concise sentences. First sentence sets scope (376-category tree), second explains argument usage. No redundancy, front-loaded with key info. Every word earns its place.

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?

No output schema exists, but description doesn't explain return format. However, for a category browser, the return is likely intuitive. Given the tool's simplicity and good annotations coverage (though absent), it is complete enough for typical use.

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 100%, so baseline is 3. The description adds value beyond schema by explaining parent 'descends' and search 'finds one anywhere', and mentions default limit of 40 (schema also says default 40). This context aids agent in understanding parameter purpose.

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 browses a category tree and specifies behavior with no arguments (top-level) vs parent or search arguments. It distinguishes from sibling tools like search_products which target products, not categories.

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 explains how to use the tool: no arguments for top-level, parent to descend, search to find. It implicitly covers when to use it (for categories) but lacks explicit exclusions or alternatives. However, sibling tools provide enough context.

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

list_filter_valuesList filter valuesA

Discover filterable attributes and their valid values. No arguments lists all 83 attributes (Caliber, Action, Barrel Length…); pass attribute to list its values with product counts. Use this to ground a filter before searching.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax values to return (default 40)
searchNoFilter values by name fragment
attributeNoAttribute name, e.g. 'Caliber'

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses that the output includes 'product counts' when passing an attribute, which adds behavioral detail beyond a simple list. However, it doesn't mention rate limits, authentication requirements, or error behavior.

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 two sentences long, front-loading the purpose and then detailing behavior. Every sentence earns its place with no fluff.

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 tool with 3 optional parameters and no output schema, the description adequately explains both modes of operation and mentions product counts in the output. It doesn't cover pagination or sorting, but given the tool's discovery nature, it is reasonably complete.

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 100%, with each parameter described. The description adds value by explaining the dual-mode behavior (no args vs. with attribute) and the inclusion of product counts, which is not evident from the schema alone. The enumeration of example attributes ('Caliber, Action, Barrel Length…') provides context.

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 'Discover filterable attributes and their valid values', specifying both the verb (discover) and resource (filterable attributes/values). It distinguishes itself from sibling tools like search_products and get_product by focusing on the filtering infrastructure.

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 clear usage context: 'Use this to ground a filter before searching'. It explains the behavior with no arguments (list all attributes) and with an attribute argument (list values with product counts). It doesn't explicitly state when not to use it, but the guidance is sufficient.

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

search_productsSearch productsA

Search the Rangeview Sports catalog (~5,600 products). Combine free-text with category, caliber, brand, price range, stock and sale filters. Caliber and brand accept everyday spellings ('223', '6.5 Creedmoor') and are expanded to every matching catalog term. Returns compact records; call get_product for full detail. Note only ~34% of the catalog is in stock — pass in_stock_only for buyable items.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-based
sortNoDefault: relevance with a query, popularity without
brandNoBrand name, e.g. 'Tikka', 'Sig Sauer'
limitNoResults per page (1-50, default 10)
queryNoFree-text search, e.g. 'Tikka T3x' or 'red dot'
caliberNoCaliber, e.g. '223', '6.5 Creedmoor', '12 gauge'
categoryNoCategory name, slug, or id. Use list_categories to browse.
max_priceNoMaximum price in CAD dollars
min_priceNoMinimum price in CAD dollars
attributesNoOther attribute filters, e.g. {"Action":"Bolt Action"}. See list_filter_values.
on_sale_onlyNoOnly items on sale
in_stock_onlyNoOnly currently in-stock items
include_test_productsNoInclude internal $0.01 test rows, hidden by default

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description discloses key behaviors: spelling expansion for caliber and brand, compact record return, stock percentage, and hidden test products. This provides full transparency beyond what the schema offers.

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?

Four sentences, no wasted words, front-loaded purpose, logical flow from main function to details to a practical note about stock. Ideal conciseness.

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 13 parameters, no output schema, and nested objects, the description covers scope, filtering capability, special behaviors, stock context, and directs to sibling tools for more detail. Everything an agent needs to know is present.

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 100%, but description adds value by explaining that caliber and brand accept everyday spellings and are expanded to matching catalog terms, which is not in the schema. Baseline 3, extra context raises to 4.

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 it searches the Rangeview Sports catalog (~5,600 products), combines free-text with multiple filters, and distinguishes from siblings by mentioning get_product for full detail and list_categories for browsing categories.

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 tells when to use this tool vs alternatives: 'Returns compact records; call get_product for full detail' and suggests using in_stock_only for buyable items due to low stock percentage.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv0.1.0
    • First observedcheck_availability
    • First observedget_product
    • First observedlist_categories
    • First observedlist_filter_values
    • First observedsearch_products

TDQS

A4.4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct function: searching, getting details, browsing categories, discovering filter values, and bulk checking availability. No overlap exists, and the descriptions clearly differentiate their use cases.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (search_products, get_product, list_categories, list_filter_values, check_availability). The verbs are descriptive and the nouns clearly indicate the resource.

Tool Count5/5

With 5 tools, the server covers the essential operations for a product catalog (search, detail, category navigation, filter discovery, stock check) without being overly sparse or excessive. Each tool serves a clear purpose.

Completeness5/5

The tool set covers the full workflow for browsing and evaluating products: exploring categories and filters, searching with filters, getting full details, and checking availability. No obvious gaps exist for a read-only catalog.

Maintenance

ActivitySlowing
ResponsivenessNo issues

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
    Not graded
    quality
    F
    maintenance
    MCP server for the BuyWhere product catalog. Lets Claude Desktop, Cursor, Windsurf, and other MCP-compatible agents search and retrieve products without writing any HTTP code.
    71
    MIT