Skip to main content
Glama

RuneScape Wiki MCP: GE Analytics & References

Estimate Flip Profit

estimate_flip
Read-onlyIdempotent

Calculate RS3 resale-profit scenarios after seller tax. ESTIMATE ONLY; never places an order. Use get_item_details for current records/comparisons or lookup_item to resolve names.

  • itemId=4151 means Abyssal whip, not a quantity. quantity scales total investment, tax and profit without changing per-unit margin.

  • Omitting both prices gives identical buy/sell prices, usually a tax loss. Supply itemId and both prices to calculate without network access.

  • Seller tax is 2% of each unit's sell price, rounded down. Bonds and sales at 50 coins or less are exempt.

  • With quantity=20 and buyLimitRemaining=5, quota profit covers five units while requested totals still cover twenty. fillTimeMinutes converts full-request profit into an hourly rate, including assumed quota waits. Both inputs are caller assumptions, not observed limits or fill predictions.

  • Sampled prices lag live offers. Reads are uncached and require no credentials. HTTP defaults to 60 requests/IP/minute; wait for Retry-After after 429.

Input Schema

NameRequiredDescriptionDefault
itemIdYesKnown GE item ID resolved with lookup_item
buyPriceNoBuy price per item in coins. Defaults to the latest Weirdgloop sample, then Jagex guide price.
quantityNoNumber of items to flip (default 1)
sellPriceNoSell price per item in coins. Defaults to the latest Weirdgloop sample, then Jagex guide price.
fillTimeMinutesNoCaller-assumed minutes to buy and resell the full requested quantity, including any quota waits
buyLimitRemainingNoCaller-supplied remaining purchase quota in the current buy-limit window; 0 means none available

Output Schema

NameRequiredDescriptionDefault
itemIdYes
taxRateNo
buyPriceYesBuy price per item in coins
itemNameNo
quantityYes
totalTaxNo
marginPctNo
netProfitYes
sellPriceYesSell price per item in coins
taxPerUnitNo
assumptionsNo
grossProfitNo
netProfitPerUnitNo
executionScenarioNoPresent only for caller-supplied capacity or duration scenarios; not a market prediction
breakEvenSellPriceNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • removedInput schema / oneOf
      Removed value: -[
      -  {
      -    "required": [
      -      "itemId"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "name"
      -    ]
      -  }
      -]
    • 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). Prefer lookup_item for fuzzy search.",
      -  "minLength": 1,
      -  "type": "string"
      -}
    • addedInput schema / required
      Added value: +[
      +  "itemId"
      +]
  2. Changed6 schema fields changed
    • addedInput schema / oneOf
      Added value: +[
      +  {
      +    "required": [
      +      "itemId"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "name"
      +    ]
      +  }
      +]
    • addedInput schema / properties / buyLimitRemaining
      Added value: +{
      +  "description": "Caller-supplied remaining purchase quota in the current buy-limit window; 0 means none available",
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • changedInput schema / properties / buyPrice / description
      Previous value: -"Buy price per item in coins. Defaults to the current market price."New value: +"Buy price per item in coins. Defaults to the latest Weirdgloop sample, then Jagex guide price."
    • addedInput schema / properties / fillTimeMinutes
      Added value: +{
      +  "description": "Caller-assumed minutes to buy and resell the full requested quantity, including any quota waits",
      +  "exclusiveMinimum": 0,
      +  "type": "number"
      +}
    • changedInput schema / properties / sellPrice / description
      Previous value: -"Sell price per item in coins. Defaults to the current market price."New value: +"Sell price per item in coins. Defaults to the latest Weirdgloop sample, then Jagex guide price."
    • addedOutput schema / properties / executionScenario
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Present only for caller-supplied capacity or duration scenarios; not a market prediction",
      +  "properties": {
      +    "assumedFillTimeMinutes": {
      +      "type": "number"
      +    },
      +    "assumedNetProfitPerHour": {
      +      "description": "Full requested profit divided by caller-assumed round-trip hours",
      +      "type": "number"
      +    },
      +    "buyLimitRemaining": {
      +      "type": "integer"
      +    },
      +    "netProfitWithinBuyLimit": {
      +      "description": "Tax-adjusted profit on the quantity executable within the supplied quota",
      +      "type": "number"
      +    },
      +    "quantityOverBuyLimit": {
      +      "type": "integer"
      +    },
      +    "quantityWithinBuyLimit": {
      +      "type": "integer"
      +    }
      +  },
      +  "type": "object"
      +}
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "additionalProperties": true,
      +  "description": "Flip estimate after the RS3 2% seller tax. marginPct is null when the buy cost is 0.",
      +  "properties": {
      +    "assumptions": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "breakEvenSellPrice": {
      +      "type": "number"
      +    },
      +    "buyPrice": {
      +      "description": "Buy price per item in coins",
      +      "type": "number"
      +    },
      +    "grossProfit": {
      +      "type": "number"
      +    },
      +    "itemId": {
      +      "type": "integer"
      +    },
      +    "itemName": {
      +      "type": "string"
      +    },
      +    "marginPct": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "netProfit": {
      +      "type": "number"
      +    },
      +    "netProfitPerUnit": {
      +      "type": "number"
      +    },
      +    "quantity": {
      +      "type": "integer"
      +    },
      +    "sellPrice": {
      +      "description": "Sell price per item in coins",
      +      "type": "number"
      +    },
      +    "taxPerUnit": {
      +      "type": "number"
      +    },
      +    "taxRate": {
      +      "type": "number"
      +    },
      +    "totalTax": {
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "itemId",
      +    "quantity",
      +    "buyPrice",
      +    "sellPrice",
      +    "netProfit"
      +  ],
      +  "type": "object"
      +}
  4. First observed

TDQS

A5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds substantial behavioral context beyond those annotations: it never places an order, seller tax is 2% rounded down with exemptions, sampled prices lag live offers, reads are uncached and require no credentials, and HTTP defaults to 60 requests/IP/minute with Retry-After handling after 429.

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 definition is front-loaded with purpose and safety, then uses compact bullets to cover tax rules, assumptions, quota handling, price freshness, and rate limits. Every bullet adds material information for correct invocation rather than repeating 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. Annotations cover safety and read-only behavior, while the description fills in critical estimation assumptions, tax treatment, quota interpretation, fill-time assumptions, price staleness, and rate-limit behavior, making the definition complete for this calculation 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 description coverage is 100%, but the description adds meaningful semantics beyond the schema: itemId=4151 means Abyssal whip rather than quantity, quantity scales total investment/tax/profit without changing per-unit margin, and buyLimitRemaining plus quantity create two profit views. It also explains fillTimeMinutes converts full-request profit into an hourly rate using caller assumptions.

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 a specific verb and resource: 'Calculate RS3 resale-profit scenarios after seller tax.' It immediately clarifies the tool is 'ESTIMATE ONLY; never places an order' and routes name resolution to lookup_item and current record lookup to get_item_details, distinguishing it from siblings.

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?

The description explicitly names alternatives: use get_item_details for current records/comparisons and lookup_item to resolve item names. It also gives concrete usage conditions, such as supplying itemId and both prices for calculation without network access, and explains when omitting prices produces identical buy/sell prices.

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.