Skip to main content
Glama
birdwell

RuneScape Wiki MCP Server

by birdwell
README.md
# RuneScape Wiki MCP Server

A Model Context Protocol (MCP) server for **RuneScape 3** Grand Exchange prices, item name lookup, player hiscores, and wiki page extracts.

Speaks MCP **2026-07-28** (stateless) via `serveStdio`, with legacy 2025-era clients still supported.

## Prerequisites

- Node.js 20+
- npm

## Install / Build / Run

```bash
npm install
npm run build
npm start          # stdio MCP server
npm test           # unit + protocol compliance
npm run inspector  # MCP Inspector
```

## Claude Desktop

```json
{
  "mcpServers": {
    "runescape-wiki": {
      "command": "node",
      "args": ["/path/to/runescape-wiki-mcp/dist/index.js"]
    }
  }
}
```

## Tools

| Tool | Purpose |
|------|---------|
| `lookup_item` | **Name → ID + latest price** (Weirdgloop + wiki opensearch). Start here when you only know the name. |
| `get_item_price` | GE detail + trends by `itemId` **or** `name` |
| `get_item_graph` | 180-day price graph by `itemId` **or** `name` |
| `summarize_price_history` | Compact 7–90 day trend summary (min/max/avg/change/volume) |
| `compare_items` | Bulk compare up to 10 items by `names` or `itemIds` |
| `estimate_flip` | Flip profit estimate after RS3 2% GE sales tax |
| `browse_items` | Catalogue browse by category + starting letter (not a name search) |
| `get_all_categories` | Category ID → name map (0–43) |
| `get_category_info` | Letter counts for one category |
| `get_ge_info` | GE database metadata (`lastConfigUpdateRuneday`) |
| `get_player_stats` | RS3 hiscores by username (`gameMode`: `normal` works; ironman/hardcore currently 404 from Jagex) |
| `get_wiki_page_content` | Plain-text wiki extract (follows redirects) |

### Prompts (workflow templates)

| Prompt | Args |
|--------|------|
| `check_item_price` | `itemName` |
| `compare_ge_items` | `items` (comma-separated) |
| `estimate_item_flip` | `itemName`, optional `quantity` |
| `player_overview` | `username` |

### Typical agent flow

```
lookup_item { query: "abyssal whip" }
  → id 4151, price …
get_item_price { itemId: 4151 }   # or { name: "Abyssal whip" }
get_item_graph { itemId: 4151 }
```

## Resources

| URI | Contents |
|-----|----------|
| `runescape://ge/info` | GE database info (not prices) |
| `runescape://ge/categories` | Canonical category list |

## Data sources

- Jagex GE: `https://secure.runescape.com/m=itemdb_rs/api`
- Jagex hiscores lite: `https://secure.runescape.com/m=hiscore/index_lite.ws`
- Weirdgloop RS exchange: `https://api.weirdgloop.org/exchange/history/rs`
- RuneScape Wiki MediaWiki API: `https://runescape.wiki/api.php`

All requests send User-Agent:  
`RuneScape Wiki MCP Server - github.com/joshbirdwell/runescape-wiki-mcp`

## Project layout

```
src/
├── index.ts          # stdio entry (serveStdio)
├── smithery.ts       # Smithery HTTP factory
├── server.ts         # createServer() + handlers
├── itemResolve.ts    # name → ID resolution
├── categories.ts     # GE category table
├── tools/            # MCP tools
└── resources.ts      # MCP resources
```

## Notes

- **RS3 only**, not OSRS (different IDs and endpoints).
- Ironman/hardcore `index_lite` endpoints are documented by Jagex but currently return HTTP 404; the tool reports that instead of silently returning normal-mode data.
- Smithery hosts should rebuild the server card after tool changes so the published schema matches this README.

## License

MIT — unofficial; not affiliated with Jagex or the RuneScape Wiki.

TDQS

A4.3/5.0

Scored across 12 tools

Disambiguation4/5

Most tools have clearly distinct purposes, with price-related tools differentiated by granularity (summary vs. full graph vs. current price) and explicit cross-references in descriptions. Minor overlap exists between lookup_item and get_item_price, but the descriptions clarify when to use each.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case, using descriptive verbs like get, summarize, browse, compare, and estimate. No mixed conventions or vague identifiers.

Tool Count5/5

12 tools is well within the ideal 3-15 range and matches the server's multi-faceted scope (GE prices, categories, player stats, wiki content). Each tool has a distinct role, and the count feels neither bloated nor sparse.

Completeness4/5

The Grand Exchange price surface is thoroughly covered: lookup, current price, history, summary, comparison, flipping estimates, categories, and catalogue browsing. Minor gaps include a lack of a dedicated wiki search tool and the known limitation of ironman/hardcore hiscores returning 404.

Maintenance

ActivitySlowing
ResponsivenessNo issues