Skip to main content
Glama

RuneScape Wiki MCP: GE Analytics & References

Read Item Price History

get_price_series
Read-onlyIdempotent

Read dated RS3 price history for one known GE item. Resolve names with lookup_item; use get_item_details for current records or candidate comparisons.

  • itemId=4151 means Abyssal whip, not a quantity. For observations, choose Jagex for provider averages over roughly 180 days or Weirdgloop for daily samples with reported volume over roughly 90 days.

  • from/to include whole UTC days. Equal bounds cover that day; omitted bounds retain all available history. Requested dates cannot extend retention.

  • statistics computes min/max, unweighted mean and start-to-end change from a fixed 90-day Weirdgloop fetch. For example, days=7 takes the last seven usable samples even if missing dates make them span more than a week.

  • Each call returns its full retained series or statistics in one bounded response; there is no cursor or next page. Unavailable observation dates return empty data; unusable statistics history returns an error. Invalid bounds fail before fetching.

  • Reads are uncached and require no credentials. Provider errors surface without switching sources or retrying automatically. HTTP defaults to 60 requests/IP/minute; wait for Retry-After after 429.

Input Schema

NameRequiredDescriptionDefault
toNoLast UTC date to include; omitted means end of available history
daysNoSample window for the statistics view
fromNoFirst UTC date to include; omitted means start of available history
viewNoRaw observations (original default) or computed Weirdgloop statisticsobservations
itemIdYesKnown GE item ID resolved with lookup_item
sourceNoHistory data provider; allowed values and defaults depend on view

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / days / description
      Previous value: -"Defaults to 30 trailing usable daily samples for statistics only; not a calendar-date range"New value: +"Sample window for the statistics view"
    • changedInput schema / properties / source / description
      Previous value: -"Observations: jagex by default or weirdgloop. Statistics: weirdgloop only, also the default for that view."New value: +"History data provider; allowed values and defaults depend on view"
  2. Changed14 schema fields changed
    • changedInput schema / oneOf
      Previous value: -[
      -  {
      -    "required": [
      -      "itemId"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "name"
      -    ]
      -  }
      -]New value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "days"
      +      ]
      +    },
      +    "properties": {
      +      "source": {
      +        "default": "jagex"
      +      },
      +      "view": {
      +        "const": "observations"
      +      }
      +    }
      +  },
      +  {
      +    "not": {
      +      "anyOf": [
      +        {
      +          "required": [
      +            "from"
      +          ]
      +        },
      +        {
      +          "required": [
      +            "to"
      +          ]
      +        }
      +      ]
      +    },
      +    "properties": {
      +      "days": {
      +        "default": 30
      +      },
      +      "source": {
      +        "const": "weirdgloop",
      +        "default": "weirdgloop"
      +      },
      +      "view": {
      +        "const": "statistics"
      +      }
      +    },
      +    "required": [
      +      "view"
      +    ]
      +  }
      +]
    • addedInput schema / properties / days
      Added value: +{
      +  "description": "Defaults to 30 trailing usable daily samples for statistics only; not a calendar-date range",
      +  "maximum": 90,
      +  "minimum": 7,
      +  "type": "integer"
      +}
    • changedInput schema / properties / itemId / description
      Previous value: -"Grand Exchange item ID (provide itemId or name)"New value: +"Known GE item ID resolved with lookup_item"
    • removedInput schema / properties / name
      Removed value: -{
      -  "description": "Item name (provide itemId or name)",
      -  "minLength": 1,
      -  "type": "string"
      -}
    • removedInput schema / properties / source / default
      Removed value: -"jagex"
    • changedInput schema / properties / source / description
      Previous value: -"Provider/shape: Jagex daily+average maps (default), or raw Weirdgloop daily samples"New value: +"Observations: jagex by default or weirdgloop. Statistics: weirdgloop only, also the default for that view."
    • addedInput schema / properties / view
      Added value: +{
      +  "default": "observations",
      +  "description": "Raw observations (original default) or computed Weirdgloop statistics",
      +  "enum": [
      +    "observations",
      +    "statistics"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / required
      Added value: +[
      +  "itemId"
      +]
    • removedOutput schema / $schema
      Removed value: -"https://json-schema.org/draft/2020-12/schema"
    • removedOutput schema / additionalProperties
      Removed value: -true
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "$schema": "https://json-schema.org/draft/2020-12/schema",
      +    "additionalProperties": true,
      +    "oneOf": [
      +      {
      +        "required": [
      +          "daily",
      +          "average"
      +        ]
      +      },
      +      {
      +        "required": [
      +          "itemId",
      +          "source",
      +          "samples"
      +        ]
      +      }
      +    ],
      +    "properties": {
      +      "average": {
      +        "additionalProperties": {
      +          "type": "number"
      +        },
      +        "description": "Jagex averaged guide prices in coins, keyed by Unix timestamp in milliseconds",
      +        "type": "object"
      +      },
      +      "daily": {
      +        "additionalProperties": {
      +          "type": "number"
      +        },
      +        "description": "Daily guide prices in coins, keyed by Unix timestamp in milliseconds",
      +        "type": "object"
      +      },
      +      "itemId": {
      +        "description": "Grand Exchange item ID",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "samples": {
      +        "description": "Chronological usable observations; malformed timestamp/price rows are discarded, unreported volume omitted, and an entirely malformed nonempty feed is an error",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "price": {
      +              "description": "Observed guide price in coins",
      +              "minimum": 0,
      +              "type": "number"
      +            },
      +            "timestamp": {
      +              "description": "UTC Unix timestamp in milliseconds, not seconds",
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "volume": {
      +              "description": "Provider-reported daily volume, when available",
      +              "minimum": 0,
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "timestamp",
      +            "price"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "source": {
      +        "const": "weirdgloop",
      +        "description": "Present for the Weirdgloop sample-array variant"
      +      }
      +    },
      +    "required": [],
      +    "type": "object"
      +  },
      +  {
      +    "$schema": "https://json-schema.org/draft/2020-12/schema",
      +    "additionalProperties": false,
      +    "properties": {
      +      "avgDailyVolume": {
      +        "description": "Unweighted mean of reported daily volumes, rounded to a whole number; unreported values are excluded",
      +        "type": "number"
      +      },
      +      "avgPrice": {
      +        "description": "Average price in the window, rounded to whole coins",
      +        "type": "number"
      +      },
      +      "changeAbs": {
      +        "description": "latestPrice minus oldestPriceInWindow",
      +        "type": "number"
      +      },
      +      "changePct": {
      +        "description": "Percent change across the window, rounded to two decimals; 0 when the oldest price is 0",
      +        "type": "number"
      +      },
      +      "itemId": {
      +        "description": "Grand Exchange item ID",
      +        "type": "integer"
      +      },
      +      "latestPrice": {
      +        "description": "Newest price in the window, in coins",
      +        "type": "number"
      +      },
      +      "maxPrice": {
      +        "description": "Highest price in the window, in coins",
      +        "type": "number"
      +      },
      +      "minPrice": {
      +        "description": "Lowest price in the window, in coins",
      +        "type": "number"
      +      },
      +      "name": {
      +        "description": "Name supplied by the caller, when given",
      +        "type": "string"
      +      },
      +      "oldestPriceInWindow": {
      +        "description": "Oldest price in the window, in coins",
      +        "type": "number"
      +      },
      +      "sampleCount": {
      +        "description": "Daily samples inside the window",
      +        "type": "integer"
      +      },
      +      "windowDays": {
      +        "description": "Trailing window actually summarized",
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "itemId",
      +      "windowDays",
      +      "sampleCount",
      +      "latestPrice",
      +      "oldestPriceInWindow",
      +      "minPrice",
      +      "maxPrice",
      +      "avgPrice",
      +      "changeAbs",
      +      "changePct"
      +    ],
      +    "type": "object"
      +  }
      +]
    • removedOutput schema / oneOf
      Removed value: -[
      -  {
      -    "required": [
      -      "daily",
      -      "average"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "itemId",
      -      "source",
      -      "samples"
      -    ]
      -  }
      -]
    • removedOutput schema / properties
      Removed value: -{
      -  "average": {
      -    "additionalProperties": {
      -      "type": "number"
      -    },
      -    "description": "Jagex averaged guide prices in coins, keyed by Unix timestamp in milliseconds",
      -    "type": "object"
      -  },
      -  "daily": {
      -    "additionalProperties": {
      -      "type": "number"
      -    },
      -    "description": "Daily guide prices in coins, keyed by Unix timestamp in milliseconds",
      -    "type": "object"
      -  },
      -  "itemId": {
      -    "description": "Grand Exchange item ID",
      -    "minimum": 0,
      -    "type": "integer"
      -  },
      -  "samples": {
      -    "description": "Chronological usable observations; malformed timestamp/price rows are discarded, unreported volume omitted, and an entirely malformed nonempty feed is an error",
      -    "items": {
      -      "additionalProperties": false,
      -      "properties": {
      -        "price": {
      -          "description": "Observed guide price in coins",
      -          "minimum": 0,
      -          "type": "number"
      -        },
      -        "timestamp": {
      -          "description": "UTC Unix timestamp in milliseconds, not seconds",
      -          "minimum": 0,
      -          "type": "integer"
      -        },
      -        "volume": {
      -          "description": "Provider-reported daily volume, when available",
      -          "minimum": 0,
      -          "type": "number"
      -        }
      -      },
      -      "required": [
      -        "timestamp",
      -        "price"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  "source": {
      -    "const": "weirdgloop",
      -    "description": "Present for the Weirdgloop sample-array variant"
      -  }
      -}
    • removedOutput schema / required
      Removed value: -[]
  3. Added

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only cover read-only/idempotent safety, but the description adds substantial context beyond them: uncached reads, no credentials required, no pagination (full series in one bounded response), empty data for unavailable observation dates vs error for unusable statistics history, invalid bounds failing before any fetch, no automatic provider fallback or retry, and a 60 req/IP/min limit with Retry-After on 429.

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?

Purpose and sibling routing are front-loaded, and bullets group view/provider, date semantics, statistics caveats, response shape, and rate limits into separate concerns. It is dense and long, but nearly every sentence carries operational information an agent cannot get from the schema or annotations.

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?

An output schema exists, so return values need not be explained, yet the description still covers the response envelope (no cursor/next page), failure modes, and rate-limit behavior. For a 6-parameter tool with a oneOf constraint, all ambiguity an agent could hit is addressed.

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 100%, so baseline is 3, but the description adds real semantic meaning: itemId is an ID not a quantity, days=7 means the last seven *usable samples* rather than a calendar span, from/to are whole UTC days with equal bounds covering that day, and requested dates cannot extend retention.

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?

States a specific verb and resource ("Read dated RS3 price history") and scopes it to "one known GE item," immediately separating it from lookup_item and get_item_details by name. An agent can route correctly without opening the schema.

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 names two alternatives and the condition selecting each (lookup_item for name resolution, get_item_details for current records/candidates). It also gives per-view guidance on provider selection (Jagex ~180 days averages vs Weirdgloop ~90 days daily samples), so both the tool choice and the parameter choice are routed.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.